Given \(A \in R^{m\times n} (m \geq n)\), the following algorithm
overwrites \(A\) with \(U^T A V = D\), where
\(U\in R^{m\times m}\) is orthogonal, \(V \in R^{n\times n}\) is
orthogonal, and \(D \in R^{m\times n}\) is diagonal.
References
Gene N. Golub and Charles F. Van Loan.
Matrix Computations, second edition. Baltimore, Maryland:
The John Hopkins University Press, 1989, p.434.