SRC/cuncsd.f(3)
π NAME
SRC/cuncsd.f β okay bestie, this is the manual page for the CUNCSD routine, and it's living in the Library Functions Manual. It's giving LAPACK main character energy. π¦
β¨ SYNOPSIS
π Functions/Subroutines
recursive subroutine cuncsd (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, rwork, lrwork,
iwork, info)
CUNCSD β that's the whole synopsis vibe. Slay.
π¦ Function/Subroutine Documentation
Here's the full typed-out signature, copied exactly because we do not mess with the source, periodt:
recursive subroutine cuncsd (character jobu1, character jobu2, character
jobv1t, character jobv2t, character trans, character signs, integer m,
integer p, integer q, complex, dimension( ldx11, * ) x11, integer ldx11,
complex, dimension( ldx12, * ) x12, integer ldx12, complex, dimension(
ldx21, * ) x21, integer ldx21, complex, dimension( ldx22,
* ) x22, integer ldx22, real, dimension( * ) theta, complex, dimension(
ldu1, * ) u1, integer ldu1, complex, dimension( ldu2, * ) u2, integer
ldu2, complex, dimension( ldv1t, * ) v1t, integer ldv1t, complex,
dimension( ldv2t, * ) v2t, integer ldv2t, complex, dimension( * ) work,
integer lwork, real, dimension( * ) rwork, integer lrwork, integer,
dimension( * ) iwork, integer info)
CUNCSD
π Purpose
Okay so CUNCSD computes the CS decomposition of an M-by-M partitioned unitary matrix X, and the diagram is literally this:
[ I 0 0 | 0 0 0 ]
[ 0 C 0 | 0 -S 0 ]
[ X11 | X12 ] [ U1 | ] [ 0 0 0 | 0 0 -I ] [ V1 | ]**H
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 unitary 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). Iconic. β¨
πΈ Parameters
Every single argument, no skipping, bestie. π
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).MβMisINTEGER. The number of rows and columns in X.PβPisINTEGER. The number of rows in X11 and X12.0 <= P <= M.QβQisINTEGER. The number of columns in X11 and X21.0 <= Q <= M.X11βX11isCOMPLEXarray, dimension(LDX11,Q). On entry, part of the unitary matrix whose CSD is desired.LDX11βLDX11isINTEGER. The leading dimension of X11.LDX11 >= MAX(1,P).X12βX12isCOMPLEXarray, dimension(LDX12,M-Q). On entry, part of the unitary matrix whose CSD is desired.LDX12βLDX12isINTEGER. The leading dimension of X12.LDX12 >= MAX(1,P).X21βX21isCOMPLEXarray, dimension(LDX21,Q). On entry, part of the unitary matrix whose CSD is desired.LDX21βLDX21isINTEGER. The leading dimension of X11.LDX21 >= MAX(1,M-P). (Yep, the manual says X11 right there β we're just reporting it, no cap.)X22βX22isCOMPLEXarray, dimension(LDX22,M-Q). On entry, part of the unitary matrix whose CSD is desired.LDX22βLDX22isINTEGER. The leading dimension of X11.LDX22 >= MAX(1,M-P). (Same energy β it says X11 again.)THETAβTHETAisREALarray, 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βU1isCOMPLEXarray, dimension(LDU1,P). IfJOBU1 = 'Y', U1 contains the P-by-P unitary matrix U1.LDU1βLDU1isINTEGER. The leading dimension of U1. IfJOBU1 = 'Y',LDU1 >= MAX(1,P).U2βU2isCOMPLEXarray, dimension(LDU2,M-P). IfJOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) unitary matrix U2.LDU2βLDU2isINTEGER. The leading dimension of U2. IfJOBU2 = 'Y',LDU2 >= MAX(1,M-P).V1TβV1TisCOMPLEXarray, dimension(LDV1T,Q). IfJOBV1T = 'Y', V1T contains the Q-by-Q matrix unitary matrixV1**H.LDV1TβLDV1TisINTEGER. The leading dimension of V1T. IfJOBV1T = 'Y',LDV1T >= MAX(1,Q).V2TβV2TisCOMPLEXarray, dimension(LDV2T,M-Q). IfJOBV2T = 'Y', V2T contains the (M-Q)-by-(M-Q) unitary matrixV2**H.LDV2TβLDV2TisINTEGER. The leading dimension of V2T. IfJOBV2T = 'Y',LDV2T >= MAX(1,M-Q).WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.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.RWORKβRWORKisREALarray, dimensionMAX(1,LRWORK). On exit, ifINFO = 0,RWORK(1)returns the optimalLRWORK. IfINFO > 0on exit,RWORK(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.LRWORKβLRWORKisINTEGER. The dimension of the arrayRWORK. IfLRWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theRWORKarray, returns this value as the first entry of the work array, and no error message related toLRWORKis 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:CBBCSDdid not converge. See the description ofRWORKabove for details.
β References
- [1] Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.
Citation ate, no crumbs. π
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 314 of file cuncsd.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
That's the whole page, bestie. Footer stamp: LAPACK, Version 3.12.0, SRC/cuncsd.f(3) β that's the source/version/page info, and there's no separate date line printed on this one, so that's the full flex. Go compute something iconic. π
β¨π«Ά
π¦ 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