{
  "aliases": null,
  "backlinks": null,
  "body": "\n## Statement\n\nLet $A \\in \\R^{m \\times n}$ with $m \\ge n$.\nThen there are [[orthogonal matrices|0W02QESPJQ]] $U \\in \\R^{m \\times m}$ and $V \\in \\R^{n \\times n}$ such that\n$$U^T A V = \\begin{pmatrix} B \\\\ 0 \\end{pmatrix},$$\nwhere $B \\in \\R^{n \\times n}$ is upper bidiagonal: $b_{ij} = 0$ unless $j = i$ or $j = i + 1$.\nMoreover $U$ can be taken as a product of at most $n$ [[Householder reflections|JDH0THTVGM]], and $V$ as a product of at most $n - 2$ of them.\nThis is the Golub–Kahan bidiagonalization.\nThe matrices $A$ and $B$ have the same [[singular values|09VMDSRXWJ]].\n\n## Remarks\n\nThe construction alternates sides.\nA reflection from the left zeros column $1$ below the diagonal.\nA reflection from the right acting on columns $2, \\dots, n$ then zeros row $1$ to the right of the superdiagonal.\nThe right reflection does not touch column $1$, so the zeros there survive.\nRepeating on the trailing submatrix gives $B$ after $n$ left and $n - 2$ right reflections.\nSingular values are preserved because multiplying by orthogonal matrices does not change $A^T A$ up to similarity: $(U^T A V)^T (U^T A V) = V^T A^T A V$.\n\nThe cost with Householder reflections is about $4 m n^2 - \\tfrac{4}{3} n^3$ floating point operations.\nThe matrix $B^T B$ is symmetric tridiagonal.\nSo bidiagonalization is the first phase of the standard [[singular value decomposition|000NPTMX6J]] algorithm, followed by an implicit QR iteration or a divide-and-conquer method on $B$.\nOne cannot go further to a diagonal matrix in finitely many steps in general, because the singular values are roots of polynomials of arbitrary degree.\nExample: let $n = 2$.\nOne left reflection maps the first column to a multiple of $e_1$, and one more acts on rows $2, \\dots, m$ of the second column.\nThis already gives an upper bidiagonal $2 \\times 2$ block, with $V = I$.\nWhen $m \\gg n$, it is cheaper to compute a QR factorization first and bidiagonalize the triangular factor.\n\n## Explanations\n\n### L1 human\n\nBidiagonalization uses rotations and reflections to turn any rectangular matrix into one whose only nonzero entries are on the diagonal and just above it.\nThese operations keep the singular values, which measure how much the matrix stretches in its principal directions.\nThe simpler shape makes computing those singular values much faster.\n\n### L2 human\n\nIt plays for the singular value decomposition the role that reduction to tridiagonal or Hessenberg form plays for eigenvalues.\nA Lanczos-type variant, Golub–Kahan–Lanczos bidiagonalization, builds $B$ one column at a time using only products with $A$ and $A^T$.\nIt is the basis of the LSQR method for sparse least squares and of methods for a few singular values.\n",
  "commit": "ff8a40749dc16545e3d2fc637f6b0196e81d0bfa",
  "front": {
    "about": [
      "09VMDSRXWJ"
    ],
    "kind": "statement",
    "msc": [
      "65F15",
      "65F25"
    ],
    "name": "Bidiagonalization",
    "role": "theorem",
    "same_as": {
      "wikidata": "Q4904167",
      "wikipedia": "Bidiagonalization"
    },
    "sources": [
      {
        "url": "https://en.wikipedia.org/wiki/Bidiagonalization"
      }
    ],
    "tag": "S7MC88TW6W",
    "uses": [
      "0W02QESPJQ",
      "JDH0THTVGM",
      "09VMDSRXWJ",
      "000NPTMX6J"
    ]
  },
  "kind": "statement",
  "link": "https://tamnd.github.io/math2/node/S7MC88TW6W/",
  "links": [
    {
      "field": "about",
      "target": "09VMDSRXWJ"
    },
    {
      "field": "uses",
      "target": "0W02QESPJQ"
    },
    {
      "field": "uses",
      "target": "JDH0THTVGM"
    },
    {
      "field": "uses",
      "target": "09VMDSRXWJ"
    },
    {
      "field": "uses",
      "target": "000NPTMX6J"
    }
  ],
  "markdown": "https://tamnd.github.io/math2/node/S7MC88TW6W.md",
  "msc": [
    "65F15",
    "65F25"
  ],
  "name": "Bidiagonalization",
  "prov": null,
  "role": "theorem",
  "source": "https://github.com/tamnd/math2/blob/main/nodes/S7M/S7MC88TW6W.md",
  "status": null,
  "tag": "S7MC88TW6W",
  "uri": "m2://S7MC88TW6W",
  "url": "https://tamnd.github.io/math2/wiki/bidiagonalization/",
  "writing": {
    "tag": "S7MC88TW6W",
    "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
      }
    ]
  }
}
