/home/abui...D/dggsvd.f(3)
okay so welcome to /home/abui...D/dggsvd.f(3), bestie β this is the Library Functions Manual page for dggsvd.f, and it is deprecated but iconic. π
π NAME π
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/DEPRECATED/dggsvd.f
π¦ SYNOPSIS π¦
π§ Functions/Subroutines π§
okay so the function list has one main character, and it is literally:
subroutine DGGSVD (jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb,
alpha, beta, u, ldu, v, ldv, q, ldq, work, iwork, info)
DGGSVD computes the singular value decomposition (SVD) for OTHER
matrices
and the one-line summary is literally: DGGSVD computes the singular value decomposition (SVD) for OTHER matrices β yes, all-caps OTHER, we do not question the source, iykyk. π
π Function/Subroutine Documentation π
here is the full signature, no cap:
subroutine DGGSVD (character jobu, character jobv, character jobq, integer
m, integer n, integer p, integer k, integer l, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( ldb, *
) b, integer ldb, 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, dimension( * ) iwork, integer info)
and the summary comes back like: DGGSVD computes the singular value decomposition (SVD) for OTHER matrices. slay. π
π― Purpose π―
π¨ Deprecated alert, bestie: this routine is deprecated and has been replaced by routine DGGSVD3. keep that in mind, fr fr.
DGGSVD computes the generalized singular value decomposition (GSVD) of an M-by-N real matrix A and P-by-N real matrix B:
U**T*A*Q = D1*( 0 R ), V**T*B*Q = D2*( 0 R )
where U, V and Q are orthogonal matrices.
Let K+L = the effective numerical rank of the matrix (A**T,B**T)**T, then R is a K+L-by-K+L nonsingular upper triangular matrix, D1 and D2 are M-by-(K+L) and P-by-(K+L) matrices and of the following structures, respectively:
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 )
L ( 0 0 R22 )
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
(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 routine computes C, S, R, and optionally the orthogonal transformation matrices U, V and Q.
In particular, if B is an N-by-N nonsingular matrix, then the GSVD of A and B implicitly gives the SVD of A*inv(B):
A*inv(B) = U*(D1*inv(D2))*V**T.
If ( A**T,B**T)**T has orthonormal columns, then the GSVD of A and B is also equal to the CS decomposition of A and B. Furthermore, the GSVD can be used to derive the solution of the eigenvalue problem:
A**T*A x = lambda* B**T*B x.
In some literature, the GSVD of A and B is presented in the form
U**T*A*X = ( 0 D1 ), V**T*B*X = ( 0 D2 )
where U and V are orthogonal and X is nonsingular, D1 and D2 are ``diagonal''. The former GSVD form can be converted to the latter form by taking the nonsingular matrix X as
X = Q*( I 0 )
( 0 inv(R) ).
πΈ Parameters πΈ
JOBUβJOBU is CHARACTER*1;= 'U': orthogonal matrix U is computed;= 'N': U is not computed. πJOBVβJOBV is CHARACTER*1;= 'V': orthogonal matrix V is computed;= 'N': V is not computed.JOBQβJOBQ is CHARACTER*1;= 'Q': orthogonal matrix Q is computed;= 'N': Q is not computed.MβM is INTEGER; the number of rows of the matrix A.M >= 0.NβN is INTEGER; the number of columns of the matrices A and B.N >= 0.PβP is INTEGER; the number of rows of the matrix B.P >= 0.KβK is INTEGER. that's the whole line, bestie, no extra description in the source. π«ΆLβL is INTEGER. On exit, K and L specify the dimension of the subblocks described in Purpose.K + L = effective numerical rank of (A**T,B**T)**T.AβA is DOUBLE PRECISION array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit, A 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, B contains the triangular matrix R ifM-K-L < 0. See Purpose for details.LDBβLDB is INTEGER; the leading dimension of the array B.LDB >= max(1,P).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 ifM-K-L >= 0,ALPHA(K+1:K+L) = C,BETA(K+1:K+L) = S, or ifM-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, andALPHA(K+L+1:N) = 0,BETA(K+L+1:N) = 0.UβU is DOUBLE PRECISION array, dimension (LDU,M). IfJOBU = 'U', U contains the M-by-M orthogonal matrix U. IfJOBU = 'N', U is not referenced.LDUβLDU is INTEGER; the leading dimension of the array U.LDU >= max(1,M)ifJOBU = 'U';LDU >= 1otherwise.VβV is DOUBLE PRECISION array, dimension (LDV,P). IfJOBV = 'V', V contains the P-by-P orthogonal matrix V. IfJOBV = 'N', V is not referenced.LDVβLDV is INTEGER; the leading dimension of the array V.LDV >= max(1,P)ifJOBV = 'V';LDV >= 1otherwise.QβQ is DOUBLE PRECISION array, dimension (LDQ,N). IfJOBQ = 'Q', Q contains the N-by-N orthogonal matrix Q. IfJOBQ = 'N', Q is not referenced.LDQβLDQ is INTEGER; the leading dimension of the array Q.LDQ >= max(1,N)ifJOBQ = 'Q';LDQ >= 1otherwise.WORKβWORK is DOUBLE PRECISION array, dimension (max(3*N,M,P)+N).IWORKβIWORK is INTEGER array, dimension (N). On exit, IWORK stores the sorting information. More precisely, the following loop will sort ALPHA:
for I = K+1, min(M,K+L)
swap ALPHA(I) and ALPHA(IWORK(I))
endfor
such that ALPHA(1) >= ALPHA(2) >= ... >= ALPHA(N).
INFOβINFO is INTEGER;= 0: successful exit;< 0: ifINFO = -i, the i-th argument had an illegal value;> 0: ifINFO = 1, the Jacobi-type procedure failed to converge. For further details, see subroutineDTGSJA.
π₯ Internal Parameters π₯
TOLAβDOUBLE PRECISIONTOLBβDOUBLE PRECISION
TOLA and TOLB are the thresholds to determine the effective rank of (A',B')**T. Generally, they are set to
TOLA = MAX(M,N)*norm(A)*MAZHEPS,
TOLB = MAX(P,N)*norm(B)*MAZHEPS.
The size of TOLA and TOLB may affect the size of backward errors of the decomposition.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Contributors: π
Ming Gu and Huan Ren, Computer Science Division, University of California at Berkeley, USA.
Definition at line 331 of file dggsvd.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
bye bestie π β the footer on your copy of /home/abui...D/dggsvd.f(3) is giving LAPACK Version 3.12.0 plus its date, and this page was generated automatically by Doxygen for LAPACK from the source code. 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