Previous: dggsvd Up: ../lapack-d.html Next: dgtcon


dggsvp


 NAME
      DGGSVP - compute orthogonal matrices U, V and Q such that
      U'*A*Q = ( 0 A12 A13 ) K , V'*B*Q = ( 0 0 B13 ) L  ( 0 0 A23
      ) L ( 0 0 0 ) P-L  ( 0 0 0 ) M-K-L N-K-L K L  N-K-L K L
      where the K-by-K matrix A12 and L-by-L matrix B13 are non-
      singular upper triangular

 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( * )

 PURPOSE
      DGGSVP computes orthogonal matrices U, V and Q such that A23
      is upper trapezoidal.  K+L = the effective rank of (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 sec-
              tion.

      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 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 decom-
              position.

      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).

      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).

      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).

      IWORK   (workspace) INTEGER array, dimension (N)

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

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

      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 fac-
      torization with column pivoting to detect the effective
      numerical rank of the a matrix. It may be replaced by a
      better rank determination strategy.