svd.f
SUBROUTINE SVD (NM, M, N, A, W, MATU, U, MATV, V, IERR, RV1)
C***BEGIN PROLOGUE SVD
....
....
Warning: this routine is not intended to be user-callable.
....
....
C***SUBSIDIARY
C***PURPOSE Perform the singular value decomposition of a rectangular
C matrix.
C***LIBRARY SLATEC
C***TYPE SINGLE PRECISION (SVD-S)
C***AUTHOR (UNKNOWN)
C***DESCRIPTION
C
C This subroutine is a translation of the ALGOL procedure SVD,
C NUM. MATH. 14, 403-420(1970) by Golub and Reinsch.
C HANDBOOK FOR AUTO. COMP., VOL II-LINEAR ALGEBRA, 134-151(1971).
C
C This subroutine determines the singular value decomposition
C T
C A=USV of a REAL M by N rectangular matrix. Householder
C bidiagonalization and a variant of the QR algorithm are used.
C
C On Input
C
C NM must be set to the row dimension of the two-dimensional
C array parameters, A, U and V, as declared in the calling
C program dimension statement. NM is an INTEGER variable.
C Note that NM must be at least as large as the maximum
C of M and N.
C
C M is the number of rows of A and U.
C
C N is the number of columns of A and U and the order of V.
C
C A contains the rectangular input matrix to be decomposed. A is
C a two-dimensional REAL array, dimensioned A(NM,N).
C
C MATU should be set to .TRUE. if the U matrix in the
C decomposition is desired, and to .FALSE. otherwise.
C MATU is a LOGICAL variable.
C
C MATV should be set to .TRUE. if the V matrix in the
C decomposition is desired, and to .FALSE. otherwise.
C MATV is a LOGICAL variable.
C
C On Output
C
C A is unaltered (unless overwritten by U or V).
C
C W contains the N (non-negative) singular values of A (the
C diagonal elements of S). They are unordered. If an
C error exit is made, the singular values should be correct
C for indices IERR+1, IERR+2, ..., N. W is a one-dimensional
C REAL array, dimensioned W(N).
C
C U contains the matrix U (orthogonal column vectors) of the
C decomposition if MATU has been set to .TRUE. Otherwise,
C U is used as a temporary array. U may coincide with A.
C If an error exit is made, the columns of U corresponding
C to indices of correct singular values should be correct.
C U is a two-dimensional REAL array, dimensioned U(NM,N).
C
C V contains the matrix V (orthogonal) of the decomposition if
C MATV has been set to .TRUE. Otherwise, V is not referenced.
C V may also coincide with A if U does not. If an error
C exit is made, the columns of V corresponding to indices of
C correct singular values should be correct. V is a two-
C dimensional REAL array, dimensioned V(NM,N).
C
C IERR is an INTEGER flag set to
C Zero for normal return,
C K if the K-th singular value has not been
C determined after 30 iterations.
C
C RV1 is a one-dimensional REAL array used for temporary storage,
C dimensioned RV1(N).
C
C CALLS PYTHAG(A,B) for sqrt(A**2 + B**2).
C
C Questions and comments should be directed to B. S. Garbow,
C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
C ------------------------------------------------------------------
C
C***SEE ALSO EISDOC
C***ROUTINES CALLED PYTHAG
C***REVISION HISTORY (YYMMDD)
C 811101 DATE WRITTEN
C 890531 Changed all specific intrinsics to generic. (WRB)
C 890831 Modified array declarations. (WRB)
C 891214 Prologue converted to Version 4.0 format. (BAB)
C 900402 Added TYPE section. (WRB)
C***END PROLOGUE SVD