/home/abui.../dggsvd3.f(3)
π DGGSVD3 β LAPACK Library Functions Manual π
okay so bestie, welcome to the LAPACK Library Functions Manual page for /home/abui.../dggsvd3.f(3). This is the full DGGSVD3 lore, and we are keeping every technical crumb. No cap. π
πΈ NAME πΈ
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dggsvd3.f
β¨ SYNOPSIS β¨
π§ Functions/Subroutines
subroutine DGGSVD3 (jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb,
alpha, beta, u, ldu, v, ldv, q, ldq, work, lwork, iwork, info)
DGGSVD3 computes the singular value decomposition (SVD) for OTHER
matrices
The one-liner is literally: DGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices.
π Function/Subroutine Documentation π
subroutine DGGSVD3 (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 lwork, integer, dimension( * ) iwork,
integer info)
DGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices
π― Purpose:
Hereβs the exact math tea, character-for-character β yes, including the !> source-comment crumbs, because we keep every single detail:
!>
!> DGGSVD3 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.
!>
!> (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 note for K, bestie β no extra guesses. π«Ά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,ALPHAandBETAcontain the generalized singular value pairs of A and B. The exact exit values are:
ALPHA(1:K) = 1,
BETA(1:K) = 0,
and if M-K-L >= 0,
ALPHA(K+1:K+L) = C,
BETA(K+1:K+L) = 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
and
ALPHA(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(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. πΈLWORKβLWORK is INTEGER. The dimension of the array WORK.
If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. π¦
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 subroutine DTGSJA. π₯
π§ͺ Internal Parameters:
TOLAβDOUBLE PRECISIONTOLBβDOUBLE PRECISION
TOLA and TOLB are the thresholds to determine the effective rank of (A**T,B**T)**T. Generally, they are set to:
TOLA = MAX(M,N)*norm(A)*MACHEPS,
TOLB = MAX(P,N)*norm(B)*MACHEPS.
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. π
π₯ Further Details:
π¨ deprecated alert:DGGSVD3replaces the deprecated subroutineDGGSVD.
Definition at line 346 of file dggsvd3.f. π
π Author
Generated automatically by Doxygen for LAPACK from the source code.
mwah π cute little sign-off: this page is from LAPACK Version 3.12.0, page /home/abui.../dggsvd3.f(3) β bye bestie, go slay those matrices! 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