---
name: "dggsvp"
section: "3lapack"
platform: "linux"
package: "liblapack-doc"
version: "3.2.1-8"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/dggsvp/3lapack"
---

# dggsvp(3lapack)

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

## NAME

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

## 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\
               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,P)

  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.
