_SVD(3F)_SVD(3F)NAME
SVD, SSVD - EISPACK routine. This subroutine determines the
singular value decomposition
T A=USV of a REAL M by N rectangular matrix. Householder
bidiagonalization and a variant of the QR algorithm are used.
SYNOPSYS
subroutine svd(nm, m, n, a, w, matu, u, matv, v, ierr, rv1)
integer nm, m, n, ierr
double precision a(nm,n), w(n), u(nm,n), v(nm,n), rv1(n)
logical matu, matv
subroutine ssvd(nm, m, n, a, w, matu, u, matv, v, ierr, rv1)
integer nm, m, n, ierr
real a(nm,n), w(n), u(nm,n), v(nm,n), rv1(n)
logical matu, matv
DESCRIPTION
On Input
NM must be set to the row dimension of two-dimensional array parameters
as declared in the calling program dimension statement. Note that NM
must be at least as large as the maximum of M and N.
M is the number of rows of A (and U).
N is the number of columns of A (and U) and the order of V.
A contains the rectangular input matrix to be decomposed.
MATU should be set to .TRUE. if the U matrix in the decomposition is
desired, and to .FALSE. otherwise.
MATV should be set to .TRUE. if the V matrix in the decomposition is
desired, and to .FALSE. otherwise. On Output
A is unaltered (unless overwritten by U or V).
W contains the N (non-negative) singular values of A (the diagonal
elements of S). They are UNORDERED. If an error exit is made, the
singular values should be correct for indices IERR+1,IERR+2,...,N.
U contains the matrix U (orthogonal column vectors) of the decomposition
if MATU has been set to .TRUE. Otherwise U is used as a temporary array.
U may coincide with A. If an error exit is made, the columns of U
corresponding to indices of correct singular values should be correct.
V contains the matrix V (orthogonal) of the decomposition if MATV has
been set to .TRUE. Otherwise V is not referenced. V may also coincide
Page 1
_SVD(3F)_SVD(3F)
with A if U is not needed. If an error exit is made, the columns of V
corresponding to indices of correct singular values should be correct.
IERR is set to Zero for normal return, K if the K-th
singular value has not been
determined after 30 iterations.
RV1 is a temporary storage array. CALLS PYTHAG(A,B) for sqrt(A**2 +
B**2). Questions and comments should be directed to B. S. Garbow,
APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
Page 2