Report Number: CS-TR-77-588
Institution: Stanford University, Department of Computer Science
Title: On computing the singular value decomposition
Author: Chan, Tony Fan C.
Date: February 1977
Abstract: The most well-known and widely-used algorithm for computing the Singular Value Decomposition (SVD) of an m x n rectangular matrix A nowadays is the Golub-Reinsch algorithm [1971]. In this paper, it is shown that by (1) first triangularizing the matrix A by Householder transformations before bidiagonalizing it, and (2) accumulating some left transformations on a n x n array instead of on an m x n array, the resulting algorithm is often more efficient than the Golub-Reinsch algorithm, especially for matrices with considerably more rows than columns (m >> n), such as in least squares applications. The two algorithms are compared in terms of operation counts, and computational experiments that have been carried out verify the theoretical comparisons. The modified algorithm is more efficient even when m is only slightly greater than n, and in some cases can achieve as much as 50% savings when m >> n. If accumulation of left transformations is desired, then $n^2$ extra storage locations are required (relatively small if m >> n), but otherwise no extra storage is required. The modified algorithm uses only orthogonal transformations and is therefore numerically stable. In the Appendix, we give the Fortran code of a hybrid method which automatically selects the more efficient of the two algorithms to use depending upon the input values for m and n.
http://i.stanford.edu/pub/cstr/reports/cs/tr/77/588/CS-TR-77-588.pdf