DORBDB(3)
π DORBDB(3) β Library Functions Manual
okay so bestie, this is DORBDB(3) from the Library Functions Manual, and itβs literally the glow-up page for a LAPACK subroutine. No cap, it does a whole simultaneous bidiagonalization and the math is giving main-character energy. π
β¨ NAME β¨
The NAME here is just the source path, and yes, itβs exactly this:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dorbdb.f
π¦ SYNOPSIS π¦
π§ Functions/Subroutines
subroutine DORBDB (trans, signs, m, p, q, x11, ldx11, x12, ldx12, x21,
ldx21, x22, ldx22, theta, phi, taup1, taup2, tauq1, tauq2, work,
lwork, info)
DORBDB
π Function/Subroutine Documentation π
Hereβs the full typed-out signature, bestie β copied exactly so nobody comes for me:
subroutine DORBDB (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( * ) phi, double precision,
dimension( * ) taup1, double precision, dimension( * ) taup2, double
precision, dimension( * ) tauq1, double precision, dimension( * ) tauq2,
double precision, dimension( * ) work, integer lwork, integer info)
DORBDB
π Purpose:
DORBDB simultaneously bidiagonalizes the blocks of an M-by-M partitioned orthogonal matrix X. Itβs giving βone routine, many blocks, all handled.β β¨
Hereβs the exact diagram vibes:
[ B11 | B12 0 0 ]
[ X11 | X12 ] [ P1 | ] [ 0 | 0 -I 0 ] [ Q1 | ]**T
X = [-----------] = [---------] [----------------] [---------] .
[ X21 | X22 ] [ | P2 ] [ B21 | B22 0 0 ] [ | Q2 ]
[ 0 | 0 0 I ]
X11 is P-by-Q. And this is important: Q must be no larger than P, M-P, or M-Q. If thatβs not the case, then X must be transposed and/or permuted. This can be done in constant time using the TRANS and SIGNS options. See DORCSD for details. π
The orthogonal matrices P1, P2, Q1, and Q2 are P-by-P, (M-P)-by-(M-P), Q-by-Q, and (M-Q)-by-(M-Q), respectively. They are represented implicitly by Householder vectors. π«Ά
B11, B12, B21, and B22 are Q-by-Q bidiagonal matrices represented implicitly by angles THETA, PHI. Yes, angles doing the invisible work. Iconic.
πΈ Parameters
TRANSβTRANSisCHARACTER.= 'T':X,U1,U2,V1T, andV2Tare stored in row-major order; otherwise:X,U1,U2,V1T, andV2Tare 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 inX11andX12.0 <= P <= M. β¨QβQisINTEGER. The number of columns inX11andX21.0 <= Q <= MIN(P,M-P,M-Q). π¦X11βX11isDOUBLE PRECISIONarray, dimension(LDX11,Q). On entry, the top-left block of the orthogonal matrix to be reduced. On exit, the form depends onTRANS: IfTRANS = 'N', then the columns oftril(X11)specify reflectors forP1, and the rows oftriu(X11,1)specify reflectors forQ1; elseTRANS = 'T', and the rows oftriu(X11)specify reflectors forP1, and the columns oftril(X11,-1)specify reflectors forQ1. πLDX11βLDX11isINTEGER. The leading dimension ofX11. IfTRANS = 'N', thenLDX11 >= P; elseLDX11 >= Q. πΈX12βX12isDOUBLE PRECISIONarray, dimension(LDX12,M-Q). On entry, the top-right block of the orthogonal matrix to be reduced. On exit, the form depends onTRANS: IfTRANS = 'N', then the rows oftriu(X12)specify the first P reflectors forQ2; elseTRANS = 'T', and the columns oftril(X12)specify the first P reflectors forQ2. β¨LDX12βLDX12isINTEGER. The leading dimension ofX12. IfTRANS = 'N', thenLDX12 >= P; elseLDX11 >= M-Q. (Yep, thatβs exactly what the original says β Iβm not fixing it, bestie. π«Ά)X21βX21isDOUBLE PRECISIONarray, dimension(LDX21,Q). On entry, the bottom-left block of the orthogonal matrix to be reduced. On exit, the form depends onTRANS: IfTRANS = 'N', then the columns oftril(X21)specify reflectors forP2; elseTRANS = 'T', and the rows oftriu(X21)specify reflectors forP2. πLDX21βLDX21isINTEGER. The leading dimension ofX21. IfTRANS = 'N', thenLDX21 >= M-P; elseLDX21 >= Q. πX22βX22isDOUBLE PRECISIONarray, dimension(LDX22,M-Q). On entry, the bottom-right block of the orthogonal matrix to be reduced. On exit, the form depends onTRANS: IfTRANS = 'N', then the rows oftriu(X22(Q+1:M-P,P+1:M-Q))specify the lastM-P-Qreflectors forQ2, elseTRANS = 'T', and the columns oftril(X22(P+1:M-Q,Q+1:M-P))specify the lastM-P-Qreflectors forP2. πLDX22βLDX22isINTEGER. The leading dimension ofX22. IfTRANS = 'N', thenLDX22 >= M-P; elseLDX22 >= M-Q. πTHETAβTHETAisDOUBLE PRECISIONarray, dimension(Q). The entries of the bidiagonal blocksB11,B12,B21,B22can be computed from the anglesTHETAandPHI. See Further Details. βPHIβPHIisDOUBLE PRECISIONarray, dimension(Q-1). The entries of the bidiagonal blocksB11,B12,B21,B22can be computed from the anglesTHETAandPHI. See Further Details. π«TAUP1βTAUP1isDOUBLE PRECISIONarray, dimension(P). The scalar factors of the elementary reflectors that defineP1. π§TAUP2βTAUP2isDOUBLE PRECISIONarray, dimension(M-P). The scalar factors of the elementary reflectors that defineP2. π¦TAUQ1βTAUQ1isDOUBLE PRECISIONarray, dimension(Q). The scalar factors of the elementary reflectors that defineQ1. πΈTAUQ2βTAUQ2isDOUBLE PRECISIONarray, dimension(M-Q). The scalar factors of the elementary reflectors that defineQ2. πWORKβWORKisDOUBLE PRECISIONarray, dimension(LWORK). β¨LWORKβLWORKisINTEGER. The dimension of the arrayWORK.LWORK >= M-Q. 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. πINFOβINFOisINTEGER.= 0: successful exit.< 0: ifINFO = -i, the i-th argument had an illegal value. π₯
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details:
The bidiagonal blocks B11, B12, B21, and B22 are represented implicitly by angles THETA(1), ..., THETA(Q) and PHI(1), ..., PHI(Q-1). B11 and B21 are upper bidiagonal, while B21 and B22 are lower bidiagonal. (The original really says B21 in both spots β Iβm keeping it exactly as-is. π) Every entry in each bidiagonal band is a product of a sine or cosine of a THETA with a sine or cosine of a PHI. See [1] or DORCSD for details. π
P1, P2, Q1, and Q2 are represented as products of elementary reflectors. See DORCSD for details on generating P1, P2, Q1, and Q2 using DORGQR and DORGLQ. π«Ά
π References:
[1] Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.
Definition at line 284 of file dorbdb.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
mwah π β this page is from LAPACK, Version 3.12.0, and the footer tag is /home/abui...RC/dorbdb.f(3). π«Άβ¨
π¦ 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