ggsvd3(3)
π NAME
okay so this is ggsvd3(3) from the Library Functions Manual, and the NAME line is literally ggsvd3 - ggsvd3: SVD, QR iteration β so yeah, bestie, itβs giving SVD and QR iteration energy. β¨
πΈ SYNOPSIS
β¨ Functions
Hereβs the function lineup, no cap:
cggsvd3 β CGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices, fr fr. Signature:
subroutine cggsvd3 (jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb,
alpha, beta, u, ldu, v, ldv, q, ldq, work, lwork, rwork, iwork,
info)
dggsvd3 β DGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices. Signature:
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)
sggsvd3 β SGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices. Signature:
subroutine sggsvd3 (jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb,
alpha, beta, u, ldu, v, ldv, q, ldq, work, lwork, iwork, info)
zggsvd3 β ZGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices. Signature:
subroutine zggsvd3 (jobu, jobv, jobq, m, n, p, k, l, a, lda, b, ldb,
alpha, beta, u, ldu, v, ldv, q, ldq, work, lwork, rwork, iwork,
info)
π¦ Detailed Description
okay so this is where the actual function documentation starts, and weβre kicking it off with the complex single-precision queen, cggsvd3. π
π Function Documentation
π subroutine cggsvd3
and yes, CGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices β itβs giving main character energy. π
subroutine cggsvd3 (character jobu, character jobv, character jobq, integer
m, integer n, integer p, integer k, integer l, complex, dimension( lda,
* ) a, integer lda, complex, dimension( ldb, * ) b, integer ldb, real,
dimension( * ) alpha, real, dimension( * ) beta, complex, dimension(
ldu, * ) u, integer ldu, complex, dimension( ldv, * ) v, integer ldv,
complex, dimension( ldq, * ) q, integer ldq, complex, dimension( * )
work, integer lwork, real, dimension( * ) rwork, integer, dimension( * )
iwork, integer info)
Purpose:
bestie, hereβs the whole purpose, and itβs a lot but weβre gonna get through it together π«Ά CGGSVD3 computes the generalized singular value decomposition (GSVD) of an M-by-N complex matrix A and P-by-N complex matrix B:
U**H*A*Q = D1*( 0 R ), V**H*B*Q = D2*( 0 R )
where U, V and Q are unitary matrices. Let K+L = the effective numerical rank of the matrix (A**H,B**H)**H, 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.
So the routine computes C, S, R, and optionally the unitary transformation matrices U, V and Q β slay. π
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**H.
If ( A**H,B**H)**H 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**H*A x = lambda* B**H*B x.
In some literature, the GSVD of A and B is presented in the form
U**H*A*X = ( 0 D1 ), V**H*B*X = ( 0 D2 )
where U and V are orthogonal and X is nonsingular, and 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
okay here come the parameters, and yes, there are a lot β but every single one matters, bestie. π
JOBUβJOBUisCHARACTER*1;= 'U':Unitary matrix U is computed;= 'N':U is not computed. πJOBVβJOBVisCHARACTER*1;= 'V':Unitary matrix V is computed;= 'N':V is not computed.JOBQβJOBQisCHARACTER*1;= 'Q':Unitary matrix Q is computed;= 'N':Q is not computed.MβMisINTEGER; the number of rows of the matrix A.M >= 0.NβNisINTEGER; the number of columns of the matrices A and B.N >= 0.PβPisINTEGER; the number of rows of the matrix B.P >= 0.KβKisINTEGER.LβLisINTEGER. On exit, K and L specify the dimension of the subblocks described in Purpose.K + L = effective numerical rank of (A**H,B**H)**H.AβAisCOMPLEXarray, 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βLDAisINTEGER; the leading dimension of the array A.LDA >= max(1,M).BβBisCOMPLEXarray, dimension (LDB,N). On entry, the P-by-N matrix B. On exit, B contains part of the triangular matrix R ifM-K-L < 0. See Purpose for details.LDBβLDBisINTEGER; the leading dimension of the array B.LDB >= max(1,P).ALPHAβALPHAisREALarray, dimension (N).BETAβBETAisREALarray, 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) = 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βUisCOMPLEXarray, dimension (LDU,M). IfJOBU = 'U', U contains the M-by-M unitary matrix 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βVisCOMPLEXarray, dimension (LDV,P). IfJOBV = 'V', V contains the P-by-P unitary matrix 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βQisCOMPLEXarray, dimension (LDQ,N). IfJOBQ = 'Q', Q contains the N-by-N unitary matrix 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βWORKisCOMPLEXarray, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER; the dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA.RWORKβRWORKisREALarray, dimension (2*N).IWORKβIWORKisINTEGERarray, dimension (N). On exit,IWORKstores the sorting information. More precisely, the following loop will sortALPHA
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βINFOisINTEGER;= 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 subroutineCTGSJA.
Internal Parameters:
TOLAβREALTOLBβREAL
TOLA and TOLB are the thresholds to determine the effective rank of (A**H,B**H)**H. 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
CGGSVD3 replaces the deprecated subroutine CGGSVD. periodt β bestie, use the new one, the old one is deprecated for a reason π
Definition at line 351 of file cggsvd3.f.
π subroutine dggsvd3
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. okay bestie, it's giving generalized-SVD main character energy β¨
π Purpose
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. like, it does the whole glow-up and lets you choose which transformation receipts you want back π
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βCHARACTER*1= 'U': orthogonal matrix U is computed;= 'N': U is not computed.
JOBVβCHARACTER*1= 'V': orthogonal matrix V is computed;= 'N': V is not computed.
JOBQβCHARACTER*1= 'Q': orthogonal matrix Q is computed;= 'N': Q is not computed.
MβINTEGER; the number of rows of matrix A.M >= 0.NβINTEGER; the number of columns of matrices A and B.N >= 0.PβINTEGER; the number of rows of matrix B.P >= 0.KβINTEGER.LβINTEGER. On exit,KandLspecify the dimension of the subblocks described in Purpose.K + L = effective numerical rank of (A**T,B**T)**T.AβDOUBLE PRECISIONarray, 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βINTEGER; the leading dimension of the array A.LDA >= max(1,M).BβDOUBLE PRECISIONarray, 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βINTEGER; the leading dimension of the array B.LDB >= max(1,P).ALPHAβDOUBLE PRECISIONarray, dimension(N).BETAβDOUBLE 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) = 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βDOUBLE PRECISIONarray, dimension(LDU,M). IfJOBU = 'U', U contains the M-by-M orthogonal matrix U. IfJOBU = 'N', U is not referenced.LDUβINTEGER; the leading dimension of the array U.LDU >= max(1,M)ifJOBU = 'U';LDU >= 1otherwise.VβDOUBLE PRECISIONarray, dimension(LDV,P). IfJOBV = 'V', V contains the P-by-P orthogonal matrix V. IfJOBV = 'N', V is not referenced.LDVβINTEGER; the leading dimension of the array V.LDV >= max(1,P)ifJOBV = 'V';LDV >= 1otherwise.QβDOUBLE PRECISIONarray, dimension(LDQ,N). IfJOBQ = 'Q', Q contains the N-by-N orthogonal matrix Q. IfJOBQ = 'N', Q is not referenced.LDQβINTEGER; the leading dimension of the array Q.LDQ >= max(1,N)ifJOBQ = 'Q';LDQ >= 1otherwise.WORKβDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER; the dimension of the array WORK.LWORK >= 1. IfLWORK = -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 toLWORKis issued byXERBLA.IWORKβINTEGERarray, dimension(N). On exit,IWORKstores the sorting information. More precisely, the following loop will sortALPHA:
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β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**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. so yeah, these thresholds are not just cute little numbers, they matter π«Ά
π 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
DGGSVD3 replaces the deprecated subroutine DGGSVD. no cap, leave the deprecated one in the past where it belongs π
Definition at line 346 of file dggsvd3.f.
π¦ subroutine sggsvd3
subroutine sggsvd3 (character jobu, character jobv, character jobq, integer
m, integer n, integer p, integer k, integer l, real, dimension( lda, * )
a, integer lda, real, dimension( ldb, * ) b, integer ldb, 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
lwork, integer, dimension( * ) iwork, integer info)
SGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices. same GSVD energy, but make it single precision πΈ
π Purpose
okay so the math keeps going and itβs lowkey iconic, bestie β hereβs the whole GSVD structure laid out exactly:
SGGSVD3 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) ).
thatβs the whole mathematical situation, and itβs giving main character energy π₯ now the parameters, because bestie you need every single one:
πΈ Parameters πΈ
JOBUβJOBU is CHARACTER*1; itβs the flag that says whether U gets computed.= 'U': Orthogonal matrix U is computed;= 'N': U is not computed.
JOBVβJOBV is CHARACTER*1; itβs the flag that says whether V gets computed.= 'V': Orthogonal matrix V is computed;= 'N': V is not computed.
JOBQβJOBQ is CHARACTER*1; itβs the flag that says whether Q gets computed.= '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 INTEGERLβ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 REAL 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 REAL array, dimension (LDB,N)
On entry, the P-by-N matrix B. On exit, B contains the triangular matrix R if M-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 REAL array, dimension (N)BETAβBETA is REAL 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) = 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 REAL array, dimension (LDU,M)
If JOBU = 'U', U contains the M-by-M orthogonal matrix 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 REAL array, dimension (LDV,P)
If JOBV = 'V', V contains the P-by-P orthogonal matrix 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 REAL array, dimension (LDQ,N)
If JOBQ = 'Q', Q contains the N-by-N orthogonal matrix 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 REAL array, dimension (MAX(1,LWORK))
On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
LWORKβLWORK is INTEGER
The dimension of the array WORK. LWORK >= 1.
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: if INFO = -i, the i-th argument had an illegal value.> 0: if INFO = 1, the Jacobi-type procedure failed to converge. For further details, see subroutine STGSJA.
π Internal Parameters π
TOLAβREALTOLBβREAL
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: π
SGGSVD3 replaces the deprecated subroutine SGGSVD.
Definition at line 346 of file sggsvd3.f.
π¦ subroutine zggsvd3 π¦
subroutine zggsvd3 (character jobu, character jobv, character jobq, integer
m, integer n, integer p, integer k, integer l, complex*16, dimension(
lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b, integer ldb,
double precision, dimension( * ) alpha, double precision, dimension( * )
beta, complex*16, dimension( ldu, * ) u, integer ldu, complex*16,
dimension( ldv, * ) v, integer ldv, complex*16, dimension( ldq, * ) q,
integer ldq, complex*16, dimension( * ) work, integer lwork, double
precision, dimension( * ) rwork, integer, dimension( * ) iwork, integer
info)
ZGGSVD3 computes the singular value decomposition (SVD) for OTHER matrices
π― Purpose: π―
β¨ PARAMETERS β¨
okay bestie, this is the part where every single argument gets its moment π no skipping, no summarizing, we're doing the whole roster. π«Ά
JOBUβ it'sCHARACTER*1, and the vibe is:'U'means the unitary matrixUis computed;'N'meansUis not computed. π¦JOBVβ alsoCHARACTER*1:'V'means the unitary matrixVis computed;'N'meansVis not computed. β¨JOBQβCHARACTER*1again:'Q'means the unitary matrixQis computed;'N'meansQis not computed. πMβINTEGER. The number of rows of the matrixA.M >= 0. π₯NβINTEGER. The number of columns of the matricesAandB.N >= 0. πΈPβINTEGER. The number of rows of the matrixB.P >= 0. πKβINTEGER. πLβINTEGER. On exit,KandLspecify the dimension of the subblocks described in Purpose.K + L= effective numerical rank of(A**H,B**H)**H. πAβCOMPLEX*16 array, dimension (LDA,N). On entry, theM-by-NmatrixA. On exit,Acontains the triangular matrixR, or part ofR. See Purpose for details. π§LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M). βBβCOMPLEX*16 array, dimension (LDB,N). On entry, theP-by-NmatrixB. On exit,Bcontains part of the triangular matrixRifM-K-L < 0. See Purpose for details. πLDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,P). πALPHAβDOUBLE PRECISION array, dimension (N). πBETAβDOUBLE PRECISION array, dimension (N). On exit,ALPHAandBETAcontain the generalized singular value pairs ofAandB: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)=0BETA(K+1:M) =S, BETA(M+1:K+L) =1
- and
ALPHA(K+L+1:N) = 0BETA(K+L+1:N) = 0no cap, that's the whole mapping π
UβCOMPLEX*16 array, dimension (LDU,M). IfJOBU = 'U',Ucontains theM-by-Munitary matrixU. IfJOBU = 'N',Uis not referenced. π¦LDUβINTEGER. The leading dimension of the arrayU.LDU >= max(1,M)ifJOBU = 'U';LDU >= 1otherwise. β¨VβCOMPLEX*16 array, dimension (LDV,P). IfJOBV = 'V',Vcontains theP-by-Punitary matrixV. IfJOBV = 'N',Vis not referenced. πLDVβINTEGER. The leading dimension of the arrayV.LDV >= max(1,P)ifJOBV = 'V';LDV >= 1otherwise. π₯QβCOMPLEX*16 array, dimension (LDQ,N). IfJOBQ = 'Q',Qcontains theN-by-Nunitary matrixQ. IfJOBQ = 'N',Qis not referenced. πΈLDQβINTEGER. The leading dimension of the arrayQ.LDQ >= max(1,N)ifJOBQ = 'Q';LDQ >= 1otherwise. πWORKβCOMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. πLWORKβINTEGER. The dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued byXERBLA. πRWORKβDOUBLE PRECISION array, dimension (2*N). π§IWORKβINTEGER array, dimension (N). On exit,IWORKstores the sorting information. More precisely, the following loop will sortALPHA:
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βINTEGER. Here's the status tea:= 0: successful exit. π< 0: ifINFO = -i, thei-th argument had an illegal value. π> 0: ifINFO = 1, the Jacobi-type procedure failed to converge. For further details, see subroutineZTGSJA. π
β¨ INTERNAL PARAMETERS β¨
TOLAβDOUBLE PRECISION. πTOLBβDOUBLE PRECISION.TOLAandTOLBare the thresholds to determine the effective rank of(A**H,B**H)**H. 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 β¨
ZGGSVD3 replaces the deprecated subroutine ZGGSVD. π«‘ (yes bestie, deprecated means it's the old one β use the new one, periodt.)
oh and btw, this whole thing is defined at line 350 of file zggsvd3.f. π§
and that's the whole page, bestie π
β¨ the footer is giving LAPACK Version 3.12.0 on the ggsvd3(3) page, and it was generated automatically by Doxygen for LAPACK from the source code. no date on this one, just version energy. periodt. ππ«Ά
π¦ 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