SRC/dormbr.f(3)
β¨ SRC/dormbr.f β¨
ok so this is a page from the LAPACK manual (Library Functions Manual, bestie, we're fancy) and it's all about one little subroutine that does some very cool matrix stuff. buckle up π
π¦ SYNOPSIS π¦
Functions/Subroutines
subroutine dormbr (vect, side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)β the whole vibe, right here. this is DORMBR π
πΈ Function/Subroutine Documentation πΈ
subroutine dormbr (character vect, character side, character trans, integer
m, integer n, integer k, double precision, dimension( lda, * ) a,
integer lda, double precision, dimension( * ) tau, double precision,
dimension( ldc, * ) c, integer ldc, double precision, dimension( * )
work, integer lwork, integer info)
DORMBR β say it with me. icon behavior fr fr.
π Purpose π
ok so here's the tea, bestie π
If VECT = 'Q', DORMBR overwrites the general real M-by-N matrix C with:
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * C C * Q
TRANS = 'T': Q**T * C C * Q**T
And if VECT = 'P', DORMBR overwrites that same general real M-by-N matrix C with:
SIDE = 'L' SIDE = 'R'
TRANS = 'N': P * C C * P
TRANS = 'T': P**T * C C * P**T
Here Q and P**T are the orthogonal matrices determined by DGEBRD when reducing a real matrix A to bidiagonal form: A = Q * B * P**T. Q and P**T are defined as products of elementary reflectors H(i) and G(i) respectively. no cap, that's literally the definition π«
Let nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. So nq is the order of the orthogonal matrix Q or P**T that's being applied. main character energy.
If VECT = 'Q', A is assumed to have been an NQ-by-K matrix:
- if
nq >= k,Q = H(1) H(2) . . . H(k); - if
nq < k,Q = H(1) H(2) . . . H(nq-1).
If VECT = 'P', A is assumed to have been a K-by-NQ matrix:
- if
k < nq,P = G(1) G(2) . . . G(k); - if
k >= nq,P = G(1) G(2) . . . G(nq-1).
π₯ Parameters π₯
VECTβVECT is CHARACTER*1. it's giving "pick your fighter" π= 'Q': applyQorQ**T;= 'P': applyPorP**T.
SIDEβSIDE is CHARACTER*1. which side are we coming from, left or right? π«Ά= 'L': applyQ,Q**T,PorP**Tfrom the Left;= 'R': applyQ,Q**T,PorP**Tfrom the Right.
TRANSβTRANS is CHARACTER*1. transpose era or no transpose era π= 'N': No transpose, applyQorP;= 'T': Transpose, applyQ**TorP**T.
MβM is INTEGER. The number of rows of the matrixC.M >= 0.NβN is INTEGER. The number of columns of the matrixC.N >= 0.KβK is INTEGER.K >= 0. and it means different things depending onVECT, so pay attention π- If
VECT = 'Q', the number of columns in the original matrix reduced byDGEBRD. - If
VECT = 'P', the number of rows in the original matrix reduced byDGEBRD.
- If
AβA is DOUBLE PRECISION array, dimension
(LDA,min(nq,K)) if VECT = 'Q'
(LDA,nq) if VECT = 'P'
The vectors which define the elementary reflectors H(i) and G(i), whose products determine the matrices Q and P, as returned by DGEBRD. iconic input, honestly β¨
LDAβLDA is INTEGER. The leading dimension of the arrayA.- If
VECT = 'Q',LDA >= max(1,nq); - if
VECT = 'P',LDA >= max(1,min(nq,K)).
- If
TAUβTAU is DOUBLE PRECISION array, dimension (min(nq,K)).TAU(i)must contain the scalar factor of the elementary reflectorH(i)orG(i)which determinesQorP, as returned byDGEBRDin the array argumentTAUQorTAUP.CβC is DOUBLE PRECISION array, dimension (LDC,N). The star of the show π- On entry, the M-by-N matrix
C. - On exit,
Cis overwritten byQ*CorQ**T*CorC*Q**TorC*QorP*CorP**T*CorC*PorC*P**T. that's a lot of options and we respect every single one.
- On entry, the M-by-N matrix
LDCβLDC is INTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. (yes she reports back, queen behavior π)LWORKβLWORK is INTEGER. The dimension of the arrayWORK.- If
SIDE = 'L',LWORK >= max(1,N); - if
SIDE = 'R',LWORK >= max(1,M). - For optimum performance
LWORK >= N*NBifSIDE = 'L', andLWORK >= M*NBifSIDE = 'R', whereNBis the optimal blocksize. - 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 theWORKarray, and no error message related toLWORKis issued byXERBLA. slick, right? π
- If
INFOβINFO is INTEGER.= 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.
Definition at line 193 of file dormbr.f.
π Author (again, but the auto-generated one) π
Generated automatically by Doxygen for LAPACK from the source code. (she was made by a robot and she's still serving looks, we love to see it π€π )
ok that's the whole page bestie π every flag, every array, every bound check β all of it, preserved, nothing dropped, no cap.
and that's a wrap on LAPACK Version 3.12.0, SRC/dormbr.f(3) β go forth and orthogonalize responsibly π¦π periodt.
π¦ 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