version 1.6, 2018/05/29 06:55:22
|
version 1.9, 2023/08/07 08:39:19
|
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 |
Line 276
|
Line 276
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date June 2016 |
|
* |
|
*> \ingroup complex16GEcomputational |
*> \ingroup complex16GEcomputational |
* |
* |
*> \par Further Details: |
*> \par Further Details: |
Line 296
|
Line 294
|
*> spectral condition number. The best performance of this Jacobi SVD |
*> spectral condition number. The best performance of this Jacobi SVD |
*> procedure is achieved if used in an accelerated version of Drmac and |
*> procedure is achieved if used in an accelerated version of Drmac and |
*> Veselic [4,5], and it is the kernel routine in the SIGMA library [6]. |
*> Veselic [4,5], and it is the kernel routine in the SIGMA library [6]. |
*> Some tunning parameters (marked with [TP]) are available for the |
*> Some tuning parameters (marked with [TP]) are available for the |
*> implementer. |
*> implementer. |
*> The computational range for the nonzero singular values is the machine |
*> The computational range for the nonzero singular values is the machine |
*> number interval ( UNDERFLOW , OVERFLOW ). In extreme cases, even |
*> number interval ( UNDERFLOW , OVERFLOW ). In extreme cases, even |
Line 351
|
Line 349
|
SUBROUTINE ZGESVJ( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, |
SUBROUTINE ZGESVJ( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, |
$ LDV, CWORK, LWORK, RWORK, LRWORK, INFO ) |
$ LDV, CWORK, LWORK, RWORK, LRWORK, INFO ) |
* |
* |
* -- LAPACK computational routine (version 3.8.0) -- |
* -- LAPACK computational routine -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* June 2016 |
|
* |
* |
IMPLICIT NONE |
IMPLICIT NONE |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |