CSVDC(3F)

CSVDC - CSVDC is a subroutine to reduce a complex NxP matrix X by unitary transformations U and V to diagonal form. The diagonal elements S(I) are the singular values of X. The columns of U are the corresponding left singular vectors, and the columns of V the right singular vectors.

As shipped in IRIX 6.5.22. Unchanged since IRIX 6.5.

NAME
     CSVDC   - CSVDC is a subroutine to reduce a complex NxP matrix X by
     unitary transformations U and V to diagonal form.  The diagonal elements
     S(I) are the singular values of X.  The columns of U are the
     corresponding left singular vectors, and the columns of V the right
     singular vectors.


SYNOPSYS
      SUBROUTINE CSVDC(X,LDX,N,P,S,E,U,LDU,V,LDV,WORK,JOB,INFO)

DESCRIPTION
     On Entry

     X COMPLEX(LDX,P), where LDX .GE. N.
        X contains the matrix whose singular value
        decomposition is to be computed.  X is
        destroyed by CSVDC.

     LDX INTEGER.
        LDX is the leading dimension of the array X.

     N INTEGER.
        N is the number of columns of the matrix X.

     P INTEGER.
        P is the number of rows of the matrix X.

     LDU INTEGER.
        LDU is the leading dimension of the array U
        (see below).

     LDV INTEGER.
        LDV is the leading dimension of the array V
        (see below).

     WORK COMPLEX(N).
        WORK is a scratch array.

     JOB INTEGER.
        JOB controls the computation of the singular
        vectors.  It has the decimal expansion AB
        with the following meaning
        A .EQ. 0    Do not compute the left singular
        vectors.
        A .EQ. 1    Return the N left singular vectors
        in U.
        A .GE. 2    Return the first MIN(N,P)
        left singular vectors in U.
        B .EQ. 0    Do not compute the right singular
        vectors.
        B .EQ. 1    Return the right singular vectors
        in V.  On Return

     S COMPLEX(MM), where MM = MIN(N+1,P).
        The first MIN(N,P) entries of S contain the
        singular values of X arranged in descending
        order of magnitude.

     E COMPLEX(P).
        E ordinarily contains zeros.  However see the
        discussion of INFO for exceptions.

     U COMPLEX(LDU,K), where LDU .GE. N.  If JOBA .EQ. 1
        then K .EQ. N.  If JOBA .GE. 2 then
        K .EQ. MIN(N,P).
        U contains the matrix of right singular vectors.
        U is not referenced if JOBA .EQ. 0.  If N .LE. P
        or if JOBA .GT. 2, then U may be identified with X
        in the subroutine call.

     V COMPLEX(LDV,P), where LDV .GE. P.
        V contains the matrix of right singular vectors.
        V is not referenced if JOB .EQ. 0.  If P .LE. N,
        then V may be identified with X in the
        subroutine call.

     INFO INTEGER.
        The singular values (and their corresponding
        singular vectors) S(INFO+1),S(INFO+2),...,S(M)
        are correct (here M=MIN(N,P)).  Thus if
        INFO.EQ. 0, all the singular values and their
        vectors are correct.  In any event, the matrix
        B = CTRANS(U)*X*V is the bidiagonal matrix
        with the elements of S on its diagonal and the
        elements of E on its super-diagonal (CTRANS(U)
        is the conjugate-transpose of U).  Thus the
        singular values of X and B are the same.  LINPACK.  This version dated
     03/19/79 .  Stewart, G. W., University of Maryland, Argonne National Lab.

     CSVDC uses the following functions and subprograms. External CSROT BLAS
     CAXPY,CDOTC,CSCAL,CSWAP,SCNRM2,SROTG Fortran ABS,AIMAG,AMAX1,CABS,CMPLX
     Fortran CONJG,MAX0,MIN0,MOD,REAL,SQRT