SRC/cgsvj1.f(3)
π¦ NAME π¦
SRC/cgsvj1.f β bestie, this is the source file for cgsvj1, and it lives in the Library Functions Manual (section 3). Consider this your official intro π
β¨ SYNOPSIS β¨
π Functions/Subroutines
subroutine cgsvj1 (jobv, m, n, n1, a, lda, d, sva, mv, v, ldv, eps,
sfmin, tol, nsweep, work, lwork, info)
Okay so real talk: CGSVJ1 is a pre-processor for the routine cgesvj, and it applies Jacobi rotations targeting only particular pivots. That's the whole vibe π₯
π FUNCTION/SUBROUTINE DOCUMENTATION π
subroutine cgsvj1 (character*1 jobv, integer m, integer n, integer n1,
complex, dimension( lda, * ) a, integer lda, complex, dimension( n ) d,
real, dimension( n ) sva, integer mv, complex, dimension( ldv, * ) v,
integer ldv, real eps, real sfmin, real tol, integer nsweep, complex,
dimension( lwork ) work, integer lwork, integer info)
CGSVJ1 pre-processor for the routine cgesvj, applies Jacobi rotations targeting only particular pivots. Slay π
πΈ Purpose πΈ
So the tea is: CGSVJ1 is called from CGESVJ as a pre-processor, and honestly that is its main purpose. It applies Jacobi rotations in the same way as CGESVJ does, but β and this is the iconique part β it targets only particular pivots and it does not check convergence (stopping criterion). Few tuning parameters (marked by [TP]) are available for the implementer β¨
π§ Further Details π§
CGSVJ1 applies few sweeps of Jacobi rotations in the column space of the input M-by-N matrix A. The pivot pairs are taken from the (1,2) off-diagonal block in the corresponding N-by-N Gram matrix A^T * A. The block-entries (tiles) of the (1,2) off-diagonal block are marked by the [x]'s in the following scheme:
| * * * [x] [x] [x]|
| * * * [x] [x] [x]| Row-cycling in the nblr-by-nblc [x] blocks.
| * * * [x] [x] [x]| Row-cyclic pivoting inside each [x] block.
|[x] [x] [x] * * * |
|[x] [x] [x] * * * |
|[x] [x] [x] * * * |
In terms of the columns of A, the first N1 columns are rotated 'against' the remaining N-N1 columns, trying to increase the angle between the corresponding subspaces. The off-diagonal block is N1-by(N-N1) and it is tiled using quadratic tiles of side KBL. Here, KBL is a tuning parameter. The number of sweeps is given in NSWEEP and the orthogonality threshold is given in TOL π«Ά
π Parameters π
π JOBV
JOBV is CHARACTER*1. Specifies whether the output from this procedure is used to compute the matrix V:
= 'V': the product of the Jacobi rotations is accumulated by postmultiplying the N-by-N array V. (See the description of V.)= 'A': the product of the Jacobi rotations is accumulated by postmultiplying the MV-by-N array V. (See the descriptions of MV and V.)= 'N': the Jacobi rotations are not accumulated.
π M
M is INTEGER. The number of rows of the input matrix A. M >= 0.
π N
N is INTEGER. The number of columns of the input matrix A. M >= N >= 0.
π N1
N1 is INTEGER. N1 specifies the 2 x 2 block partition; the first N1 columns are rotated 'against' the remaining N-N1 columns of A. Literally the divider bestie βοΈ
π A
A is COMPLEX array, dimension (LDA,N).
On entry, M-by-N matrix A, such that A*diag(D) represents the input matrix.
On exit, A_onexit * D_onexit represents the input matrix A*diag(D) post-multiplied by a sequence of Jacobi rotations, where the rotation threshold and the total number of sweeps are given in TOL and NSWEEP, respectively. (See the descriptions of N1, D, TOL and NSWEEP.)
π LDA
LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
π D
D is COMPLEX array, dimension (N). The array D accumulates the scaling factors from the fast scaled Jacobi rotations.
On entry, A*diag(D) represents the input matrix.
On exit, A_onexit*diag(D_onexit) represents the input matrix post-multiplied by a sequence of Jacobi rotations, where the rotation threshold and the total number of sweeps are given in TOL and NSWEEP, respectively. (See the descriptions of N1, A, TOL and NSWEEP.)
π SVA
SVA is REAL array, dimension (N).
On entry, SVA contains the Euclidean norms of the columns of the matrix A*diag(D).
On exit, SVA contains the Euclidean norms of the columns of the matrix onexit*diag(D_onexit).
π MV
MV is INTEGER.
- If
JOBV = 'A', then MV rows of V are post-multiplied by a sequence of Jacobi rotations. - If
JOBV = 'N', then MV is not referenced.
π V
V is COMPLEX array, dimension (LDV,N).
- If
JOBV = 'V'then N rows of V are post-multiplied by a sequence of Jacobi rotations. - If
JOBV = 'A'then MV rows of V are post-multiplied by a sequence of Jacobi rotations. - If
JOBV = 'N', then V is not referenced.
π LDV
LDV is INTEGER. The leading dimension of the array V, LDV >= 1.
- If
JOBV = 'V',LDV >= N. - If
JOBV = 'A',LDV >= MV.
π EPS
EPS is REAL. EPS = SLAMCH('Epsilon') β
π SFMIN
SFMIN is REAL. SFMIN = SLAMCH('Safe Minimum')
π TOL
TOL is REAL. TOL is the threshold for Jacobi rotations. For a pair A(:,p), A(:,q) of pivot columns, the Jacobi rotation is applied only if ABS(COS(angle(A(:,p),A(:,q)))) > TOL π
π NSWEEP
NSWEEP is INTEGER. NSWEEP is the number of sweeps of Jacobi rotations to be performed π
π WORK
WORK is COMPLEX array, dimension (LWORK).
π LWORK
LWORK is INTEGER. LWORK is the dimension of WORK. LWORK >= M.
π INFO
INFO is INTEGER.
= 0: successful exit. Periodt. β< 0: ifINFO = -i, then the i-th argument had an illegal value π
Ngl, that < 0 case means somebody passed something cursed. Check your args bestie π
π Author π
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π Contributor π
Zlatko Drmac (Zagreb, Croatia) β main character energy fr fr π
Definition at line 234 of file cgsvj1.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
Okay that's the whole page, no cap π«Ά This is LAPACK, Version 3.12.0, and it's SRC/cgsvj1.f(3) β go forth and rotate those pivots bestie, ily πβ¨πΈ
π¦ 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