version 1.1, 2020/05/21 21:46:04
|
version 1.2, 2023/08/07 08:39:19
|
Line 40
|
Line 40
|
*> |
*> |
*> \verbatim |
*> \verbatim |
*> |
*> |
* ZCGESVDQ computes the singular value decomposition (SVD) of a complex |
*> ZCGESVDQ computes the singular value decomposition (SVD) of a complex |
*> M-by-N matrix A, where M >= N. The SVD of A is written as |
*> M-by-N matrix A, where M >= N. The SVD of A is written as |
*> [++] [xx] [x0] [xx] |
*> [++] [xx] [x0] [xx] |
*> A = U * SIGMA * V^*, [++] = [xx] * [ox] * [xx] |
*> A = U * SIGMA * V^*, [++] = [xx] * [ox] * [xx] |
Line 218
|
Line 218
|
*> If JOBP = 'P', IWORK(N+1:N+M-1) contains the indices of the sequence |
*> If JOBP = 'P', IWORK(N+1:N+M-1) contains the indices of the sequence |
*> of row swaps used in row pivoting. These can be used to restore the |
*> of row swaps used in row pivoting. These can be used to restore the |
*> left singular vectors in the case JOBU = 'F'. |
*> left singular vectors in the case JOBU = 'F'. |
* |
*> |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> LIWORK(1) returns the minimal LIWORK. |
*> IWORK(1) returns the minimal LIWORK. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in] LIWORK |
*> \param[in] LIWORK |
Line 242
|
Line 242
|
*> On exit, if, on entry, LCWORK.NE.-1, CWORK(1:N) contains parameters |
*> On exit, if, on entry, LCWORK.NE.-1, CWORK(1:N) contains parameters |
*> needed to recover the Q factor from the QR factorization computed by |
*> needed to recover the Q factor from the QR factorization computed by |
*> ZGEQP3. |
*> ZGEQP3. |
* |
*> |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> CWORK(1) returns the optimal LCWORK, and |
*> CWORK(1) returns the optimal LCWORK, and |
*> CWORK(2) returns the minimal LCWORK. |
*> CWORK(2) returns the minimal LCWORK. |
Line 315
|
Line 315
|
*> N^(-1/4) * RWORK(1) <= ||pinv(C)||_2 <= N^(1/4) * RWORK(1). |
*> N^(-1/4) * RWORK(1) <= ||pinv(C)||_2 <= N^(1/4) * RWORK(1). |
*> Otherwise, RWORK(1) = -1. |
*> Otherwise, RWORK(1) = -1. |
*> 2. RWORK(2) contains the number of singular values computed as |
*> 2. RWORK(2) contains the number of singular values computed as |
*> exact zeros in ZGESVD applied to the upper triangular or trapeziodal |
*> exact zeros in ZGESVD applied to the upper triangular or trapezoidal |
*> R (from the initial QR factorization). In case of early exit (no call to |
*> R (from the initial QR factorization). In case of early exit (no call to |
*> ZGESVD, such as in the case of zero matrix) RWORK(2) = -1. |
*> ZGESVD, such as in the case of zero matrix) RWORK(2) = -1. |
* |
*> |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> If LIWORK, LCWORK, or LRWORK = -1, then on exit, if INFO = 0, |
*> RWORK(1) returns the minimal LRWORK. |
*> RWORK(1) returns the minimal LRWORK. |
*> \endverbatim |
*> \endverbatim |
Line 329
|
Line 329
|
*> The dimension of the array RWORK. |
*> The dimension of the array RWORK. |
*> If JOBP ='P', then LRWORK >= MAX(2, M, 5*N); |
*> If JOBP ='P', then LRWORK >= MAX(2, M, 5*N); |
*> Otherwise, LRWORK >= MAX(2, 5*N). |
*> Otherwise, LRWORK >= MAX(2, 5*N). |
* |
*> |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> If LRWORK = -1, then a workspace query is assumed; the routine |
*> only calculates and returns the optimal and minimal sizes |
*> only calculates and returns the optimal and minimal sizes |
*> for the CWORK, IWORK, and RWORK arrays, and no error |
*> for the CWORK, IWORK, and RWORK arrays, and no error |
Line 404
|
Line 404
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date November 2018 |
|
* |
|
*> \ingroup complex16GEsing |
*> \ingroup complex16GEsing |
* |
* |
* ===================================================================== |
* ===================================================================== |
Line 638
|
Line 636
|
IF ( WNTVA ) THEN |
IF ( WNTVA ) THEN |
* .. minimal workspace length for N x N/2 ZGEQRF |
* .. minimal workspace length for N x N/2 ZGEQRF |
LWQRF = MAX( N/2, 1 ) |
LWQRF = MAX( N/2, 1 ) |
* .. minimal workspace lengt for N/2 x N/2 ZGESVD |
* .. minimal workspace length for N/2 x N/2 ZGESVD |
LWSVD2 = MAX( 3 * (N/2), 1 ) |
LWSVD2 = MAX( 3 * (N/2), 1 ) |
LWUNQ2 = MAX( N, 1 ) |
LWUNQ2 = MAX( N, 1 ) |
MINWRK2 = MAX( LWQP3, N/2+LWQRF, N/2+LWSVD2, |
MINWRK2 = MAX( LWQP3, N/2+LWQRF, N/2+LWSVD2, |