|
19 | 19 | * INTEGER M, N, LDA, LDU, LDV, NUMRANK, LWORK, LRWORK, INFO
|
20 | 20 | * ..
|
21 | 21 | * .. Array Arguments ..
|
22 |
| -* DOUBLE PRECISION A( LDA,* ), U( LDU,* ), V( LDV,* ), WORK( * ) |
| 22 | +* DOUBLE PRECISION A( LDA, * ), U( LDU, * ), V( LDV, * ), WORK( * ) |
23 | 23 | * REAL S( * ), RWORK( * )
|
24 | 24 | * INTEGER IWORK( * )
|
25 | 25 | *
|
|
79 | 79 | * JOBU is CHARACTER*1
|
80 | 80 | * = 'A' All M left singular vectors are computed and returned in the
|
81 | 81 | * matrix U. See the description of U.
|
82 |
| -* = 'S' or 'U' N=min(M,N) left singular vectors are computed and returned |
| 82 | +* = 'S' or 'U' N = min(M,N) left singular vectors are computed and returned |
83 | 83 | * in the matrix U. See the description of U.
|
84 | 84 | * = 'R' Numerical rank NUMRANK is determined and only NUMRANK left singular
|
85 | 85 | * vectors are computed and returned in the matrix U.
|
|
96 | 96 | * the matrix V.
|
97 | 97 | * = 'R' Numerical rank NUMRANK is determined and only NUMRANK right singular
|
98 | 98 | * vectors are computed and returned in the matrix V. This option is
|
99 |
| -* allowed only if JOBU='R' or JOBU='N'; otherwise it is illegal. |
| 99 | +* allowed only if JOBU = 'R' or JOBU = 'N'; otherwise it is illegal. |
100 | 100 | * = 'N' The right singular vectors are not computed.
|
101 | 101 | *..............................................................................
|
102 | 102 | * M (input)
|
|
105 | 105 | *..............................................................................
|
106 | 106 | * N (input)
|
107 | 107 | * N is INTEGER
|
108 |
| -* The number of columns of the input matrix A. M >= N>=0. |
| 108 | +* The number of columns of the input matrix A. M >= N >= 0. |
109 | 109 | *..............................................................................
|
110 | 110 | * A (input/workspace/output)
|
111 | 111 | * A is REAL array of dimensions LDA x N
|
|
160 | 160 | * NUMRANK is INTEGER
|
161 | 161 | * NUMRANK is the numerical rank first determined after the rank
|
162 | 162 | * revealing QR factorization, following the strategy specified by the
|
163 |
| -* value of JOBA. If JOBV='R' and JOBU='R', only NUMRANK |
| 163 | +* value of JOBA. If JOBV = 'R' and JOBU = 'R', only NUMRANK |
164 | 164 | * leading singular values and vectors are then requested in the call
|
165 | 165 | * of DGESVD. The final value of NUMRANK might be further reduced if
|
166 | 166 | * some singular values are computed as zeros.
|
|
175 | 175 | * rank revealing QR factorization.
|
176 | 176 | * If JOBP = 'P', IWORK(N+1:N+M-1) contains the indices of the sequence
|
177 | 177 | * of row swaps used in row pivoting. These can be used to restore the
|
178 |
| -* left singular vectors in the case JOBU='F'. |
| 178 | +* left singular vectors in the case JOBU = 'F'. |
179 | 179 | *..............................................................................
|
180 | 180 | * WORK (workspace/output)
|
181 | 181 | * WORK is REAL array of size LWORK, used as a workspace.
|
|
194 | 194 | * { MAX( M, 1 ), if JOBU = 'A'
|
195 | 195 | * LWSVD = MAX( 5*N, 1 )
|
196 | 196 | * LWLQF = MAX( N/2, 1 ), LWSVD2 = MAX( 5*(N/2), 1 ), LWORLQ = MAX( N, 1 ),
|
197 |
| -* LWQRF = MAX(N/2,1), LWORQ2 = MAX(N,1) |
| 197 | +* LWQRF = MAX( N/2, 1 ), LWORQ2 = MAX( N, 1 ) |
198 | 198 | * Then the minimal value of LWORK is:
|
199 | 199 | * = MAX( N + LWQP3, LWSVD ) if only the singular values are needed;
|
200 | 200 | * = MAX( N + LWQP3, LWCON, LWSVD ) if only the singular values are needed,
|
|
208 | 208 | *
|
209 | 209 | * = N + MAX( LWQP3, LWSVD ) if the singular values and the right
|
210 | 210 | * singular vectors are requested;
|
211 |
| -* = N + MAX( LWQP3, LWCON,LWSVD ) if the singular values and the right |
| 211 | +* = N + MAX( LWQP3, LWCON, LWSVD ) if the singular values and the right |
212 | 212 | * singular vectors are requested, and also
|
213 | 213 | * a scaled condition etimate requested;
|
214 | 214 | *
|
215 |
| -* = N + MAX( LWQP3, LWSVD, LWORQ ) if the full SVD is requested with JOBV='R'; |
216 |
| -* independent of JOBR; |
| 215 | +* = N + MAX( LWQP3, LWSVD, LWORQ ) if the full SVD is requested with JOBV = 'R'; |
| 216 | +* independent of JOBR; |
217 | 217 | * = N + MAX( LWQP3, LWCON, LWSVD, LWORQ ) if the full SVD is requested,
|
218 |
| -* JOBV='R' and, also a scaled condition |
| 218 | +* JOBV = 'R' and, also a scaled condition |
219 | 219 | * estimate requested; independent of JOBR;
|
220 | 220 | * = MAX( N + MAX( LWQP3, LWSVD, LWORQ ),
|
221 | 221 | * N + MAX( LWQP3, N/2+LWLQF, N/2+LWSVD2, N/2+LWORLQ, LWORQ) ) if the
|
222 |
| -* full SVD is requested with JOBV='A' or 'V', and |
| 222 | +* full SVD is requested with JOBV = 'A' or 'V', and |
223 | 223 | * JOBR ='N'
|
224 | 224 | * = MAX( N + MAX( LWQP3, LWCON, LWSVD, LWORQ ),
|
225 | 225 | * N + MAX( LWQP3, LWCON, N/2+LWLQF, N/2+LWSVD2, N/2+LWORLQ, LWORQ ) )
|
226 |
| -* if the full SVD is requested with JOBV='A' or 'V', and |
| 226 | +* if the full SVD is requested with JOBV = 'A' or 'V', and |
227 | 227 | * JOBR ='N', and also a scaled condition number estimate
|
228 | 228 | * requested.
|
229 | 229 | * = MAX( N + MAX( LWQP3, LWSVD, LWORQ ),
|
230 | 230 | * N + MAX( LWQP3, N/2+LWQRF, N/2+LWSVD2, N/2+LWORQ2, LWORQ ) ) if the
|
231 |
| -* full SVD is requested with JOBV='A', 'V', and JOBR ='T' |
| 231 | +* full SVD is requested with JOBV = 'A', 'V', and JOBR ='T' |
232 | 232 | * = MAX( N + MAX( LWQP3, LWCON, LWSVD, LWORQ ),
|
233 | 233 | * N + MAX( LWQP3, LWCON, N/2+LWQRF, N/2+LWSVD2, N/2+LWORQ2, LWORQ ) )
|
234 |
| -* if the full SVD is requested with JOBV='A' or 'V', and |
| 234 | +* if the full SVD is requested with JOBV = 'A' or 'V', and |
235 | 235 | * JOBR ='T', and also a scaled condition number estimate
|
236 | 236 | * requested.
|
237 | 237 | * Finally, LWORK must be at least two: LWORK = MAX( 2, LWORK ).
|
|
246 | 246 | * number of column scaled A. If A = C * D where D is diagonal and C
|
247 | 247 | * has unit columns in the Euclidean norm, then, assuming full column rank,
|
248 | 248 | * N^(-1/4) * RWORK(1) <= ||pinv(C)||_2 <= N^(1/4) * RWORK(1).
|
249 |
| -* Otherwise, RWORK(1)=-1. |
| 249 | +* Otherwise, RWORK(1) = -1. |
250 | 250 | * 2. RWORK(2) contains the number of singular values computed as
|
251 | 251 | * exact zeros in DGESVD applied to the upper triangular or trapeziodal
|
252 | 252 | * R (from the initial QR factorization). In case of early exit (no call to
|
253 |
| -* DGESVD, such as in the case of zero matrix) RWORK(2)=-1. |
| 253 | +* DGESVD, such as in the case of zero matrix) RWORK(2) = -1. |
254 | 254 | *..............................................................................
|
255 | 255 | * LRWORK (input)
|
256 | 256 | * LRWORK is INTEGER.
|
@@ -306,7 +306,7 @@ SUBROUTINE DGESVDQ( JOBA, JOBP, JOBR, JOBU, JOBV, M, N, A, LDA,
|
306 | 306 | INTEGER M, N, LDA, LDU, LDV, NUMRANK, LWORK, LRWORK, INFO
|
307 | 307 | * ..
|
308 | 308 | * .. Array Arguments ..
|
309 |
| - DOUBLE PRECISION A( LDA,* ), U( LDU,* ), V( LDV,* ), WORK( * ) |
| 309 | + DOUBLE PRECISION A( LDA, * ), U( LDU, * ), V( LDV, * ), WORK( * ) |
310 | 310 | DOUBLE PRECISION S( * ), RWORK( * )
|
311 | 311 | INTEGER IWORK(*)
|
312 | 312 | *
|
|
0 commit comments