version 1.7, 2018/05/29 07:18:16
|
version 1.8, 2020/05/21 21:46:04
|
Line 89
|
Line 89
|
*> Specifies whether to compute the right singular vectors, that |
*> Specifies whether to compute the right singular vectors, that |
*> is, the matrix V: |
*> is, the matrix V: |
*> = 'V' or 'J': the matrix V is computed and returned in the array V |
*> = 'V' or 'J': the matrix V is computed and returned in the array V |
*> = 'A' : the Jacobi rotations are applied to the MV-by-N |
*> = 'A': the Jacobi rotations are applied to the MV-by-N |
*> array V. In other words, the right singular vector |
*> array V. In other words, the right singular vector |
*> matrix V is not computed explicitly; instead it is |
*> matrix V is not computed explicitly; instead it is |
*> applied to an MV-by-N matrix initially stored in the |
*> applied to an MV-by-N matrix initially stored in the |
*> first MV rows of V. |
*> first MV rows of V. |
*> = 'N' : the matrix V is not computed and the array V is not |
*> = 'N': the matrix V is not computed and the array V is not |
*> referenced |
*> referenced |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 116
|
Line 116
|
*> A is COMPLEX*16 array, dimension (LDA,N) |
*> A is COMPLEX*16 array, dimension (LDA,N) |
*> On entry, the M-by-N matrix A. |
*> On entry, the M-by-N matrix A. |
*> On exit, |
*> On exit, |
*> If JOBU .EQ. 'U' .OR. JOBU .EQ. 'C': |
*> If JOBU = 'U' .OR. JOBU = 'C': |
*> If INFO .EQ. 0 : |
*> If INFO = 0 : |
*> RANKA orthonormal columns of U are returned in the |
*> RANKA orthonormal columns of U are returned in the |
*> leading RANKA columns of the array A. Here RANKA <= N |
*> leading RANKA columns of the array A. Here RANKA <= N |
*> is the number of computed singular values of A that are |
*> is the number of computed singular values of A that are |
Line 127
|
Line 127
|
*> in the array RWORK as RANKA=NINT(RWORK(2)). Also see the |
*> in the array RWORK as RANKA=NINT(RWORK(2)). Also see the |
*> descriptions of SVA and RWORK. The computed columns of U |
*> descriptions of SVA and RWORK. The computed columns of U |
*> are mutually numerically orthogonal up to approximately |
*> are mutually numerically orthogonal up to approximately |
*> TOL=SQRT(M)*EPS (default); or TOL=CTOL*EPS (JOBU.EQ.'C'), |
*> TOL=SQRT(M)*EPS (default); or TOL=CTOL*EPS (JOBU = 'C'), |
*> see the description of JOBU. |
*> see the description of JOBU. |
*> If INFO .GT. 0, |
*> If INFO > 0, |
*> the procedure ZGESVJ did not converge in the given number |
*> the procedure ZGESVJ did not converge in the given number |
*> of iterations (sweeps). In that case, the computed |
*> of iterations (sweeps). In that case, the computed |
*> columns of U may not be orthogonal up to TOL. The output |
*> columns of U may not be orthogonal up to TOL. The output |
Line 137
|
Line 137
|
*> values in SVA(1:N)) and V is still a decomposition of the |
*> values in SVA(1:N)) and V is still a decomposition of the |
*> input matrix A in the sense that the residual |
*> input matrix A in the sense that the residual |
*> || A - SCALE * U * SIGMA * V^* ||_2 / ||A||_2 is small. |
*> || A - SCALE * U * SIGMA * V^* ||_2 / ||A||_2 is small. |
*> If JOBU .EQ. 'N': |
*> If JOBU = 'N': |
*> If INFO .EQ. 0 : |
*> If INFO = 0 : |
*> Note that the left singular vectors are 'for free' in the |
*> Note that the left singular vectors are 'for free' in the |
*> one-sided Jacobi SVD algorithm. However, if only the |
*> one-sided Jacobi SVD algorithm. However, if only the |
*> singular values are needed, the level of numerical |
*> singular values are needed, the level of numerical |
Line 147
|
Line 147
|
*> numerically orthogonal up to approximately M*EPS. Thus, |
*> numerically orthogonal up to approximately M*EPS. Thus, |
*> on exit, A contains the columns of U scaled with the |
*> on exit, A contains the columns of U scaled with the |
*> corresponding singular values. |
*> corresponding singular values. |
*> If INFO .GT. 0 : |
*> If INFO > 0: |
*> the procedure ZGESVJ did not converge in the given number |
*> the procedure ZGESVJ did not converge in the given number |
*> of iterations (sweeps). |
*> of iterations (sweeps). |
*> \endverbatim |
*> \endverbatim |
Line 162
|
Line 162
|
*> \verbatim |
*> \verbatim |
*> SVA is DOUBLE PRECISION array, dimension (N) |
*> SVA is DOUBLE PRECISION array, dimension (N) |
*> On exit, |
*> On exit, |
*> If INFO .EQ. 0 : |
*> If INFO = 0 : |
*> depending on the value SCALE = RWORK(1), we have: |
*> depending on the value SCALE = RWORK(1), we have: |
*> If SCALE .EQ. ONE: |
*> If SCALE = ONE: |
*> SVA(1:N) contains the computed singular values of A. |
*> SVA(1:N) contains the computed singular values of A. |
*> During the computation SVA contains the Euclidean column |
*> During the computation SVA contains the Euclidean column |
*> norms of the iterated matrices in the array A. |
*> norms of the iterated matrices in the array A. |
Line 173
|
Line 173
|
*> factored representation is due to the fact that some of the |
*> factored representation is due to the fact that some of the |
*> singular values of A might underflow or overflow. |
*> singular values of A might underflow or overflow. |
*> |
*> |
*> If INFO .GT. 0 : |
*> If INFO > 0: |
*> the procedure ZGESVJ did not converge in the given number of |
*> the procedure ZGESVJ did not converge in the given number of |
*> iterations (sweeps) and SCALE*SVA(1:N) may not be accurate. |
*> iterations (sweeps) and SCALE*SVA(1:N) may not be accurate. |
*> \endverbatim |
*> \endverbatim |
Line 181
|
Line 181
|
*> \param[in] MV |
*> \param[in] MV |
*> \verbatim |
*> \verbatim |
*> MV is INTEGER |
*> MV is INTEGER |
*> If JOBV .EQ. 'A', then the product of Jacobi rotations in ZGESVJ |
*> If JOBV = 'A', then the product of Jacobi rotations in ZGESVJ |
*> is applied to the first MV rows of V. See the description of JOBV. |
*> is applied to the first MV rows of V. See the description of JOBV. |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
Line 199
|
Line 199
|
*> \param[in] LDV |
*> \param[in] LDV |
*> \verbatim |
*> \verbatim |
*> LDV is INTEGER |
*> LDV is INTEGER |
*> The leading dimension of the array V, LDV .GE. 1. |
*> The leading dimension of the array V, LDV >= 1. |
*> If JOBV .EQ. 'V', then LDV .GE. max(1,N). |
*> If JOBV = 'V', then LDV >= max(1,N). |
*> If JOBV .EQ. 'A', then LDV .GE. max(1,MV) . |
*> If JOBV = 'A', then LDV >= max(1,MV) . |
*> \endverbatim |
*> \endverbatim |
*> |
*> |
*> \param[in,out] CWORK |
*> \param[in,out] CWORK |
*> \verbatim |
*> \verbatim |
*> CWORK is COMPLEX*16 array, dimension (max(1,LWORK)) |
*> CWORK is COMPLEX*16 array, dimension (max(1,LWORK)) |
*> Used as workspace. |
*> Used as workspace. |
*> If on entry LWORK .EQ. -1, then a workspace query is assumed and |
*> If on entry LWORK = -1, then a workspace query is assumed and |
*> no computation is done; CWORK(1) is set to the minial (and optimal) |
*> no computation is done; CWORK(1) is set to the minial (and optimal) |
*> length of CWORK. |
*> length of CWORK. |
*> \endverbatim |
*> \endverbatim |
Line 223
|
Line 223
|
*> \verbatim |
*> \verbatim |
*> RWORK is DOUBLE PRECISION array, dimension (max(6,LRWORK)) |
*> RWORK is DOUBLE PRECISION array, dimension (max(6,LRWORK)) |
*> On entry, |
*> On entry, |
*> If JOBU .EQ. 'C' : |
*> If JOBU = 'C' : |
*> RWORK(1) = CTOL, where CTOL defines the threshold for convergence. |
*> RWORK(1) = CTOL, where CTOL defines the threshold for convergence. |
*> The process stops if all columns of A are mutually |
*> The process stops if all columns of A are mutually |
*> orthogonal up to CTOL*EPS, EPS=DLAMCH('E'). |
*> orthogonal up to CTOL*EPS, EPS=DLAMCH('E'). |
Line 243
|
Line 243
|
*> RWORK(5) = max_{i.NE.j} |COS(A(:,i),A(:,j))| in the last sweep. |
*> RWORK(5) = max_{i.NE.j} |COS(A(:,i),A(:,j))| in the last sweep. |
*> This is useful information in cases when ZGESVJ did |
*> This is useful information in cases when ZGESVJ did |
*> not converge, as it can be used to estimate whether |
*> not converge, as it can be used to estimate whether |
*> the output is stil useful and for post festum analysis. |
*> the output is still useful and for post festum analysis. |
*> RWORK(6) = the largest absolute value over all sines of the |
*> RWORK(6) = the largest absolute value over all sines of the |
*> Jacobi rotation angles in the last sweep. It can be |
*> Jacobi rotation angles in the last sweep. It can be |
*> useful for a post festum analysis. |
*> useful for a post festum analysis. |
*> If on entry LRWORK .EQ. -1, then a workspace query is assumed and |
*> If on entry LRWORK = -1, then a workspace query is assumed and |
*> no computation is done; RWORK(1) is set to the minial (and optimal) |
*> no computation is done; RWORK(1) is set to the minial (and optimal) |
*> length of RWORK. |
*> length of RWORK. |
*> \endverbatim |
*> \endverbatim |
Line 261
|
Line 261
|
*> \param[out] INFO |
*> \param[out] INFO |
*> \verbatim |
*> \verbatim |
*> INFO is INTEGER |
*> INFO is INTEGER |
*> = 0 : successful exit. |
*> = 0: successful exit. |
*> < 0 : if INFO = -i, then the i-th argument had an illegal value |
*> < 0: if INFO = -i, then the i-th argument had an illegal value |
*> > 0 : ZGESVJ did not converge in the maximal allowed number |
*> > 0: ZGESVJ did not converge in the maximal allowed number |
*> (NSWEEP=30) of sweeps. The output may still be useful. |
*> (NSWEEP=30) of sweeps. The output may still be useful. |
*> See the description of RWORK. |
*> See the description of RWORK. |
*> \endverbatim |
*> \endverbatim |