Previous: dtgevc Up: ../lapack-d.html Next: dtpcon
NAME DTGSJA - compute the generalized singular value decomposi- tion (GSVD) of two real upper ``triangular (or tra- pezoidal)'' matrices A and B SYNOPSIS SUBROUTINE DTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B, LDB, TOLA, TOLB, ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK, NCYCLE, INFO ) CHARACTER JOBQ, JOBU, JOBV INTEGER INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, NCYCLE, P DOUBLE PRECISION TOLA, TOLB DOUBLE PRECISION A( LDA, * ), ALPHA( * ), B( LDB, * ), BETA( * ), Q( LDQ, * ), U( LDU, * ), V( LDV, * ), WORK( * ) PURPOSE DTGSJA computes the generalized singular value decomposition (GSVD) of two real upper ``triangular (or trapezoidal)'' matrices A and B. On entry, it is assumed that matrices A and B have the fol- lowing forms, which may be obtained by the preprocessing subroutine DGGSVP for two general M-by-N matrix A and P-by-N matrix B: If M-K-L >= 0 A = ( 0 A12 A13 ) K , B = ( 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 if M-K-L < 0 A = ( 0 A12 A13 ) K , B = ( 0 0 B13 ) L ( 0 0 A23 ) M-K ( 0 0 0 ) P-L N-K-L K L N-K-L K L where K-by-K matrix A12 and L-by-L matrix B13 are nonsingu- lar upper triangular. A23 is L-by-L upper triangular if M- K-L > 0, otherwise A23 is L-by-(M-K) upper trapezoidal. On exit, U'*A*Q = D1*( 0 R ), V'*B*Q = D2*( 0 R ), where U, V and Q are orthogonal matrices, Z' denotes the transpose of Z, R is a nonsingular upper triangular matrix, and D1 and D2 are ``diagonal'' matrices, which are of the following structures: If M-K-L >= 0, U'*A*Q = D1*( 0 R ) = K ( I 0 ) * ( 0 R11 R12 ) K L ( 0 C ) ( 0 0 R22 ) L M-K-L ( 0 0 ) N-K-L K L K L V'*B*Q = D2*( 0 R ) = L ( 0 S ) * ( 0 R11 R12 ) K P-L ( 0 0 ) ( 0 0 R22 ) L K L N-K-L K L where C = diag( ALPHA(K+1), ... , ALPHA(K+L) ), S = diag( BETA(K+1), ... , BETA(K+L) ), C**2 + S**2 = I. The nonsingular triangular matrix R = ( R11 R12 ) is stored ( 0 R22 ) in A(1:K+L,N-K-L+1:N) on exit. If M-K-L < 0, U'*A*Q = D1*( 0 R ) = K ( I 0 0 ) * ( 0 R11 R12 R13 ) K M-K ( 0 C 0 ) ( 0 0 R22 R23 ) M-K K M-K K+L-M ( 0 0 0 R33 ) K+L-M N-K-L K M-K K+L-M V'*B*Q = D2*( 0 R ) = M-K ( 0 S 0 ) * ( 0 R11 R12 R13 ) K K+L-M ( 0 0 I ) ( 0 0 R22 R23 ) M-K P-L ( 0 0 0 ) ( 0 0 0 R33 ) K+L-M K M-K K+L-M N-K-L K M-K K+L-M where C = diag( ALPHA(K+1), ... , ALPHA(M) ), S = diag( BETA(K+1), ... , BETA(M) ), C**2 + S**2 = I. R = ( R11 R12 R13 ) is a nonsingular upper triangular matrix, the ( 0 R22 R23 ) ( 0 0 R33 ) first M rows of R are stored in A(1:M, N-K-L+1:N) and R33 is stored in B(M-K+1:L,N+M-K-L+1:N) on exit. The computations of the orthogonal transformation matrices U, V and Q are optional and may also be applied to the input orthogonal matrices U, V and Q. ARGUMENTS JOBU (input) CHARACTER*1 = 'U': U is overwritten on the input orthogonal matrix U; = 'I': U is initialized to the identity matrix; = 'N': U is not computed. JOBV (input) CHARACTER*1 = 'V': V is overwritten on the input orthogonal matrix V; = 'I': V is initialized to the identity matrix; = 'N': V is not computed. JOBQ (input) CHARACTER*1 = 'Q': Q is overwritten on the input orthogonal matrix Q; = 'I': Q is initialized to the identity matrix; = '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. K (input) INTEGER L (input) INTEGER K and L specify the sub- blocks in the input matrices A and B: A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,,N- L+1:N) of A and B, whose GSVD is going to be com- puted by DTGSJA. See Further details. A (input/output) DOUBLE PRECISION array, dimension (LDA,N) On entry, the M-by-N matrix A. On exit, A(N- K+1:N,1:MIN(K+L,M) ) contains the triangular matrix R or part of R. See Purpose for details. 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, if neces- sary, B(M-K+1:L,N+M-K-L+1:N) contains a part of R. See Purpose for details. 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 convergence criteria for the Jacobi- Kogbetli- antz iteration procedure. Generally, they are the same as used in the preprocessing step, say TOLA = MAX(M,N)*norm(A)*MAZHEPS, TOLB = MAX(P,N)*norm(B)*MAZHEPS. ALPHA (output) DOUBLE PRECISION array, dimension (N) BETA (output) DOUBLE PRECISION array, dimension (N) On exit, ALPHA and BETA contain the generalized singular value pairs of A and B; If M-K-L >= 0, ALPHA(1:K) = ONE, ALPHA(K+1:K+L) = diag(C), BETA(1:K) = ZERO, BETA(K+1:K+L) = diag(S), and if M-K-L < 0, ALPHA(1:K)= ONE, ALPHA(K+1:M)= C, ALPHA(M+1:K+L)= ZERO BETA(1:K) = ZERO, BETA(K+1:M) = S, BETA(M+1:K+L) = ONE. Furthermore, if K+L < N, ALPHA(K+L+1:N) = ZERO BETA(K+L+1:N) = ZERO. U (input/output) DOUBLE PRECISION array, dimension (LDU,M) On entry, if JOBU = 'U', U contains the orthogonal matrix U, On exit, if JOBU = 'U', U is overwritten on the input orthogonal matrix U. If JOBU = 'I', U is first set to the identity matrix. If JOBU = 'N', U is not referenced. LDU (input) INTEGER The leading dimension of the array U. LDU >= max(1,M). V (input/output) DOUBLE PRECISION array, dimension (LDV,P) On entry, if JOBV = 'V', V contains the orthogonal matrix V. On exit, if JOBV = 'V', V is overwritten on the input orthogonal matrix V. If JOBV = 'I', U is first set to the identity matrix. If JOBV = 'N', V is not referenced. LDV (input) INTEGER The leading dimension of the array V. LDV >= max(1,P). Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N) On entry, if JOBQ = 'Q', Q contains the orthogonal matrix Q, On exit, if JOBQ = 'Q', Q is overwritten on the input orthogonal matrix Q. If JOBQ = 'I', Q is first set to the identity matrix. If JOBQ = 'N', Q is not referenced. LDQ (input) INTEGER The leading dimension of the array Q. LDQ >= MAX(1,N). WORK (workspace) DOUBLE PRECISION array, dimension (2*N) NCYCLE (output) INTEGER The number of cycles required for convergence. INFO (output) INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value. = 1: the procedure does not converge after MAXIT cycles. PARAMETERS MAXIT INTEGER MAXIT specifies the total loops that the iterative procedure may take. If after MAXIT cycles, the rou- tine fails to converge, we return INFO = 1. Further Details =============== DTGSJA essentially uses a variant of Kogbetliantz algorithm to reduce min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and L-by-L matrix B13 to the form: U1'*A13*Q1 = C1*R1; V1'*B13*Q1 = S1*R1, where U1, V1 and Q1 are orthogonal matrix, and Z' is the transpose of Z. C1 and S1 are diagonal matrices satisfying C1**2 + S1**2 = I, and R1 is an L-by-L nonsingular upper triangular matrix.