STGSJA(3)
NAME π
okay so this is stgsja.f(3) from the Library Functions Manual β the header has /home/abui...RC/stgsja.f(3) repeated like a chorus, and the NAME line is literally:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/stgsja.f
That's the file, bestie. Iconic path, no notes. β¨
SYNOPSIS π¦
Functions/Subroutines π§
subroutine STGSJA (jobu, jobv, jobq, m, p, n, k, l, a, lda, b, ldb,
tola, tolb, alpha, beta, u, ldu, v, ldv, q, ldq, work, ncycle, info)
STGSJA
Function/Subroutine Documentation π
subroutine STGSJA (character jobu, character jobv, character jobq, integer
m, integer p, integer n, integer k, integer l, real, dimension( lda, * )
a, integer lda, real, dimension( ldb, * ) b, integer ldb, real tola,
real tolb, real, dimension( * ) alpha, real, dimension( * ) beta, real,
dimension( ldu, * ) u, integer ldu, real, dimension( ldv, * ) v, integer
ldv, real, dimension( ldq, * ) q, integer ldq, real, dimension( * )
work, integer ncycle, integer info)
STGSJA
Purpose π₯
okay so here's the tea: STGSJA computes the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matrices A and B. no cap, that's the whole main-character job. π
On entry, it is assumed that matrices A and B have the following forms, which may be obtained by the preprocessing subroutine SGGSVP from a general M-by-N matrix A and P-by-N matrix B:
N-K-L K L
A = K ( 0 A12 A13 ) if M-K-L >= 0;
L ( 0 0 A23 )
M-K-L ( 0 0 0 )
N-K-L K L
A = K ( 0 A12 A13 ) if M-K-L < 0;
M-K ( 0 0 A23 )
N-K-L K L
B = L ( 0 0 B13 )
P-L ( 0 0 0 )
where the K-by-K matrix A12 and L-by-L matrix B13 are nonsingular upper triangular; A23 is L-by-L upper triangular if M-K-L >= 0, otherwise A23 is (M-K)-by-L upper trapezoidal. slay, the shapes are shaking. π«Ά
On exit,
U**T *A*Q = D1*( 0 R ), V**T *B*Q = D2*( 0 R ),
where U, V and Q are orthogonal matrices. R is a nonsingular upper triangular matrix, and D1 and D2 are so-called βdiagonalβ matrices, which are of the following structures:
If M-K-L >= 0,
K L
D1 = K ( I 0 )
L ( 0 C )
M-K-L ( 0 0 )
K L
D2 = L ( 0 S )
P-L ( 0 0 )
N-K-L K L
( 0 R ) = K ( 0 R11 R12 ) K
L ( 0 0 R22 ) L
where
C = diag( ALPHA(K+1), ... , ALPHA(K+L) ),
S = diag( BETA(K+1), ... , BETA(K+L) ),
C**2 + S**2 = I.
R is stored in A(1:K+L,N-K-L+1:N) on exit.
If M-K-L < 0,
K M-K K+L-M
D1 = K ( I 0 0 )
M-K ( 0 C 0 )
K M-K K+L-M
D2 = M-K ( 0 S 0 )
K+L-M ( 0 0 I )
P-L ( 0 0 0 )
N-K-L K M-K K+L-M
( 0 R ) = K ( 0 R11 R12 R13 )
M-K ( 0 0 R22 R23 )
K+L-M ( 0 0 0 R33 )
where
C = diag( ALPHA(K+1), ... , ALPHA(M) ),
S = diag( BETA(K+1), ... , BETA(M) ),
C**2 + S**2 = I.
R = ( R11 R12 R13 ) is stored in A(1:M, N-K-L+1:N) and R33 is stored
( 0 R22 R23 )
in B(M-K+1:L,N+M-K-L+1:N) on exit.
The computation of the orthogonal transformation matrices U, V or Q is optional. These matrices may either be formed explicitly, or they may be postmultiplied into input matrices U1, V1, or Q1. flexible AND iconic. π
Parameters πΈ
JOBUβJOBUisCHARACTER*1= 'U': U must contain an orthogonal matrixU1on entry, and the productU1*Uis returned;= 'I': U is initialized to the unit matrix, and the orthogonal matrix U is returned;= 'N': U is not computed.
JOBVβJOBVisCHARACTER*1= 'V': V must contain an orthogonal matrixV1on entry, and the productV1*Vis returned;= 'I': V is initialized to the unit matrix, and the orthogonal matrix V is returned;= 'N': V is not computed.
JOBQβJOBQisCHARACTER*1= 'Q': Q must contain an orthogonal matrixQ1on entry, and the productQ1*Qis returned;= 'I': Q is initialized to the unit matrix, and the orthogonal matrix Q is returned;= 'N': Q is not computed.
MβMisINTEGER. The number of rows of the matrix A.M >= 0.PβPisINTEGER. The number of rows of the matrix B.P >= 0.NβNisINTEGER. The number of columns of the matrices A and B.N >= 0.KβKisINTEGER.LβLisINTEGER.
K and L specify the subblocks in the input matrices A and B: A23 = A(K+1:MIN(K+L,M),N-L+1:N) and B13 = B(1:L,N-L+1:N) of A and B, whose GSVD is going to be computed by STGSJA. See Further Details. iykyk. β¨
AβAisREAL array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit,A(N-K+1:N,1:MIN(K+L,M) )contains the triangular matrix R or part of R. See Purpose for details.LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,M).BβBisREAL array, dimension (LDB,N). On entry, the P-by-N matrix B. On exit, if necessary,B(M-K+1:L,N+M-K-L+1:N)contains a part of R. See Purpose for details.LDBβLDBisINTEGER. The leading dimension of the array B.LDB >= max(1,P).TOLAβTOLAisREAL.TOLBβTOLBisREAL.
TOLA and TOLB are the convergence criteria for the Jacobi-Kogbetliantz iteration procedure. Generally, they are the same as used in the preprocessing step, say
TOLA = max(M,N)*norm(A)*MACHEPS,
TOLB = max(P,N)*norm(B)*MACHEPS.
ALPHAβALPHAisREAL array, dimension (N).BETAβBETAisREAL array, dimension (N).
On exit, ALPHA and BETA contain the generalized singular value pairs of A and B;
ALPHA(1:K) = 1,
BETA(1:K) = 0,
and if M-K-L >= 0,
ALPHA(K+1:K+L) = diag(C),
BETA(K+1:K+L) = diag(S),
or if M-K-L < 0,
ALPHA(K+1:M)= C, ALPHA(M+1:K+L)= 0
BETA(K+1:M) = S, BETA(M+1:K+L) = 1.
Furthermore, if K+L < N,
ALPHA(K+L+1:N) = 0 and
BETA(K+L+1:N) = 0.
UβUisREAL array, dimension (LDU,M). On entry, ifJOBU = 'U', U must contain a matrixU1(usually the orthogonal matrix returned bySGGSVP). On exit, ifJOBU = 'I', U contains the orthogonal matrix U; ifJOBU = 'U', U contains the productU1*U. IfJOBU = 'N', U is not referenced.LDUβLDUisINTEGER. The leading dimension of the array U.LDU >= max(1,M)ifJOBU = 'U';LDU >= 1otherwise.VβVisREAL array, dimension (LDV,P). On entry, ifJOBV = 'V', V must contain a matrixV1(usually the orthogonal matrix returned bySGGSVP). On exit, ifJOBV = 'I', V contains the orthogonal matrix V; ifJOBV = 'V', V contains the productV1*V. IfJOBV = 'N', V is not referenced.LDVβLDVisINTEGER. The leading dimension of the array V.LDV >= max(1,P)ifJOBV = 'V';LDV >= 1otherwise.QβQisREAL array, dimension (LDQ,N). On entry, ifJOBQ = 'Q', Q must contain a matrixQ1(usually the orthogonal matrix returned bySGGSVP). On exit, ifJOBQ = 'I', Q contains the orthogonal matrix Q; ifJOBQ = 'Q', Q contains the productQ1*Q. IfJOBQ = 'N', Q is not referenced.LDQβLDQisINTEGER. The leading dimension of the array Q.LDQ >= max(1,N)ifJOBQ = 'Q';LDQ >= 1otherwise.WORKβWORKisREAL array, dimension (2*N).NCYCLEβNCYCLEisINTEGER. The number of cycles required for convergence.INFOβINFOisINTEGER= 0: successful exit< 0: ifINFO = -i, the i-th argument had an illegal value.= 1: the procedure does not converge afterMAXITcycles.
bestie,INFO = 1is not a slay: it means the procedure does not converge afterMAXITcycles. π
Internal Parameters π§
MAXITβINTEGER.MAXITspecifies the total loops that the iterative procedure may take. If afterMAXITcycles, the routine fails to converge, we returnINFO = 1.
The source block wraps up with .fi. π
Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details π
okay bestie so here's the vibe of what this routine is actually doing π
STGSJA essentially uses a variant of the Kogbetliantz algorithm to reduce a min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and an L-by-L matrix B13 to the form:
U1**T *A13*Q1 = C1*R1; V1**T *B13*Q1 = S1*R1,
where U1, V1 and Q1 are orthogonal matrix, and Z**T is the transpose of Z. C1 and S1 are diagonal matrices satisfying
C1**2 + S1**2 = I,
and R1 is an L-by-L nonsingular upper triangular matrix. β¨
ngl that's the whole glow-up right there β you're rotatingA13andB13by orthogonal matrices so the result lands in that cleanC1*R1/S1*R1shape, with theC1**2 + S1**2 = Icondition holding down the diagonal like the main character it is π
Definition at line 375 of file stgsja.f. π
π Author π
Generated automatically by Doxygen for LAPACK from the source code. π€ no human wrote this, it's giving autopilot realness
okay that's the whole page bestie, you ate that π«Ά this little number came straight out of /home/abui...RC/stgsja.f(3) and it's LAPACK Version 3.12.0 β iconic, versioned, documented, periodt πβ¨π
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms