SRC/dtgsja.f(3)
π SRC/dtgsja.f β DTGSJA π
okay bestie, this is the Library Functions Manual page for SRC/dtgsja.f(3), and the subroutine is DTGSJA. it's giving generalized singular value decomposition and we are seated. π«Άβ¨
πΈ NAME πΈ
SRC/dtgsja.f
π¦ SYNOPSIS π¦
π§ Functions/Subroutines π§
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)
DTGSJA
π Function/Subroutine Documentation π
π«§ subroutine dtgsja π«§
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)
DTGSJA
π― Purpose π―
okay so DTGSJA computes the generalized singular value decomposition (GSVD) of two real upper triangular (or trapezoidal) matrices A and B. yes bestie, two matrices. we're fancy. π
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. got it? good. π«Ά
On exit, the tea is:
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 the so-called βdiagonalβ matrices, with 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. choose your fighter, bestie. β¨
π§© Parameters π§©
JOBU
JOBU is CHARACTER*1.
= '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
JOBV is CHARACTER*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
JOBQ is CHARACTER*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
M is INTEGER. The number of rows of the matrix A. M >= 0.
P
P is INTEGER. The number of rows of the matrix B. P >= 0.
N
N is INTEGER. The number of columns of the matrices A and B. N >= 0.
K
K is INTEGER.
L
L is INTEGER.
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 DTGSJA. See Further Details.
A
A is DOUBLE PRECISION 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
LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
B
B is DOUBLE PRECISION 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
LDB is INTEGER. The leading dimension of the array B. LDB >= max(1,P).
TOLA
TOLA is DOUBLE PRECISION.
TOLB
TOLB is DOUBLE PRECISION.
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)*MAZHEPS,
TOLB = max(P,N)*norm(B)*MAZHEPS.
ALPHA
ALPHA is DOUBLE PRECISION array, dimension (N).
BETA
BETA is DOUBLE PRECISION 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
U is DOUBLE PRECISION array, dimension (LDU,M). On entry, if JOBU = 'U', U must contain a matrix U1 (usually the orthogonal matrix returned by DGGSVP). On exit, if JOBU = 'I', U contains the orthogonal matrix U; if JOBU = 'U', U contains the product U1*U. If JOBU = 'N', U is not referenced.
LDU
LDU is INTEGER. The leading dimension of the array U. LDU >= max(1,M) if JOBU = 'U'; LDU >= 1 otherwise.
V
V is DOUBLE PRECISION array, dimension (LDV,P). On entry, if JOBV = 'V', V must contain a matrix V1 (usually the orthogonal matrix returned by DGGSVP). On exit, if JOBV = 'I', V contains the orthogonal matrix V; if JOBV = 'V', V contains the product V1*V. If JOBV = 'N', V is not referenced.
LDV
LDV is INTEGER. The leading dimension of the array V. LDV >= max(1,P) if JOBV = 'V'; LDV >= 1 otherwise.
Q
Q is DOUBLE PRECISION array, dimension (LDQ,N). On entry, if JOBQ = 'Q', Q must contain a matrix Q1 (usually the orthogonal matrix returned by DGGSVP). On exit, if JOBQ = 'I', Q contains the orthogonal matrix Q; if JOBQ = 'Q', Q contains the product Q1*Q. If JOBQ = 'N', Q is not referenced.
LDQ
LDQ is INTEGER. The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ = 'Q'; LDQ >= 1 otherwise.
WORK
WORK is DOUBLE PRECISION array, dimension (2*N).
NCYCLE
NCYCLE is INTEGER. The number of cycles required for convergence.
INFO
INFO is INTEGER.
= 0: successful exit< 0: ifINFO = -i, thei-th argument had an illegal value.= 1: the procedure does not converge afterMAXITcycles.
π§ Internal Parameters π§
the source has a little =================== underline under this one, and then the MAXIT tea:
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.
Also the raw comment block has a tiny .fi at the end β yes, really: .fi. π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Further Details π
okay so bestie, here's the actual math part β DTGSJA 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 this form:
U1**T *A13*Q1 = C1*R1; V1**T *B13*Q1 = S1*R1,
where U1, V1 and Q1 are orthogonal matrices, and Z**T is the transpose of Z (just so we're clear β¨). C1 and S1 are diagonal matrices satisfying:
C1**2 + S1**2 = I,
and R1 is an L-by-L nonsingular upper triangular matrix. iconic behavior, honestly π
.
Definition at line 375 of file dtgsja.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code. (the robots wrote this one, not me, but I support them π«Ά)
and that's the tea β β this page is from LAPACK Version 3.12.0, file SRC/dtgsja.f(3). slay. π
π¦ 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