Previous: cggsvd Up: ../lapack-c.html Next: cgtcon


cggsvp


 NAME
      CGGSVP - 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 CGGSVP( 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

          REAL           TOLA, TOLB

          INTEGER        IWORK( * )

          REAL           RWORK( * )

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

 PURPOSE
      CGGSVP 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 CGGSVD.

 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 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 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) REAL
              TOLB    (input) REAL TOLA and TOLB are the thres-
              holds to determine the effective rank of matrix B
              and a subblock of A. Generally, they are set to TOLA
              = MAX(M,N)*norm(A)*MACHEPS, TOLB =
              MAX(P,N)*norm(B)*MACHEPS.  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 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 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 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) REAL array, dimension (2*N)

      TAU     (workspace) COMPLEX array, dimension (N)

      WORK    (workspace) COMPLEX 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 CGEQPF 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.