SORCSD2BY1(3)
β¨ SORCSD2BY1(3) β¨
okay so bestie, this is a page from the Library Functions Manual β and the file it's documenting lives at /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sorcsd2by1.f. Yes that's a whole journey. Anyway, let's get into it π
π¦ SYNOPSIS
Functions/Subroutines
subroutine SORCSD2BY1 β and here's the whole squad of arguments, no cap:
subroutine SORCSD2BY1 (jobu1, jobu2, jobv1t, m, p, q, x11, ldx11, x21,
ldx21, theta, u1, ldu1, u2, ldu2, v1t, ldv1t, work, lwork, iwork,
info)
SORCSD2BY1
π Function/Subroutine Documentation
subroutine SORCSD2BY1
here's the full signature with the types laid out, literally every single one:
subroutine SORCSD2BY1 (character jobu1, character jobu2, character jobv1t,
integer m, integer p, integer q, real, dimension(ldx11,*) x11, integer
ldx11, real, dimension(ldx21,*) x21, integer ldx21, real, dimension(*)
theta, real, dimension(ldu1,*) u1, integer ldu1, real, dimension(ldu2,*)
u2, integer ldu2, real, dimension(ldv1t,*) v1t, integer ldv1t, real,
dimension(*) work, integer lwork, integer, dimension(*) iwork, integer
info)
SORCSD2BY1
π Purpose:
SORCSD2BY1 computes the CS decomposition of an M-by-Q matrix X with orthonormal columns that has been partitioned into a 2-by-1 block structure:
[ I1 0 0 ]
[ 0 C 0 ]
[ X11 ] [ U1 | ] [ 0 0 0 ]
X = [-----] = [---------] [----------] V1**T .
[ X21 ] [ | U2 ] [ 0 0 0 ]
[ 0 S 0 ]
[ 0 0 I2]
X11 is P-by-Q. The orthogonal matrices U1, U2, and V1 are P-by-P, (M-P)-by-(M-P), and Q-by-Q, respectively. C and S are R-by-R nonnegative diagonal matrices satisfying C^2 + S^2 = I, in which R = MIN(P,M-P,Q,M-Q). I1 is a K1-by-K1 identity matrix and I2 is a K2-by-K2 identity matrix, where K1 = MAX(Q+P-M,0), K2 = MAX(Q-P,0).
like... the way that diagram just sits there being all orthonormal π iconic.
π§ Parameters
JOBU1β this one's aCHARACTER, okay?= 'Y': U1 is computed;- otherwise: U1 is not computed.
JOBU2β alsoCHARACTER:= 'Y': U2 is computed;- otherwise: U2 is not computed.
JOBV1Tβ yep,CHARACTERagain:= 'Y': V1T is computed;- otherwise: V1T is not computed.
MβINTEGER. The number of rows in X.PβINTEGER. The number of rows in X11.0 <= P <= M.QβINTEGER. The number of columns in X11 and X21.0 <= Q <= M.X11βREALarray, dimension(LDX11,Q). On entry, part of the orthogonal matrix whose CSD is desired. it's giving "half the main character" β¨LDX11βINTEGER. The leading dimension of X11.LDX11 >= MAX(1,P).X21βREALarray, dimension(LDX21,Q). On entry, part of the orthogonal matrix whose CSD is desired. the other half π«ΆLDX21βINTEGER. The leading dimension of X21.LDX21 >= MAX(1,M-P).THETAβREALarray, dimension(R), in whichR = MIN(P,M-P,Q,M-Q). And then:U1βREALarray, dimension(P). IfJOBU1 = 'Y', U1 contains the P-by-P orthogonal matrix U1.LDU1βINTEGER. The leading dimension of U1. IfJOBU1 = 'Y',LDU1 >= MAX(1,P).U2βREALarray, dimension(M-P). IfJOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) orthogonal matrix U2.LDU2βINTEGER. The leading dimension of U2. IfJOBU2 = 'Y',LDU2 >= MAX(1,M-P).V1TβREALarray, dimension(Q). IfJOBV1T = 'Y', V1T contains the Q-by-Q matrix orthogonal matrix V1**T. (that's what the page says, bestie β "matrix orthogonal matrix", she said it twice for emphasis π)LDV1TβINTEGER. The leading dimension of V1T. IfJOBV1T = 'Y',LDV1T >= MAX(1,Q).WORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. IfINFO > 0on exit,WORK(2:R)contains the valuesPHI(1), ..., PHI(R-1)that, together withTHETA(1), ..., THETA(R), define the matrix in intermediate bidiagonal-block form remaining after nonconvergence.INFOspecifies the number of nonzero PHI's.LWORKβINTEGER. The dimension of the arrayWORK.- If
LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of the work array, and no error message related toLWORKis issued byXERBLA. lowkey a freebie, we love a query mode π
- If
IWORKβINTEGERarray, dimension(M-MIN(P,M-P,Q,M-Q)).INFOβINTEGER:= 0: successful exit. slay π< 0: ifINFO = -i, the i-th argument had an illegal value.> 0:SBBCSDdid not converge. See the description ofWORKabove for details. π
heads up bestie:INFO > 0is the nonconvergence case, and the leftover info you need is stashed inWORKβ don't skip that part.
π References:
[1] Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 230 of file sorcsd2by1.f.
β Author
Generated automatically by Doxygen for LAPACK from the source code.
and that's the whole page, fr fr. this little gem comes to you courtesy of LAPACK, Version 3.12.0 β mwah, take care of her ππ¦πΈ
π¦ 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