1ZGGSVD(1) LAPACK driver routine (version 3.1) ZGGSVD(1)
2
3
4
6 ZGGSVD - the generalized singular value decomposition (GSVD) of an M-
7 by-N complex matrix A and P-by-N complex matrix B
8
10 SUBROUTINE ZGGSVD( JOBU, JOBV, JOBQ, M, N, P, K, L, A, LDA, B, LDB,
11 ALPHA, BETA, U, LDU, V, LDV, Q, LDQ, WORK, RWORK,
12 IWORK, INFO )
13
14 CHARACTER JOBQ, JOBU, JOBV
15
16 INTEGER INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P
17
18 INTEGER IWORK( * )
19
20 DOUBLE PRECISION ALPHA( * ), BETA( * ), RWORK( * )
21
22 COMPLEX*16 A( LDA, * ), B( LDB, * ), Q( LDQ, * ), U( LDU, * ),
23 V( LDV, * ), WORK( * )
24
26 ZGGSVD computes the generalized singular value decomposition (GSVD) of
27 an M-by-N complex matrix A and P-by-N complex matrix B:
28
29 U'*A*Q = D1*( 0 R ), V'*B*Q = D2*( 0 R )
30
31 where U, V and Q are unitary matrices, and Z' means the conjugate
32 transpose of Z. Let K+L = the effective numerical rank of the matrix
33 (A',B')', then R is a (K+L)-by-(K+L) nonsingular upper triangular
34 matrix, D1 and D2 are M-by-(K+L) and P-by-(K+L) "diagonal" matrices and
35 of the following structures, respectively:
36
37 If M-K-L >= 0,
38
39 K L
40 D1 = K ( I 0 )
41 L ( 0 C )
42 M-K-L ( 0 0 )
43
44 K L
45 D2 = L ( 0 S )
46 P-L ( 0 0 )
47
48 N-K-L K L
49 ( 0 R ) = K ( 0 R11 R12 )
50 L ( 0 0 R22 )
51 where
52
53 C = diag( ALPHA(K+1), ... , ALPHA(K+L) ),
54 S = diag( BETA(K+1), ... , BETA(K+L) ),
55 C**2 + S**2 = I.
56
57 R is stored in A(1:K+L,N-K-L+1:N) on exit.
58
59 If M-K-L < 0,
60
61 K M-K K+L-M
62 D1 = K ( I 0 0 )
63 M-K ( 0 C 0 )
64
65 K M-K K+L-M
66 D2 = M-K ( 0 S 0 )
67 K+L-M ( 0 0 I )
68 P-L ( 0 0 0 )
69
70 N-K-L K M-K K+L-M
71 ( 0 R ) = K ( 0 R11 R12 R13 )
72 M-K ( 0 0 R22 R23 )
73 K+L-M ( 0 0 0 R33 )
74
75 where
76
77 C = diag( ALPHA(K+1), ... , ALPHA(M) ),
78 S = diag( BETA(K+1), ... , BETA(M) ),
79 C**2 + S**2 = I.
80
81 (R11 R12 R13 ) is stored in A(1:M, N-K-L+1:N), and R33 is stored
82 ( 0 R22 R23 )
83 in B(M-K+1:L,N+M-K-L+1:N) on exit.
84
85 The routine computes C, S, R, and optionally the unitary
86 transformation matrices U, V and Q.
87
88 In particular, if B is an N-by-N nonsingular matrix, then the GSVD of A
89 and B implicitly gives the SVD of A*inv(B):
90 A*inv(B) = U*(D1*inv(D2))*V'.
91 If ( A',B')' has orthnormal columns, then the GSVD of A and B is also
92 equal to the CS decomposition of A and B. Furthermore, the GSVD can be
93 used to derive the solution of the eigenvalue problem:
94 A'*A x = lambda* B'*B x.
95 In some literature, the GSVD of A and B is presented in the form
96 U'*A*X = ( 0 D1 ), V'*B*X = ( 0 D2 )
97 where U and V are orthogonal and X is nonsingular, and D1 and D2 are
98 ``diagonal''. The former GSVD form can be converted to the latter form
99 by taking the nonsingular matrix X as
100
101 X = Q*( I 0 )
102 ( 0 inv(R) )
103
104
106 JOBU (input) CHARACTER*1
107 = 'U': Unitary matrix U is computed;
108 = 'N': U is not computed.
109
110 JOBV (input) CHARACTER*1
111 = 'V': Unitary matrix V is computed;
112 = 'N': V is not computed.
113
114 JOBQ (input) CHARACTER*1
115 = 'Q': Unitary matrix Q is computed;
116 = 'N': Q is not computed.
117
118 M (input) INTEGER
119 The number of rows of the matrix A. M >= 0.
120
121 N (input) INTEGER
122 The number of columns of the matrices A and B. N >= 0.
123
124 P (input) INTEGER
125 The number of rows of the matrix B. P >= 0.
126
127 K (output) INTEGER
128 L (output) INTEGER On exit, K and L specify the dimension
129 of the subblocks described in Purpose. K + L = effective
130 numerical rank of (A',B')'.
131
132 A (input/output) COMPLEX*16 array, dimension (LDA,N)
133 On entry, the M-by-N matrix A. On exit, A contains the trian‐
134 gular matrix R, or part of R. See Purpose for details.
135
136 LDA (input) INTEGER
137 The leading dimension of the array A. LDA >= max(1,M).
138
139 B (input/output) COMPLEX*16 array, dimension (LDB,N)
140 On entry, the P-by-N matrix B. On exit, B contains part of the
141 triangular matrix R if M-K-L < 0. See Purpose for details.
142
143 LDB (input) INTEGER
144 The leading dimension of the array B. LDB >= max(1,P).
145
146 ALPHA (output) DOUBLE PRECISION array, dimension (N)
147 BETA (output) DOUBLE PRECISION array, dimension (N) On exit,
148 ALPHA and BETA contain the generalized singular value pairs of
149 A and B; ALPHA(1:K) = 1,
150 BETA(1:K) = 0, and if M-K-L >= 0, ALPHA(K+1:K+L) = C,
151 BETA(K+1:K+L) = S, or if M-K-L < 0, ALPHA(K+1:M)= C,
152 ALPHA(M+1:K+L)= 0
153 BETA(K+1:M) = S, BETA(M+1:K+L) = 1 and ALPHA(K+L+1:N) = 0
154 BETA(K+L+1:N) = 0
155
156 U (output) COMPLEX*16 array, dimension (LDU,M)
157 If JOBU = 'U', U contains the M-by-M unitary matrix U. If JOBU
158 = 'N', U is not referenced.
159
160 LDU (input) INTEGER
161 The leading dimension of the array U. LDU >= max(1,M) if JOBU =
162 'U'; LDU >= 1 otherwise.
163
164 V (output) COMPLEX*16 array, dimension (LDV,P)
165 If JOBV = 'V', V contains the P-by-P unitary matrix V. If JOBV
166 = 'N', V is not referenced.
167
168 LDV (input) INTEGER
169 The leading dimension of the array V. LDV >= max(1,P) if JOBV =
170 'V'; LDV >= 1 otherwise.
171
172 Q (output) COMPLEX*16 array, dimension (LDQ,N)
173 If JOBQ = 'Q', Q contains the N-by-N unitary matrix Q. If JOBQ
174 = 'N', Q is not referenced.
175
176 LDQ (input) INTEGER
177 The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ =
178 'Q'; LDQ >= 1 otherwise.
179
180 WORK (workspace) COMPLEX*16 array, dimension (max(3*N,M,P)+N)
181
182 RWORK (workspace) DOUBLE PRECISION array, dimension (2*N)
183
184 IWORK (workspace/output) INTEGER array, dimension (N)
185 On exit, IWORK stores the sorting information. More precisely,
186 the following loop will sort ALPHA for I = K+1, min(M,K+L) swap
187 ALPHA(I) and ALPHA(IWORK(I)) endfor such that ALPHA(1) >=
188 ALPHA(2) >= ... >= ALPHA(N).
189
190 INFO (output) INTEGER
191 = 0: successful exit.
192 < 0: if INFO = -i, the i-th argument had an illegal value.
193 > 0: if INFO = 1, the Jacobi-type procedure failed to con‐
194 verge. For further details, see subroutine ZTGSJA.
195
197 TOLA DOUBLE PRECISION
198 TOLB DOUBLE PRECISION TOLA and TOLB are the thresholds to
199 determine the effective rank of (A',B')'. Generally, they are
200 set to TOLA = MAX(M,N)*norm(A)*MAZHEPS, TOLB =
201 MAX(P,N)*norm(B)*MAZHEPS. The size of TOLA and TOLB may affect
202 the size of backward errors of the decomposition.
203
204 Further Details ===============
205
206 2-96 Based on modifications by Ming Gu and Huan Ren, Computer
207 Science Division, University of California at Berkeley, USA
208
209
210
211 LAPACK driver routine (version 3.N1o)vember 2006 ZGGSVD(1)