
DGGSVP(l) ) DGGSVP(l)
NAME
DGGSVP  compute orthogonal matrices U, V and Q such that NKL K L U'*A*Q = K ( 0 A12
A13 ) if MKL >= 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 NKL K L U'*A*Q = K ( 0 A12 A13
) if MKL >= 0; L ( 0 0 A23 )
MKL ( 0 0 0 )
NKL K L
= K ( 0 A12 A13 ) if MKL < 0;
MK ( 0 0 A23 )
NKL K L
V'*B*Q = L ( 0 0 B13 )
PL ( 0 0 0 )
where the KbyK matrix A12 and LbyL matrix B13 are nonsingular upper triangular; A23 is
LbyL upper triangular if MKL >= 0, otherwise A23 is (MK)byL upper trapezoidal. K+L
= the effective numerical rank of the (M+P)byN matrix (A',B')'. Z' denotes the trans
pose 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 MbyN matrix A. On exit, A contains the triangular (or trape
zoidal) 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 PbyN 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 refer
enced.
LDU (input) INTEGER
The leading dimension of the array U. LDU >= max(1,M) if JOBU = 'U'; LDU >= 1 oth
erwise.
V (output) DOUBLE PRECISION array, dimension (LDV,M)
If JOBV = 'V', V contains the orthogonal matrix V. If JOBV = 'N', V is not refer
enced.
LDV (input) INTEGER
The leading dimension of the array V. LDV >= max(1,P) if JOBV = 'V'; LDV >= 1 oth
erwise.
Q (output) DOUBLE PRECISION array, dimension (LDQ,N)
If JOBQ = 'Q', Q contains the orthogonal matrix Q. If JOBQ = 'N', Q is not refer
enced.
LDQ (input) INTEGER
The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ = 'Q'; LDQ >= 1 oth
erwise.
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 ith 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.
LAPACK version 3.0 15 June 2000 DGGSVP(l) 
