dggsvp(3S)

DGGSVP - compute orthogonal matrices U, V and Q such that N-K-L K L U'*A*Q = K ( 0 A12 A13 ) if M-K-L >= 0

Showing IRIX 6.5.30 (default release). Added in IRIX 6.5.15.

NAME
     DGGSVP - compute orthogonal matrices U, V and Q such that  N-K-L K L
     U'*A*Q = K ( 0 A12 A13 ) if M-K-L >= 0

SYNOPSIS
     SUBROUTINE DGGSVP( JOBU, JOBV, JOBQ, M, P, N, A, LDA, B, LDB, TOLA, TOLB,
                        K, L, U, LDU, V, LDV, Q, LDQ, IWORK, TAU, WORK, INFO )

         CHARACTER      JOBQ, JOBU, JOBV

         INTEGER        INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P

         DOUBLE         PRECISION TOLA, TOLB

         INTEGER        IWORK( * )

         DOUBLE         PRECISION A( LDA, * ), B( LDB, * ), Q( LDQ, * ), TAU(
                        * ), U( LDU, * ), V( LDV, * ), WORK( * )

IMPLEMENTATION
     These routines are part of the SCSL Scientific Library and can be loaded
     using either the -lscs or the -lscs_mp option.  The -lscs_mp option
     directs the linker to use the multi-processor version of the library.

     When linking to SCSL with -lscs or -lscs_mp, the default integer size is
     4 bytes (32 bits). Another version of SCSL is available in which integers
     are 8 bytes (64 bits).  This version allows the user access to larger
     memory sizes and helps when porting legacy Cray codes.  It can be loaded
     by using the -lscs_i8 option or the -lscs_i8_mp option. A program may use
     only one of the two versions; 4-byte integer and 8-byte integer library
     calls cannot be mixed.

PURPOSE
     DGGSVP computes orthogonal matrices U, V and Q such that N-K-L K L U'*A*Q
     = K ( 0 A12 A13 ) if M-K-L >= 0;               L ( 0     0   A23 )
               M-K-L ( 0     0    0  )

                      N-K-L  K    L
             =     K ( 0    A12  A13 )  if M-K-L < 0;
                 M-K ( 0     0   A23 )

                    N-K-L  K    L
      V'*B*Q =   L ( 0     0   B13 )
               P-L ( 0     0    0  )

     where the K-by-K matrix A12 and L-by-L matrix B13 are nonsingular upper
     triangular; A23 is L-by-L upper triangular if M-K-L >= 0, otherwise A23
     is (M-K)-by-L upper trapezoidal.  K+L = the effective numerical rank of
     the (M+P)-by-N matrix (A',B')'.  Z' denotes the transpose of Z.

     This decomposition is the preprocessing step for computing the
     Generalized Singular Value Decomposition (GSVD), see subroutine DGGSVD.
ARGUMENTS
     JOBU    (input) CHARACTER*1
             = 'U':  Orthogonal matrix U is computed;
             = 'N':  U is not computed.

     JOBV    (input) CHARACTER*1
             = 'V':  Orthogonal matrix V is computed;
             = 'N':  V is not computed.

     JOBQ    (input) CHARACTER*1
             = 'Q':  Orthogonal matrix Q is computed;
             = 'N':  Q is not computed.

     M       (input) INTEGER
             The number of rows of the matrix A.  M >= 0.

     P       (input) INTEGER
             The number of rows of the matrix B.  P >= 0.

     N       (input) INTEGER
             The number of columns of the matrices A and B.  N >= 0.

     A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
             On entry, the M-by-N matrix A.  On exit, A contains the
             triangular (or trapezoidal) matrix described in the Purpose
             section.

     LDA     (input) INTEGER
             The leading dimension of the array A. LDA >= max(1,M).

     B       (input/output) DOUBLE PRECISION array, dimension (LDB,N)
             On entry, the P-by-N matrix B.  On exit, B contains the
             triangular matrix described in the Purpose section.

     LDB     (input) INTEGER
             The leading dimension of the array B. LDB >= max(1,P).

     TOLA    (input) DOUBLE PRECISION
             TOLB    (input) DOUBLE PRECISION TOLA and TOLB are the thresholds
             to determine the effective numerical rank of matrix B and a
             subblock of A. Generally, they are set to TOLA =
             MAX(M,N)*norm(A)*MAZHEPS, TOLB = MAX(P,N)*norm(B)*MAZHEPS.  The
             size of TOLA and TOLB may affect the size of backward errors of
             the decomposition.

     K       (output) INTEGER
             L       (output) INTEGER On exit, K and L specify the dimension
             of the subblocks described in Purpose.  K + L = effective
             numerical rank of (A',B')'.

     U       (output) DOUBLE PRECISION array, dimension (LDU,M)
             If JOBU = 'U', U contains the orthogonal matrix U.  If JOBU =
             'N', U is not referenced.

     LDU     (input) INTEGER
             The leading dimension of the array U. LDU >= max(1,M) if JOBU =
             'U'; LDU >= 1 otherwise.

     V       (output) DOUBLE PRECISION array, dimension (LDV,M)
             If JOBV = 'V', V contains the orthogonal matrix V.  If JOBV =
             'N', V is not referenced.

     LDV     (input) INTEGER
             The leading dimension of the array V. LDV >= max(1,P) if JOBV =
             'V'; LDV >= 1 otherwise.

     Q       (output) DOUBLE PRECISION array, dimension (LDQ,N)
             If JOBQ = 'Q', Q contains the orthogonal matrix Q.  If JOBQ =
             'N', Q is not referenced.

     LDQ     (input) INTEGER
             The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ =
             'Q'; LDQ >= 1 otherwise.

     IWORK   (workspace) INTEGER array, dimension (N)

     TAU     (workspace) DOUBLE PRECISION array, dimension (N)

     WORK    (workspace) DOUBLE PRECISION array, dimension (max(3*N,M,P))

     INFO    (output) INTEGER
             = 0:  successful exit
             < 0:  if INFO = -i, the i-th argument had an illegal value.

FURTHER DETAILS
     The subroutine uses LAPACK subroutine DGEQPF for the QR factorization
     with column pivoting to detect the effective numerical rank of the a
     matrix. It may be replaced by a better rank determination strategy.


SEE ALSO
     INTRO_LAPACK(3S), INTRO_SCSL(3S)

     This man page is available only online.