dsvdc.f
SUBROUTINE DSVDC (X, LDX, N, P, S, E, U, LDU, V, LDV, WORK, JOB,
+ INFO)
C***BEGIN PROLOGUE DSVDC
C***PURPOSE Perform the singular value decomposition of a rectangular
C matrix.
C***LIBRARY SLATEC (LINPACK)
C***CATEGORY D6
C***TYPE DOUBLE PRECISION (SSVDC-S, DSVDC-D, CSVDC-C)
C***KEYWORDS LINEAR ALGEBRA, LINPACK, MATRIX,
C SINGULAR VALUE DECOMPOSITION
C***AUTHOR Stewart, G. W., (U. of Maryland)
C***DESCRIPTION
C
C DSVDC is a subroutine to reduce a double precision NxP matrix X
C by orthogonal transformations U and V to diagonal form. The
C diagonal elements S(I) are the singular values of X. The
C columns of U are the corresponding left singular vectors,
C and the columns of V the right singular vectors.
C
C On Entry
C
C X DOUBLE PRECISION(LDX,P), where LDX .GE. N.
C X contains the matrix whose singular value
C decomposition is to be computed. X is
C destroyed by DSVDC.
C
C LDX INTEGER.
C LDX is the leading dimension of the array X.
C
C N INTEGER.
C N is the number of rows of the matrix X.
C
C P INTEGER.
C P is the number of columns of the matrix X.
C
C LDU INTEGER.
C LDU is the leading dimension of the array U.
C (See below).
C
C LDV INTEGER.
C LDV is the leading dimension of the array V.
C (See below).
C
C WORK DOUBLE PRECISION(N).
C WORK is a scratch array.
C
C JOB INTEGER.
C JOB controls the computation of the singular
C vectors. It has the decimal expansion AB
C with the following meaning
C
C A .EQ. 0 do not compute the left singular
C vectors.
C A .EQ. 1 return the N left singular vectors
C in U.
C A .GE. 2 return the first MIN(N,P) singular
C vectors in U.
C B .EQ. 0 do not compute the right singular
C vectors.
C B .EQ. 1 return the right singular vectors
C in V.
C
C On Return
C
C S DOUBLE PRECISION(MM), where MM=MIN(N+1,P).
C The first MIN(N,P) entries of S contain the
C singular values of X arranged in descending
C order of magnitude.
C
C E DOUBLE PRECISION(P).
C E ordinarily contains zeros. However see the
C discussion of INFO for exceptions.
C
C U DOUBLE PRECISION(LDU,K), where LDU .GE. N.
C If JOBA .EQ. 1, then K .EQ. N.
C If JOBA .GE. 2, then K .EQ. MIN(N,P).
C U contains the matrix of right singular vectors.
C U is not referenced if JOBA .EQ. 0. If N .LE. P
C or if JOBA .EQ. 2, then U may be identified with X
C in the subroutine call.
C
C V DOUBLE PRECISION(LDV,P), where LDV .GE. P.
C V contains the matrix of right singular vectors.
C V is not referenced if JOB .EQ. 0. If P .LE. N,
C then V may be identified with X in the
C subroutine call.
C
C INFO INTEGER.
C The singular values (and their corresponding
C singular vectors) S(INFO+1),S(INFO+2),...,S(M)
C are correct (here M=MIN(N,P)). Thus if
C INFO .EQ. 0, all the singular values and their
C vectors are correct. In any event, the matrix
C B = TRANS(U)*X*V is the bidiagonal matrix
C with the elements of S on its diagonal and the
C elements of E on its super-diagonal (TRANS(U)
C is the transpose of U). Thus the singular
C values of X and B are the same.
C
C***REFERENCES J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
C Stewart, LINPACK Users' Guide, SIAM, 1979.
C***ROUTINES CALLED DAXPY, DDOT, DNRM2, DROT, DROTG, DSCAL, DSWAP
C***REVISION HISTORY (YYMMDD)
C 790319 DATE WRITTEN
C 890531 Changed all specific intrinsics to generic. (WRB)
C 890531 REVISION DATE from Version 3.2
C 891214 Prologue converted to Version 4.0 format. (BAB)
C 900326 Removed duplicate information from DESCRIPTION section.
C (WRB)
C 920501 Reformatted the REFERENCES section. (WRB)
C***END PROLOGUE DSVDC