DORCSD(3)
π NAME π
Okay so bestie, buckle up: this is the manual page for /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dorcsd.f β and yes the whole path is literally the name, that's just how it is, no cap. It's living in the Library Functions Manual section (section 3, the "functions" girlies π«Ά).
β¨ SYNOPSIS β¨
π§ Functions/Subroutines
recursive subroutine DORCSD (jobu1, jobu2, jobv1t, jobv2t, trans, signs,
m, p, q, x11, ldx11, x12, ldx12, x21, ldx21, x22, ldx22, theta, u1,
ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, work, lwork, iwork, info)
DORCSD
π Function/Subroutine Documentation π
π DORCSD
recursive subroutine DORCSD (character jobu1, character jobu2, character
jobv1t, character jobv2t, character trans, character signs, integer m,
integer p, integer q, double precision, dimension( ldx11, * ) x11,
integer ldx11, double precision, dimension( ldx12, * ) x12, integer
ldx12, double precision, dimension( ldx21, * ) x21, integer ldx21,
double precision, dimension( ldx22, * ) x22,
integer ldx22, double precision, dimension( * ) theta, double precision,
dimension( ldu1, * ) u1, integer ldu1, double precision, dimension(
ldu2, * ) u2, integer ldu2, double precision, dimension( ldv1t, * ) v1t,
integer ldv1t, double precision, dimension( ldv2t, * ) v2t, integer
ldv2t, double precision, dimension( * ) work, integer lwork, integer,
dimension( * ) iwork, integer info)
DORCSD β she's recursive, she's a subroutine, she's the main character π
π¦ Purpose
Okay so what does she do? DORCSD computes the CS decomposition of an M-by-M partitioned orthogonal matrix X, and honestly the way she does it is iconic:
[ I 0 0 | 0 0 0 ]
[ 0 C 0 | 0 -S 0 ]
[ X11 | X12 ] [ U1 | ] [ 0 0 0 | 0 0 -I ] [ V1 | ]**T
X = [-----------] = [---------] [---------------------] [---------] .
[ X21 | X22 ] [ | U2 ] [ 0 0 0 | I 0 0 ] [ | V2 ]
[ 0 S 0 | 0 C 0 ]
[ 0 0 I | 0 0 0 ]
So X11 is P-by-Q. The orthogonal matrices U1, U2, V1, and V2 are P-by-P, (M-P)-by-(M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively β respectively, bestie, keep up π«Ά. And C and S are R-by-R nonnegative diagonal matrices satisfying C^2 + S^2 = I, where R = MIN(P,M-P,Q,M-Q). Periodt.
πΈ Parameters
JOBU1βJOBU1isCHARACTER.= 'Y': U1 is computed; otherwise: U1 is not computed. πJOBU2βJOBU2isCHARACTER.= 'Y': U2 is computed; otherwise: U2 is not computed.JOBV1TβJOBV1TisCHARACTER.= 'Y': V1T is computed; otherwise: V1T is not computed.JOBV2TβJOBV2TisCHARACTER.= 'Y': V2T is computed; otherwise: V2T is not computed.TRANSβTRANSisCHARACTER.= 'T': X, U1, U2, V1T, and V2T are stored in row-major order; otherwise: X, U1, U2, V1T, and V2T are stored in column-major order. πSIGNSβSIGNSisCHARACTER.= 'O': the lower-left block is made nonpositive (the convention); otherwise: the upper-right block is made nonpositive (the convention). Notice both of those say "the convention" β that's literally what the page says, I'm not editing the lore. πMβMisINTEGER. The number of rows and columns in X.PβPisINTEGER. The number of rows inX11andX12.0 <= P <= M.QβQisINTEGER. The number of columns inX11andX21.0 <= Q <= M.X11βX11isDOUBLE PRECISIONarray, dimension(LDX11,Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX11βLDX11isINTEGER. The leading dimension ofX11.LDX11 >= MAX(1,P).X12βX12isDOUBLE PRECISIONarray, dimension(LDX12,M-Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX12βLDX12isINTEGER. The leading dimension ofX12.LDX12 >= MAX(1,P).X21βX21isDOUBLE PRECISIONarray, dimension(LDX21,Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX21βLDX21isINTEGER. The leading dimension ofX11.LDX21 >= MAX(1,M-P). (Yes, the page says "X11" here β that's what it says, so that's what you get π« .)X22βX22isDOUBLE PRECISIONarray, dimension(LDX22,M-Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX22βLDX22isINTEGER. The leading dimension ofX11.LDX22 >= MAX(1,M-P). (Same deal βX11is what the page says, I don't make the rules π.)THETAβTHETAisDOUBLE PRECISIONarray, dimension(R), in whichR = MIN(P,M-P,Q,M-Q).C = DIAG( COS(THETA(1)), ... , COS(THETA(R)) )andS = DIAG( SIN(THETA(1)), ... , SIN(THETA(R)) ). Trig ate, honestly. πΈU1βU1isDOUBLE PRECISIONarray, dimension(LDU1,P). IfJOBU1 = 'Y',U1contains the P-by-P orthogonal matrixU1.LDU1βLDU1isINTEGER. The leading dimension ofU1. IfJOBU1 = 'Y',LDU1 >= MAX(1,P).U2βU2isDOUBLE PRECISIONarray, dimension(LDU2,M-P). IfJOBU2 = 'Y',U2contains the (M-P)-by-(M-P) orthogonal matrixU2.LDU2βLDU2isINTEGER. The leading dimension ofU2. IfJOBU2 = 'Y',LDU2 >= MAX(1,M-P).V1TβV1TisDOUBLE PRECISIONarray, dimension(LDV1T,Q). IfJOBV1T = 'Y',V1Tcontains the Q-by-Q matrix orthogonal matrixV1**T. ("Q-by-Q matrix orthogonal matrix" β she said it twice, she meant it β¨.)LDV1TβLDV1TisINTEGER. The leading dimension ofV1T. IfJOBV1T = 'Y',LDV1T >= MAX(1,Q).V2TβV2TisDOUBLE PRECISIONarray, dimension(LDV2T,M-Q). IfJOBV2T = 'Y',V2Tcontains the (M-Q)-by-(M-Q) orthogonal matrixV2**T.LDV2TβLDV2TisINTEGER. The leading dimension ofV2T. IfJOBV2T = 'Y',LDV2T >= MAX(1,M-Q).WORKβWORKisDOUBLE PRECISIONarray, 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βLWORKisINTEGER. The dimension of the arrayWORK. 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 the work array, and no error message related toLWORKis issued byXERBLA. πIWORKβIWORKisINTEGERarray, dimension(M-MIN(P, M-P, Q, M-Q)).INFOβINFOisINTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0:DBBCSDdid not converge. See the description ofWORKabove for details. π
Real talk bestie: ifINFO > 0you got aDBBCSDnonconvergence situation, and thePHIvalues chilling inWORK(2:R)are your forensic evidence. Go read theWORKparagraph, fr fr.
π 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 295 of file dorcsd.f.
π«Ά Author π«Ά
Generated automatically by Doxygen for LAPACK from the source code. (Not me, I'm just the hype woman π )
Okay that's the whole thing, bestie β LAPACK, Version 3.12.0, source file /home/abui...RC/dorcsd.f(3), straight from the Library Functions Manual. Slay, go compute your CS decomposition, and remember: C^2 + S^2 = I and so is your worth. π¦β¨π
π¦ 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