As described in §2.4.7, there are several problems closely related to the SVD whose solutions we describe here. This list is not exhaustive, because the use of low rank approximations to matrices (for which the ``optimal'' one is supplied by the truncated SVD) is very widespread in applications. Depending on the application, it may be appropriate to use an SVD algorithm described here or another low rank approximation.
Software using transformation methods (i.e., suitable for dense matrices) is available in LAPACK driver routine xGGSVD, for the more general case of being singular or by . It is also available as the MATLAB command gsvd. No ScaLAPACK software is available. The advantage of using these algorithms is accuracy only; that is, when is ill-conditioned they can be much more accurate than simply forming and computing its SVD. But they are also rather slower, so if is well-conditioned, it is better to just form and compute the SVD of .
When and are large and sparse and is square, nonsingular, and can be factored, we recommend applying SVD algorithms discussed above that only require multiplication by the product and its transpose.
If is not square, we recommend finding the eigenvalues and eigenvectors of the generalized Hermitian eigenvalue problem , using techniques from Chapter 5. This is because the eigendecomposition of is and .
It is not necessary to compute the thin or truncated SVD of explicitly to solve the least squares problem. For dense problems, LAPACK driver routine xGELSD is the method of choice, using divide-and-conquer to solve the least squares problem quickly without forming an explicit thin SVD. In ScaLAPACK, there is only a routine for computing a thin SVD, PxGESVD, which could then be used for the least squares problem. For sparse problems, we can use the approximate factorization derived from equations (6.7) or (6.8) to get .