Previous: zggsvd Up: ../lapack-z.html Next: zgtcon


zggsvp


 NAME
      ZGGSVP - compute unitary 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 ZGGSVP( JOBU, JOBV, JOBQ, M, P, N, A, LDA, B,
                         LDB, TOLA, TOLB, K, L, U, LDU, V, LDV, Q,
                         LDQ, IWORK, RWORK, 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 RWORK( * )

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

 PURPOSE
      ZGGSVP computes unitary matrices U, V and Q such that A23 is
      upper trapezoidal.  K+L = the effective rank of the (M+P)-
      by-N matrix (A',B')'.  Z' denotes the conjugate transpose of
      Z.

      This decomposition is the preprocessing step for computing
      the Generalized Singular Value Decomposition (GSVD), see
      subroutine ZGGSVD.

 ARGUMENTS
      JOBU    (input) CHARACTER*1
              = 'U':  Unitary matrix U is computed;
              = 'N':  U is not computed.

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

      JOBQ    (input) CHARACTER*1
              = 'Q':  Unitary 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) COMPLEX*16 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) COMPLEX*16 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
              section.  K + L = effective numerical rank of
              (A',B')'.

      U       (output) COMPLEX*16 array, dimension (LDU,M)
              If JOBU = 'U', U contains the unitary 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) COMPLEX*16 array, dimension (LDV,M)
              If JOBV = 'V', V contains the unitary 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) COMPLEX*16 array, dimension (LDQ,N)
              If JOBQ = 'Q', Q contains the unitary 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)

      RWORK   (workspace) DOUBLE PRECISION array, dimension (2*N)

      TAU     (workspace) COMPLEX*16 array, dimension (N)

      WORK    (workspace) COMPLEX*16 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 ZGEQPF 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.