Previous: sspsl Up: ../linpack.html Next: sswap


SSVDC

       SUBROUTINE SSVDC(X,LDX,N,P,S,E,U,LDU,V,LDV,WORK,JOB,INFO)
       INTEGER LDX,N,P,LDU,LDV,JOB,INFO
       REAL X(LDX,1),S(1),E(1),U(LDU,1),V(LDV,1),WORK(1)
 C
 C
 C     SSVDC IS A SUBROUTINE TO REDUCE A REAL NXP MATRIX X BY
 C     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         REAL(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 SSVDC.
 C
 C         LDX       INTEGER.
 C                   LDX IS THE LEADING DIMENSION OF THE ARRAY X.
 C
 C         N         INTEGER.
 C                   N IS THE NUMBER OF COLUMNS OF THE MATRIX X.
 C
 C         P         INTEGER.
 C                   P IS THE NUMBER OF ROWS 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      REAL(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         REAL(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         REAL(P).
 C                   E ORDINARILY CONTAINS ZEROS.  HOWEVER SEE THE
 C                   DISCUSSION OF INFO FOR EXCEPTIONS.
 C
 C         U         REAL(LDU,K), WHERE LDU.GE.N.  IF JOBA.EQ.1 THEN
 C                                   K.EQ.N, IF JOBA.GE.2 THEN
 C                                   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         REAL(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     LINPACK. THIS VERSION DATED 03/19/79 .
 C     G.W. STEWART, UNIVERSITY OF MARYLAND, ARGONNE NATIONAL LAB.
 C
 C     ***** USES THE FOLLOWING FUNCTIONS AND SUBPROGRAMS.
 C
 C     EXTERNAL SROT
 C     BLAS SAXPY,SDOT,SSCAL,SSWAP,SNRM2,SROTG
 C     FORTRAN ABS,AMAX1,MAX0,MIN0,MOD,SQRT
 C