SRC/sorcsd.f(3)
π NAME π
SRC/sorcsd.f is the name, bestie. The manual name is Library Functions Manual, and the page title is SRC/sorcsd.f(3). This is the LAPACK Fortran subroutine sorcsd, living its recursive subroutine life. π«Ά
β¨ SYNOPSIS β¨
π§ Functions/Subroutines
recursive subroutine sorcsd (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)
SORCSD
π Function/Subroutine Documentation π
Full signature, no cap:
recursive subroutine sorcsd (character jobu1, character jobu2, character
jobv1t, character jobv2t, character trans, character signs, integer m,
integer p, integer q, real, dimension( ldx11, * ) x11, integer ldx11,
real, dimension( ldx12, * ) x12, integer ldx12, real, dimension( ldx21,
* ) x21, integer ldx21, real, dimension( ldx22,
* ) x22, integer ldx22, real, dimension( * ) theta, real, dimension(
ldu1, * ) u1, integer ldu1, real, dimension( ldu2, * ) u2, integer ldu2,
real, dimension( ldv1t, * ) v1t, integer ldv1t, real, dimension( ldv2t,
* ) v2t, integer ldv2t, real, dimension( * ) work, integer lwork,
integer, dimension( * ) iwork, integer info)
SORCSD
π― Purpose: π―
Okay so SORCSD computes the CS decomposition of an M-by-M partitioned orthogonal matrix X. The source diagrams it like this, comment markers included because Fortran is gonna Fortran:
!> [ 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 ]
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. 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). π
πΈ Parameters πΈ
JOBU1βJOBU1is CHARACTER.= 'Y':U1is computed; otherwise:U1is not computed.JOBU2βJOBU2is CHARACTER.= 'Y':U2is computed; otherwise:U2is not computed.JOBV1TβJOBV1Tis CHARACTER.= 'Y':V1Tis computed; otherwise:V1Tis not computed.JOBV2TβJOBV2Tis CHARACTER.= 'Y':V2Tis computed; otherwise:V2Tis not computed.TRANSβTRANSis CHARACTER.= 'T':X,U1,U2,V1T, andV2Tare stored in row-major order; otherwise:X,U1,U2,V1T, andV2Tare stored in column-major order.SIGNSβSIGNSis CHARACTER.= 'O': the lower-left block is made nonpositive (the convention); otherwise: the upper-right block is made nonpositive (the convention).MβMis INTEGER. The number of rows and columns inX.PβPis INTEGER. The number of rows inX11andX12.0 <= P <= M.QβQis INTEGER. The number of columns inX11andX21.0 <= Q <= M.X11βX11is REAL array, dimension(LDX11,Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX11βLDX11is INTEGER. The leading dimension ofX11.LDX11 >= MAX(1,P).X12βX12is REAL array, dimension(LDX12,M-Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX12βLDX12is INTEGER. The leading dimension ofX12.LDX12 >= MAX(1,P).X21βX21is REAL array, dimension(LDX21,Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX21βLDX21is INTEGER. The leading dimension ofX11.LDX21 >= MAX(1,M-P). Yes, it literally saysX11there; Iβm preserving the sourceβs exact energy. πX22βX22is REAL array, dimension(LDX22,M-Q). On entry, part of the orthogonal matrix whose CSD is desired.LDX22βLDX22is INTEGER. The leading dimension ofX11.LDX22 >= MAX(1,M-P).THETAβTHETAis REAL array, 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)) ).U1βU1is REAL array, dimension(LDU1,P). IfJOBU1 = 'Y',U1contains the P-by-P orthogonal matrixU1.LDU1βLDU1is INTEGER. The leading dimension ofU1. IfJOBU1 = 'Y',LDU1 >= MAX(1,P).U2βU2is REAL array, dimension(LDU2,M-P). IfJOBU2 = 'Y',U2contains the (M-P)-by-(M-P) orthogonal matrixU2.LDU2βLDU2is INTEGER. The leading dimension ofU2. IfJOBU2 = 'Y',LDU2 >= MAX(1,M-P).V1TβV1Tis REAL array, dimension(LDV1T,Q). IfJOBV1T = 'Y',V1Tcontains the Q-by-Q matrix orthogonal matrixV1**T.LDV1TβLDV1Tis INTEGER. The leading dimension ofV1T. IfJOBV1T = 'Y',LDV1T >= MAX(1,Q).V2TβV2Tis REAL array, dimension(LDV2T,M-Q). IfJOBV2T = 'Y',V2Tcontains the (M-Q)-by-(M-Q) orthogonal matrixV2**T.LDV2TβLDV2Tis INTEGER. The leading dimension ofV2T. IfJOBV2T = 'Y',LDV2T >= MAX(1,M-Q).WORKβWORKis REAL array, 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 nonzeroPHI's.LWORKβLWORKis INTEGER. 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βIWORKis INTEGER array, dimension(M-MIN(P, M-P, Q, M-Q)).INFOβINFOis INTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value.> 0:SBBCSDdid not converge. See the description ofWORKabove for details.
π 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 π
Definition at line 295 of file sorcsd.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
Okay bestie, thatβs the whole page. Footer vibe: LAPACK Version 3.12.0 SRC/sorcsd.f(3) β mwah! πβ¨
π¦ 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