SRC/zgesvj.f(3)
π NAME π
okay so this is the SRC/zgesvj.f(3) page from the Library Functions Manual β the whole thing is about SRC/zgesvj.f, bestie. β¨
β¨ SYNOPSIS β¨
π«Ά Functions/Subroutines π«Ά
subroutine zgesvj (joba, jobu, jobv, m, n, a, lda, sva, mv, v, ldv,
cwork, lwork, rwork, lrwork, info)
ZGESVJ
π Function/Subroutine Documentation π
subroutine zgesvj (character*1 joba, character*1 jobu, character*1 jobv,
integer m, integer n, complex*16, dimension( lda, * ) a, integer lda,
double precision, dimension( n ) sva, integer mv, complex*16, dimension(
ldv, * ) v, integer ldv, complex*16, dimension( lwork ) cwork, integer
lwork, double precision, dimension( lrwork ) rwork, integer lrwork,
integer info)
ZGESVJ
π Purpose π
okay so ZGESVJ computes the singular value decomposition (SVD) of a complex M-by-N matrix A, where M >= N. The SVD of A is written as
[++] [xx] [x0] [xx]
A = U * SIGMA * V^*, [++] = [xx] * [ox] * [xx]
[++] [xx]
where SIGMA is an N-by-N diagonal matrix, U is an M-by-N orthonormal matrix, and V is an N-by-N unitary matrix. The diagonal elements of SIGMA are the singular values of A. The columns of U and V are the left and the right singular vectors of A, respectively. π
π Parameters π
π JOBA π
JOBA is CHARACTER*1 β it specifies the structure of A, no cap.
= 'L': the input matrix A is lower triangular; πΈ= 'U': the input matrix A is upper triangular; π¦= 'G': the input matrix A is general M-by-N matrix, M >= N. β¨
π JOBU π
JOBU is CHARACTER*1 β it says whether to compute the left singular vectors (columns of U):
= 'U'or'F': the left singular vectors corresponding to the nonzero singular values are computed and returned in the leading columns of A. See more details in the description of A. The default numerical orthogonality threshold is set to approximatelyTOL=CTOL*EPS,CTOL=SQRT(M),EPS=DLAMCH('E'). π= 'C': analogous toJOBU='U', except that the user can control the level of numerical orthogonality of the computed left singular vectors.TOLcan be set toTOL = CTOL*EPS, whereCTOLis given on input in the arrayWORK. NoCTOLsmaller thanONEis allowed.CTOLgreater than1 / EPSis meaningless. The option'C'can be used ifM*EPSis satisfactory orthogonality of the computed left singular vectors, soCTOL=Mcould save few sweeps of Jacobi rotations. See the descriptions of A andWORK(1). π= 'N': the matrix U is not computed. However, see the description of A. π«Ά
π JOBV π
JOBV is CHARACTER*1 β it says whether to compute the right singular vectors, that is, the matrix 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 array V. In other words, the right singular vector matrix V is not computed explicitly; instead it is applied to an MV-by-N matrix initially stored in the first MV rows of V. π₯= 'N': the matrix V is not computed and the array V is not referenced. π
π M π
M is INTEGER β the number of rows of the input matrix A. 1/DLAMCH('E') > M >= 0. π
π N π
N is INTEGER β the number of columns of the input matrix A. M >= N >= 0. β¨
π A π
A is COMPLEX*16 array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit:
If JOBU = 'U' .OR. JOBU = 'C':
- If
INFO = 0:RANKAorthonormal columns of U are returned in the leadingRANKAcolumns of the array A. HereRANKA <= Nis the number of computed singular values of A that are above the underflow thresholdDLAMCH('S'). The singular vectors corresponding to underflowed or zero singular values are not computed. The value ofRANKAis returned in the arrayRWORKasRANKA=NINT(RWORK(2)). Also see the descriptions ofSVAandRWORK. The computed columns of U are mutually numerically orthogonal up to approximatelyTOL=SQRT(M)*EPS(default); orTOL=CTOL*EPS(JOBU = 'C'), see the description ofJOBU. π¦ - If
INFO > 0, the procedureZGESVJdid not converge in the given number of iterations (sweeps). In that case, the computed columns of U may not be orthogonal up toTOL. The output U (stored in A),SIGMA(given by the computed singular values inSVA(1:N)) and V is still a decomposition of the input matrix A in the sense that the residual|| A - SCALE * U * SIGMA * V^* ||_2 / ||A||_2is small. π
If JOBU = 'N':
- If
INFO = 0: note that the left singular vectors are 'for free' in the one-sided Jacobi SVD algorithm. However, if only the singular values are needed, the level of numerical orthogonality of U is not an issue and iterations are stopped when the columns of the iterated matrix are numerically orthogonal up to approximatelyM*EPS. Thus, on exit, A contains the columns of U scaled with the corresponding singular values. π - If
INFO > 0: the procedureZGESVJdid not converge in the given number of iterations (sweeps). π
π LDA π
LDA is INTEGER β the leading dimension of the array A. LDA >= max(1,M). πΈ
π SVA π
SVA is DOUBLE PRECISION array, dimension (N). On exit:
If INFO = 0: depending on the value SCALE = RWORK(1), we have:
- If
SCALE = ONE:SVA(1:N)contains the computed singular values of A. During the computationSVAcontains the Euclidean column norms of the iterated matrices in the array A. π - If
SCALE .NE. ONE: the singular values of A areSCALE*SVA(1:N), and this factored representation is due to the fact that some of the singular values of A might underflow or overflow. π
If INFO > 0: the procedure ZGESVJ did not converge in the given number of iterations (sweeps) and SCALE*SVA(1:N) may not be accurate. π
π MV π
MV is INTEGER β 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. π₯
π V π
V is COMPLEX*16 array, dimension (LDV,N):
- If
JOBV = 'V', then V contains on exit the N-by-N matrix of the right singular vectors; π - If
JOBV = 'A', then V contains the product of the computed right singular vector matrix and the initial matrix in the array V. π« - If
JOBV = 'N', then V is not referenced. π
π LDV π
LDV is INTEGER β the leading dimension of the array V, LDV >= 1.
- If
JOBV = 'V', thenLDV >= MAX(1,N). β¨ - If
JOBV = 'A', thenLDV >= MAX(1,MV) .(yes there's a space before the period in the original, bestie). π«Ά
π CWORK π
CWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) β used as workspace. π οΈ
π LWORK π
LWORK is INTEGER. Length of CWORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= M+N, otherwise. π
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) length of CWORK. (yes, minial is exactly what it says π)
π RWORK π
RWORK is a DOUBLE PRECISION array, dimension (max(6,LRWORK)). Here's the tea on what it holds:
- On entry, if
JOBU = 'C':RWORK(1) = CTOL, whereCTOLdefines the threshold for convergence.- The process stops if all columns of
Aare mutually orthogonal up toCTOL*EPS,EPS=DLAMCH('E'). - It is required that
CTOL >= ONE, i.e. it is not allowed to force the routine to obtain orthogonality belowEPSILON.
- The process stops if all columns of
- On exit:
RWORK(1) = SCALEis the scaling factor such thatSCALE*SVA(1:N)are the computed singular values ofA. (See description ofSVA().)RWORK(2) = NINT(RWORK(2))is the number of the computed nonzero singular values.RWORK(3) = NINT(RWORK(3))is the number of the computed singular values that are larger than the underflow threshold.RWORK(4) = NINT(RWORK(4))is the number of sweeps of Jacobi rotations needed for numerical convergence.RWORK(5) = max_{i.NE.j} |COS(A(:,i),A(:,j))|in the last sweep. This is useful information in cases whenZGESVJdid not converge, as it can be used to estimate whether the output is still useful and for post festum analysis.RWORK(6) =the largest absolute value over all sines of the Jacobi rotation angles in the last sweep. It can be useful for a post festum analysis.
πΎ LRWORK
LRWORK is INTEGER. It's the length of RWORK, bestie β and the rules are:
LRWORK >= 1, ifMIN(M,N) = 0, andLRWORK >= MAX(6,N), otherwise.- 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) length ofRWORK.
lowkey important: that-1vibe check means βdon't actually compute, just tell me how muchRWORKI need.β β¨
π¨ INFO
INFO is INTEGER. It's the exit-status girlie:
= 0: successful exit. slay.< 0: ifINFO = -i, then the i-th argument had an illegal value.> 0:ZGESVJdid not converge in the maximal allowed number (NSWEEP=30) of sweeps. The output may still be useful. See the description ofRWORK.
βοΈ Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details:
okay so the orthogonal N-by-N matrix V is obtained as a product of Jacobi plane rotations. In the case of underflow of the tangent of the Jacobi angle, a modified Jacobi transformation of Drmac [3] is used. Pivot strategy uses column interchanges of de Rijk [1]. The relative accuracy of the computed singular values and the accuracy of the computed singular vectors (in angle metric) is as guaranteed by the theory of Demmel and Veselic [2]. The condition number that determines the accuracy in the full rank case is essentially min_{D=diag} kappa(A*D), where kappa(.) is the spectral condition number.
The best performance of this Jacobi SVD 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]. Some tuning parameters (marked with [TP]) are available for the implementer.
The computational range for the nonzero singular values is the machine number interval ( UNDERFLOW , OVERFLOW ). In extreme cases, even denormalized singular values can be computed with the corresponding gradual loss of accurate digits. π
π Contributor:
============
Zlatko Drmac (Zagreb, Croatia)
π References:
- [1] P. P. M. De Rijk: A one-sided Jacobi algorithm for computing the singular value decomposition on a vector computer. SIAM J. Sci. Stat. Comp., Vol. 10 (1998), pp. 359-371.
- [2] J. Demmel and K. Veselic: Jacobi method is more accurate than QR.
- [3] Z. Drmac: Implementation of Jacobi rotations for accurate singular value computation in floating point arithmetic. SIAM J. Sci. Comp., Vol. 18 (1997), pp. 1200-1222.
- [4] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm I. SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1322-1342. LAPACK Working note 169.
- [5] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm II. SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1343-1362. LAPACK Working note 170.
- [6] Z. Drmac: SIGMA - mathematical software library for accurate SVD, PSV, QSVD, (H,K)-SVD computations. Department of Mathematics, University of Zagreb, 2008, 2015.
π Bugs, examples and comments:
===========================
Please report all bugs and send interesting test examples and comments to drmac@math.hr. Thank you. π«Ά
Definition at line 353 of file zgesvj.f.
βοΈ Author
Generated automatically by Doxygen for LAPACK from the source code.
π that's the whole page, bestie β LAPACK Version 3.12.0, source SRC/zgesvj.f(3). The footer didn't include a date, so I'm not inventing one, periodt. π
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms