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?
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