|
224 | 224 | *>
|
225 | 225 | *> \param[out] U
|
226 | 226 | *> \verbatim
|
227 |
| -*> U is REAL array, dimension ( LDU, N ) |
| 227 | +*> U is REAL array, dimension ( LDU, N ) or ( LDU, M ) |
228 | 228 | *> If JOBU = 'U', then U contains on exit the M-by-N matrix of
|
229 | 229 | *> the left singular vectors.
|
230 | 230 | *> If JOBU = 'F', then U contains on exit the M-by-M matrix of
|
|
271 | 271 | *>
|
272 | 272 | *> \param[out] WORK
|
273 | 273 | *> \verbatim
|
274 |
| -*> WORK is REAL array, dimension (LWORK) |
| 274 | +*> WORK is REAL array, dimension (MAX(7,LWORK)) |
275 | 275 | *> On exit,
|
276 | 276 | *> WORK(1) = SCALE = WORK(2) / WORK(1) is the scaling factor such
|
277 | 277 | *> that SCALE*SVA(1:N) are the computed singular values
|
|
318 | 318 | *> LWORK >= max(2*M+N,4*N+1,7). This is the minimal requirement.
|
319 | 319 | *> ->> For optimal performance (blocked code) the optimal value
|
320 | 320 | *> is LWORK >= max(2*M+N,3*N+(N+1)*NB,7). Here NB is the optimal
|
321 |
| -*> block size for DGEQP3 and DGEQRF. |
| 321 | +*> block size for SGEQP3 and SGEQRF. |
322 | 322 | *> In general, optimal LWORK is computed as
|
323 |
| -*> LWORK >= max(2*M+N,N+LWORK(DGEQP3),N+LWORK(DGEQRF), 7). |
| 323 | +*> LWORK >= max(2*M+N,N+LWORK(SGEQP3),N+LWORK(SGEQRF), 7). |
324 | 324 | *> -> .. an estimate of the scaled condition number of A is
|
325 | 325 | *> required (JOBA='E', 'G'). In this case, LWORK is the maximum
|
326 | 326 | *> of the above and N*N+4*N, i.e. LWORK >= max(2*M+N,N*N+4*N,7).
|
327 | 327 | *> ->> For optimal performance (blocked code) the optimal value
|
328 | 328 | *> is LWORK >= max(2*M+N,3*N+(N+1)*NB, N*N+4*N, 7).
|
329 | 329 | *> In general, the optimal length LWORK is computed as
|
330 |
| -*> LWORK >= max(2*M+N,N+LWORK(DGEQP3),N+LWORK(DGEQRF), |
331 |
| -*> N+N*N+LWORK(DPOCON),7). |
| 330 | +*> LWORK >= max(2*M+N,N+LWORK(SGEQP3),N+LWORK(SGEQRF), |
| 331 | +*> N+N*N+LWORK(SPOCON),7). |
332 | 332 | *>
|
333 | 333 | *> If SIGMA and the right singular vectors are needed (JOBV = 'V'),
|
334 | 334 | *> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
|
335 | 335 | *> -> For optimal performance, LWORK >= max(2*M+N,3*N+(N+1)*NB,7),
|
336 |
| -*> where NB is the optimal block size for DGEQP3, DGEQRF, DGELQ, |
337 |
| -*> DORMLQ. In general, the optimal length LWORK is computed as |
338 |
| -*> LWORK >= max(2*M+N,N+LWORK(DGEQP3), N+LWORK(DPOCON), |
339 |
| -*> N+LWORK(DGELQ), 2*N+LWORK(DGEQRF), N+LWORK(DORMLQ)). |
| 336 | +*> where NB is the optimal block size for SGEQP3, SGEQRF, SGELQF, |
| 337 | +*> SORMLQ. In general, the optimal length LWORK is computed as |
| 338 | +*> LWORK >= max(2*M+N,N+LWORK(SGEQP3), N+LWORK(SPOCON), |
| 339 | +*> N+LWORK(SGELQF), 2*N+LWORK(SGEQRF), N+LWORK(SORMLQ)). |
340 | 340 | *>
|
341 | 341 | *> If SIGMA and the left singular vectors are needed
|
342 | 342 | *> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7).
|
343 | 343 | *> -> For optimal performance:
|
344 | 344 | *> if JOBU = 'U' :: LWORK >= max(2*M+N,3*N+(N+1)*NB,7),
|
345 | 345 | *> if JOBU = 'F' :: LWORK >= max(2*M+N,3*N+(N+1)*NB,N+M*NB,7),
|
346 |
| -*> where NB is the optimal block size for DGEQP3, DGEQRF, DORMQR. |
| 346 | +*> where NB is the optimal block size for SGEQP3, SGEQRF, SORMQR. |
347 | 347 | *> In general, the optimal length LWORK is computed as
|
348 |
| -*> LWORK >= max(2*M+N,N+LWORK(DGEQP3),N+LWORK(DPOCON), |
349 |
| -*> 2*N+LWORK(DGEQRF), N+LWORK(DORMQR)). |
350 |
| -*> Here LWORK(DORMQR) equals N*NB (for JOBU = 'U') or |
| 348 | +*> LWORK >= max(2*M+N,N+LWORK(SGEQP3),N+LWORK(SPOCON), |
| 349 | +*> 2*N+LWORK(SGEQRF), N+LWORK(SORMQR)). |
| 350 | +*> Here LWORK(SORMQR) equals N*NB (for JOBU = 'U') or |
351 | 351 | *> M*NB (for JOBU = 'F').
|
352 | 352 | *>
|
353 | 353 | *> If the full SVD is needed: (JOBU = 'U' or JOBU = 'F') and
|
|
357 | 357 | *> LWORK >= max(2*M+N, 4*N+N*N,2*N+N*N+6).
|
358 | 358 | *> -> For optimal performance, LWORK should be additionally
|
359 | 359 | *> larger than N+M*NB, where NB is the optimal block size
|
360 |
| -*> for DORMQR. |
| 360 | +*> for SORMQR. |
361 | 361 | *> \endverbatim
|
362 | 362 | *>
|
363 | 363 | *> \param[out] IWORK
|
364 | 364 | *> \verbatim
|
365 |
| -*> IWORK is INTEGER array, dimension (M+3*N). |
| 365 | +*> IWORK is INTEGER array, dimension (MAX(3,M+3*N)). |
366 | 366 | *> On exit,
|
367 | 367 | *> IWORK(1) = the numerical rank determined after the initial
|
368 | 368 | *> QR factorization with pivoting. See the descriptions
|
|
0 commit comments