DTGSJA(3)
π
dtgsja.f(3) β Library Functions Manual π
okay bestie, welcome to the Library Functions Manual page for dtgsja.f(3). This one is giving big-brain Fortran energy: DTGSJA computes the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matrices A and B. No cap, it's a lot, but we're gonna get through it together. π«Ά
π¦ NAME π¦
Girl, the NAME section is literally just the source path. Here it is, exactly:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dtgsja.f
β¨ SYNOPSIS β¨
πΈ Functions/Subroutines πΈ
Under Functions/Subroutines, we have this icon:
subroutine DTGSJA (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)
And yes, she's called DTGSJA. Main character energy, honestly. π
π Function/Subroutine Documentation π
Here's the full signature in all its glory:
subroutine DTGSJA (character jobu, character jobv, character jobq, integer
m, integer p, integer n, integer k, integer l, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( ldb, *
) b, integer ldb, double precision tola, double precision tolb, double
precision, dimension( * ) alpha, double precision, dimension( * ) beta,
double precision, dimension( ldu, * ) u, integer ldu, double precision,
dimension( ldv, * ) v, integer ldv, double precision, dimension( ldq, *
) q, integer ldq, double precision, dimension( * ) work, integer ncycle,
integer info)
π Purpose π
So, DTGSJA computes the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matrices A and B. π
On entry, it is assumed that matrices A and B have the following forms, which may be obtained by the preprocessing subroutine DGGSVP 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. πΈ
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 ``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.
And this next bit is a whole vibe:
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. π«
πΈ Parameters πΈ
JOBUβ isCHARACTER*1, and here are her settings:= 'U':Umust contain an orthogonal matrixU1on entry, and the productU1*Uis returned. π= 'I':Uis initialized to the unit matrix, and the orthogonal matrixUis returned. β¨= 'N':Uis not computed. π
JOBVβ isCHARACTER*1:= 'V':Vmust contain an orthogonal matrixV1on entry, and the productV1*Vis returned.= 'I':Vis initialized to the unit matrix, and the orthogonal matrixVis returned.= 'N':Vis not computed.
JOBQβ isCHARACTER*1:= 'Q':Qmust contain an orthogonal matrixQ1on entry, and the productQ1*Qis returned.= 'I':Qis initialized to the unit matrix, and the orthogonal matrixQis returned.= 'N':Qis not computed.
Mβ isINTEGER. The number of rows of the matrix A.M >= 0.Pβ isINTEGER. The number of rows of the matrix B.P >= 0.Nβ isINTEGER. The number of columns of the matrices A and B.N >= 0.Kβ isINTEGER. That's it, she's justINTEGER.Lβ isINTEGER.KandLspecify the subblocks in the input matrices A and B:A23 = A(K+1:MIN(K+L,M),N-L+1:N)andB13 = B(1:L,N-L+1:N)of A and B, whose GSVD is going to be computed byDTGSJA. See Further Details.Aβ isDOUBLE PRECISIONarray, 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β isINTEGER. The leading dimension of the array A.LDA >= max(1,M).Bβ isDOUBLE PRECISIONarray, 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β isINTEGER. The leading dimension of the array B.LDB >= max(1,P).TOLAβ isDOUBLE PRECISION. Simple, iconic, no notes.TOLBβ isDOUBLE PRECISION.TOLAandTOLBare 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)*MAZHEPS,
TOLB = max(P,N)*norm(B)*MAZHEPS.
ALPHAβ isDOUBLE PRECISIONarray, dimension(N).BETAβ isDOUBLE PRECISIONarray, dimension(N). On exit,ALPHAandBETAcontain 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β isDOUBLE PRECISIONarray, dimension(LDU,M). On entry, ifJOBU = 'U',Umust contain a matrixU1(usually the orthogonal matrix returned byDGGSVP). On exit, ifJOBU = 'I',Ucontains the orthogonal matrixU; ifJOBU = 'U',Ucontains the productU1*U. IfJOBU = 'N',Uis not referenced.LDUβ isINTEGER. The leading dimension of the array U.LDU >= max(1,M)ifJOBU = 'U';LDU >= 1otherwise.Vβ isDOUBLE PRECISIONarray, dimension(LDV,P). On entry, ifJOBV = 'V',Vmust contain a matrixV1(usually the orthogonal matrix returned byDGGSVP). On exit, ifJOBV = 'I',Vcontains the orthogonal matrixV; ifJOBV = 'V',Vcontains the productV1*V. IfJOBV = 'N',Vis not referenced.LDVβ isINTEGER. The leading dimension of the array V.LDV >= max(1,P)ifJOBV = 'V';LDV >= 1otherwise.Qβ isDOUBLE PRECISIONarray, dimension(LDQ,N). On entry, ifJOBQ = 'Q',Qmust contain a matrixQ1(usually the orthogonal matrix returned byDGGSVP). On exit, ifJOBQ = 'I',Qcontains the orthogonal matrixQ; ifJOBQ = 'Q',Qcontains the productQ1*Q. IfJOBQ = 'N',Qis not referenced.LDQβ isINTEGER. The leading dimension of the array Q.LDQ >= max(1,N)ifJOBQ = 'Q';LDQ >= 1otherwise.WORKβ isDOUBLE PRECISIONarray, dimension(2*N).NCYCLEβ isINTEGER. The number of cycles required for convergence.INFOβ isINTEGER:= 0: successful exit. π< 0: ifINFO = -i, the i-th argument had an illegal value. π¨= 1: the procedure does not converge afterMAXITcycles. π
π« Internal Parameters π«
MAXIT is INTEGER. MAXIT specifies the total loops that the iterative procedure may take. If after MAXIT cycles, the routine fails to converge, we return INFO = 1.
The original doc block also closes with .fi, so keeping that detail for the completionists: .fi π«Ά
π Author π
These are the legends:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
πΈ Further Details πΈ
okay bestie, hereβs the math tea π β DTGSJA essentially uses a variant of the Kogbetliantz algorithm to reduce the min(L,M-K)-by-L triangular (or trapezoidal) matrix A23 and the L-by-L matrix B13 into this 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. slay π
β¨
Definition at line 375 of file dtgsja.f. π¦
π«Ά Author π«Ά
Generated automatically by Doxygen for LAPACK from the source code. iconic auto-gen behavior fr fr π
π cute sign-off: the footer tea is LAPACK Version 3.12.0, source file /home/abui...RC/dtgsja.f(3) β and no date is listed in that footer line, so weβre not inventing one, periodt. bye bestie, go reduce those matrices πβ¨
π¦ 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