lapacksvd

Which algorithm does DGESVD in LAPACK implement?


I'm curious about the DGESVD function used to calculate SVD in MATLAB. As far as I can tell from "Matrix Computations" by Gene H. Golub and Charles F. Van Loan, there are two possible bidiagonalization schemes used - the Householder Bidiagonalization and R-Bidiagonalization. However, I wasn't able to determine from the LAPACK documentation which is being used. Anyone have any ideas?


Solution

  • According to the LAPACK User's Guide, the reduction to bidiagonal form is done by the routine DGEBRD, which uses Householder reflections.

    2.4.6 "Singular Value Decomposition":

    The routine xGEBRD represents U1 and V1 in factored form as products of elementary reflectors, as described in section 5.4.

    5.4 "Representation of Orthogonal or Unitary Matrices":

    A real orthogonal or complex unitary matrix (usually denoted Q) is often represented in LAPACK as a product of elementary reflectors -- also referred to as elementary Householder matrices