{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $T \\in \\R^{n \\times n}$ be a symmetric [[tridiagonal matrix|DARX1KZRHZ]] with diagonal entries $a_1, \\dots, a_n$ and off-diagonal entries $b_1, \\dots, b_{n-1}$, and let $1 \\le k \u003c n$ with $\\beta = b_k$.\n\n1. (Splitting.) Let $T_1$ be the leading $k \\times k$ block of $T$ with $a_k$ replaced by $a_k - \\beta$, and $T_2$ the trailing $(n-k) \\times (n-k)$ block with $a_{k+1}$ replaced by $a_{k+1} - \\beta$. With $u = e_k + e_{k+1}$,\n$$T = \\begin{pmatrix} T_1 \u0026 0 \\\\ 0 \u0026 T_2 \\end{pmatrix} + \\beta \\, u u^T.$$\nIf $T_i = Q_i D_i Q_i^T$ with $Q_i$ [[orthogonal|0W02QESPJQ]] and $D_i$ [[diagonal|044JNC7ZAA]], then $T = Q (D + \\beta z z^T) Q^T$ with $Q = \\mathrm{diag}(Q_1, Q_2)$, $D = \\mathrm{diag}(D_1, D_2)$ and $z = Q^T u$.\n2. (Secular equation.) Let $D = \\mathrm{diag}(d_1, \\dots, d_n)$ with $d_1 \u003c d_2 \u003c \\cdots \u003c d_n$, let $z \\in \\R^n$ have all entries nonzero, and let $\\beta \u003e 0$. Then the [[eigenvalues|0BQAA2BK3Q]] of $D + \\beta z z^T$ are the $n$ roots of\n$$f(\\lambda) = 1 + \\beta \\sum_{i=1}^{n} \\frac{z_i^2}{d_i - \\lambda},$$\nthey satisfy $d_1 \u003c \\lambda_1 \u003c d_2 \u003c \\lambda_2 \u003c \\cdots \u003c d_n \u003c \\lambda_n$, and $(D - \\lambda_j I)^{-1} z$ is an [[eigenvector|0N6960W0BV]] for $\\lambda_j$.\n\n## Remarks\n\nPart 1 is a direct check of entries: $u u^T$ has ones exactly in positions $(k, k)$, $(k, k+1)$, $(k+1, k)$, $(k+1, k+1)$.\nFor part 2, if $(D + \\beta z z^T) x = \\lambda x$ and $\\lambda$ is not a $d_i$, then $x = -\\beta (z^T x)(D - \\lambda I)^{-1} z$ with $z^T x \\ne 0$, and taking the inner product with $z$ gives $f(\\lambda) = 0$.\nSince $f'(\\lambda) = \\beta \\sum_i z_i^2/(d_i - \\lambda)^2 \u003e 0$ and $f$ goes from $-\\infty$ to $+\\infty$ between consecutive poles, and from $-\\infty$ to $1$ after $d_n$, there is exactly one root in each of these $n$ intervals.\nFor $\\beta \u003c 0$ the interlacing is reversed: $\\lambda_1 \u003c d_1 \u003c \\lambda_2 \u003c \\cdots \u003c \\lambda_n \u003c d_n$.\nIf some $z_i = 0$ or some $d_i$ coincide, then some $d_i$ is already an eigenvalue and the problem is reduced in size first; this step is called deflation.\n\nThe algorithm applies the splitting recursively, solves the small problems directly, and merges with the secular equation.\nEach root is found by a safeguarded Newton-type iteration on $f$ in its interval.\nComputing the eigenvectors in a numerically orthogonal way needs a careful recomputation of $z$, due to Gu and Eisenstat.\n\n## Explanations\n\n### L1 human\n\nTo find the eigenvalues of a big symmetric tridiagonal matrix, cut it into two halves at one entry.\nSolve the two halves, possibly by cutting them again, and then glue the answers.\nGluing changes the matrix by a simple rank-one piece.\nThe new eigenvalues are the roots of one scalar equation, with exactly one root between each pair of neighboring old eigenvalues.\n\n### L2 human\n\nSymmetric eigenvalue problems are first reduced to tridiagonal form by orthogonal transformations, so this algorithm handles the core step.\nIt is among the fastest methods when all eigenvalues and eigenvectors are wanted, because deflation is frequent in practice and the merges use matrix multiplication.\nThe interlacing in part 2 is a rank-one analogue of the [[Cauchy interlacing theorem|8QQPVNR80F]].\nThe method was proposed by Cuppen in 1981.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "HCJ2ETX89Z"
    ],
    "kind": "statement",
    "msc": [
      "65F15"
    ],
    "name": "Divide-and-conquer eigenvalue algorithm",
    "role": "theorem",
    "same_as": {
      "wikidata": "Q5283998",
      "wikipedia": "Divide-and-conquer eigenvalue algorithm"
    },
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Divide-and-conquer_eigenvalue_algorithm"
      }
    ],
    "tag": "BJE8P9TH88",
    "uses": [
      "DARX1KZRHZ",
      "0VR671PHE5",
      "044JNC7ZAA",
      "0BQAA2BK3Q",
      "0N6960W0BV",
      "0W02QESPJQ"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/BJE8P9TH88/",
  "links": [
    {
      "field": "about",
      "target": "HCJ2ETX89Z"
    },
    {
      "field": "uses",
      "target": "DARX1KZRHZ"
    },
    {
      "field": "uses",
      "target": "0VR671PHE5"
    },
    {
      "field": "uses",
      "target": "044JNC7ZAA"
    },
    {
      "field": "uses",
      "target": "0BQAA2BK3Q"
    },
    {
      "field": "uses",
      "target": "0N6960W0BV"
    },
    {
      "field": "uses",
      "target": "0W02QESPJQ"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/BJE8P9TH88.md",
  "msc": [
    "65F15"
  ],
  "name": "Divide-and-conquer eigenvalue algorithm",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/BJE/BJE8P9TH88.md",
  "status": null,
  "tag": "BJE8P9TH88",
  "uri": "m2://BJE8P9TH88",
  "url": "https://tamnd.github.io/math2/wiki/divide-and-conquer-eigenvalue-algorithm/",
  "writing": {
    "tag": "BJE8P9TH88",
    "kind": "statement",
    "level": "W0",
    "next": [
      {
        "what": "an inventory row",
        "note": "the row of the inventory that the node accounts for",
        "have": 0,
        "want": 1
      },
      {
        "what": "a source with a locator",
        "have": 0,
        "want": 1
      }
    ]
  }
}
