tpmlqt(3)
tpmlqt(3) β Library Functions Manual π¦β¨
okay so bestie, welcome to tpmlqt(3), the manual page that's literally all about applying Q. This is part 1 of 3, and we're covering ctpmlqt and dtpmlqt today. No cap, it's giving linear algebra realness. π
NAME
tpmlqt β tpmlqt: applies Q. That's it. That's the whole name. Periodt. π
SYNOPSIS β¨
Functions
ctpmlqt
subroutine ctpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
b, ldb, work, info)
CTPMLQT π«Ά
dtpmlqt
subroutine dtpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
b, ldb, work, info)
DTPMLQT π
stpmlqt
subroutine stpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
b, ldb, work, info)
STPMLQT πΈ
ztpmlqt
subroutine ztpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
b, ldb, work, info)
ZTPMLQT β
Detailed Description
(okay so this section is literally empty in the original β no tea here, moving on to the function docs π)
Function Documentation
ctpmlqt β CTPMLQT π¦
subroutine ctpmlqt (character side, character trans, integer m, integer n,
integer k, integer l, integer mb, complex, dimension( ldv, * ) v,
integer ldv, complex, dimension( ldt, * ) t, integer ldt, complex,
dimension( lda, * ) a, integer lda, complex, dimension( ldb, * ) b,
integer ldb, complex, dimension( * ) work, integer info)
CTPMLQT
Purpose:
okay so CTPMLQT applies a complex unitary matrix Q obtained from a complex block reflector H to a general complex matrix C, which consists of two blocks A and B. That's the whole vibe. π
Parameters:
SIDEβCHARACTER*1tells you which side Q is applied from:'L': apply Q or Q**H from the Left;'R': apply Q or Q**H from the Right.
TRANSβCHARACTER*1'N': No transpose, apply Q;'C': Conjugate transpose, apply Q**H.
MβINTEGERThe number of rows of the matrix B.M >= 0.NβINTEGERThe number of columns of the matrix B.N >= 0.KβINTEGERThe number of elementary reflectors whose product defines the matrix Q.LβINTEGERThe order of the trapezoidal part of V.K >= L >= 0. See Further Details.MBβINTEGERThe block size used for the storage of T.K >= MB >= 1. This must be the same value of MB used to generate T inCTPLQT.VβCOMPLEX array, dimension (LDV,K)The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned byCTPLQTin B. See Further Details.LDVβINTEGERThe leading dimension of the array V.LDV >= K.TβCOMPLEX array, dimension (LDT,K)The upper triangular factors of the block reflectors as returned byCTPLQT, stored as a MB-by-K matrix.LDTβINTEGERThe leading dimension of the array T.LDT >= MB.AβCOMPLEX array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or QH*C or C*Q or C*QH. See Further Details.LDAβINTEGERThe leading dimension of the array A. If SIDE = 'L',LDA >= max(1,K); If SIDE = 'R',LDA >= max(1,M).BβCOMPLEX array, dimension (LDB,N)On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or QH*C or C*Q or C*QH. See Further Details.LDBβINTEGERThe leading dimension of the array B.LDB >= max(1,M).WORKβCOMPLEX arrayThe dimension of WORK isN*MBif SIDE = 'L', orM*MBif SIDE = 'R'.INFOβINTEGER= 0: successful exit< 0: if INFO = -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:
okay so the columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a trapezoidal block V2:
V = [V1] [V2].
The size of the trapezoidal block V2 is determined by the parameter L, where 0 <= L <= K; V2 is lower trapezoidal, consisting of the first L rows of a K-by-K upper triangular matrix. If L=K, V2 is lower triangular; if L=0, there is no trapezoidal block, hence V = V1 is rectangular.
If SIDE = 'L': C = [A] where A is K-by-N, B is M-by-N and V is K-by-M.
[B]
If SIDE = 'R': C = [A B] where A is M-by-K, B is M-by-N and V is K-by-N.
The complex unitary matrix Q is formed from V and T.
If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C.
If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H.
Definition at line 197 of file ctpmlqt.f.
dtpmlqt β DTPMLQT π
subroutine dtpmlqt (character side, character trans, integer m, integer n,
integer k, integer l, integer mb, double precision, dimension( ldv, * )
v, integer ldv, double precision, dimension( ldt, * ) t, integer ldt,
double precision, dimension( lda, * ) a, integer lda, double precision,
dimension( ldb, * ) b, integer ldb, double precision, dimension( * )
work, integer info)
DTPMLQT
Purpose:
okay so the original says (and yes it literally says DTPMQRT, not DTPMLQT β we don't make the rules, bestie) β DTPMQRT applies a real orthogonal matrix Q obtained from a real block reflector H to a general real matrix C, which consists of two blocks A and B.
Parameters:
SIDEβCHARACTER*1tells you which side Q is applied from:'L': apply Q or Q**T from the Left;'R': apply Q or Q**T from the Right.
TRANSβCHARACTER*1'N': No transpose, apply Q;'T': Transpose, apply Q**T.
MβINTEGERThe number of rows of the matrix B.M >= 0.NβINTEGERThe number of columns of the matrix B.N >= 0.KβINTEGERThe number of elementary reflectors whose product defines the matrix Q.LβINTEGERThe order of the trapezoidal part of V.K >= L >= 0. See Further Details.MBβINTEGERThe block size used for the storage of T.K >= MB >= 1. This must be the same value of MB used to generate T inDTPLQT.VβDOUBLE PRECISION array, dimension (LDV,K)The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned byDTPLQTin B. See Further Details.LDVβINTEGERThe leading dimension of the array V.LDV >= K.TβDOUBLE PRECISION array, dimension (LDT,K)The upper triangular factors of the block reflectors as returned byDTPLQT, stored as a MB-by-K matrix.LDTβINTEGERThe leading dimension of the array T.LDT >= MB.AβDOUBLE PRECISION array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or QT*C or C*Q or C*QT. See Further Details.LDAβINTEGERThe leading dimension of the array A. If SIDE = 'L',LDA >= max(1,K); If SIDE = 'R',LDA >= max(1,M).BβDOUBLE PRECISION array, dimension (LDB,N)On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or QT*C or C*Q or C*QT. See Further Details.LDBβINTEGERThe leading dimension of the array B.LDB >= max(1,M).WORKβDOUBLE PRECISION arrayThe dimension of WORK isN*MBif SIDE = 'L', orM*MBif SIDE = 'R'.INFOβINTEGER= 0: successful exit< 0: if INFO = -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:
(and that's where part 1 ends, bestie β part 2 is coming with stpmlqt and ztpmlqt, so don't go anywhere π)
Okay so real talk: the columns of that pentagonal matrix V? They contain the elementary reflectors H(1), H(2), ..., H(K). And V is literally composed of a rectangular block V1 and a trapezoidal block V2, like:
V = [V1] [V2].
The size of that trapezoidal block V2? Itβs totally determined by the parameter L, where 0 <= L <= K. V2 is lower trapezoidal β itβs made of the first L rows of a K-by-K upper triangular matrix. If L=K, then V2 is lower triangular; if L=0, thereβs no trapezoidal block at all, so V = V1 and itβs just rectangular. Periodt. π
Now check the SIDE vibes:
If SIDE = 'L': C = [A] where A is K-by-N, B is M-by-N and V is K-by-M.
[B]
If SIDE = 'R': C = [A B] where A is M-by-K, B is M-by-N and V is K-by-N.
The real orthogonal matrix Q is formed from V and T.
- If
TRANS='N'andSIDE='L',Cis on exit replaced withQ * C. - If
TRANS='T'andSIDE='L',Cis on exit replaced withQ**T * C. - If
TRANS='N'andSIDE='R',Cis on exit replaced withC * Q. - If
TRANS='T'andSIDE='R',Cis on exit replaced withC * Q**T.
Definition at line 212 of file dtpmlqt.f.
β¨ subroutine stpmlqt β¨
subroutine stpmlqt (character side, character trans, integer m, integer n,
integer k, integer l, integer mb, real, dimension( ldv, * ) v, integer
ldv, real, dimension( ldt, * ) t, integer ldt, real, dimension( lda, * )
a, integer lda, real, dimension( ldb, * ) b, integer ldb, real,
dimension( * ) work, integer info)
STPMLQT
π― Purpose
Bestie, STPMLQT applies a real orthogonal matrix Q obtained from a real block reflector H to a general real matrix C, which consists of two blocks A and B. Thatβs the whole vibe. π«Ά
πΈ Parameters
SIDEβCHARACTER*1.= 'L': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right.TRANSβCHARACTER*1.= 'N': No transpose, applyQ;= 'T': Transpose, applyQ**T.MβINTEGER. The number of rows of the matrixB.M >= 0.NβINTEGER. The number of columns of the matrixB.N >= 0.KβINTEGER. The number of elementary reflectors whose product defines the matrixQ.LβINTEGER. The order of the trapezoidal part ofV.K >= L >= 0. See Further Details.MBβINTEGER. The block size used for the storage ofT.K >= MB >= 1. This must be the same value ofMBused to generateTinSTPLQT.VβREAL array, dimension (LDV,K). Thei-th row must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned bySTPLQTinB. See Further Details.LDVβINTEGER. The leading dimension of the arrayV.LDV >= K.TβREAL array, dimension (LDT,K). The upper triangular factors of the block reflectors as returned bySTPLQT, stored as aMB-by-Kmatrix.LDTβINTEGER. The leading dimension of the arrayT.LDT >= MB.AβREAL array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'. On entry, theK-by-NorM-by-KmatrixA. On exit,Ais overwritten by the corresponding block ofQ*CorQ**T*CorC*QorC*Q**T. See Further Details.LDAβINTEGER. The leading dimension of the arrayA. IfSIDE = 'L',LDA >= max(1,K); IfSIDE = 'R',LDA >= max(1,M).BβREAL array, dimension (LDB,N). On entry, theM-by-NmatrixB. On exit,Bis overwritten by the corresponding block ofQ*CorQ**T*CorC*QorC*Q**T. See Further Details.LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,M).WORKβREAL array. The dimension ofWORKisN*MBifSIDE = 'L', orM*MBifSIDE = 'R'.INFOβINTEGER.= 0: successful exit;< 0: ifINFO = -i, thei-th argument had an illegal value.
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π¦ Further Details
Okay so real talk: the columns of that pentagonal matrix V? They contain the elementary reflectors H(1), H(2), ..., H(K). And V is literally composed of a rectangular block V1 and a trapezoidal block V2, like:
V = [V1] [V2].
The size of that trapezoidal block V2? Itβs totally determined by the parameter L, where 0 <= L <= K. V2 is lower trapezoidal β itβs made of the first L rows of a K-by-K upper triangular matrix. If L=K, then V2 is lower triangular; if L=0, thereβs no trapezoidal block at all, so V = V1 and itβs just rectangular. Periodt. π
Now check the SIDE vibes:
If SIDE = 'L': C = [A] where A is K-by-N, B is M-by-N and V is K-by-M.
[B]
If SIDE = 'R': C = [A B] where A is M-by-K, B is M-by-N and V is K-by-N.
The real orthogonal matrix Q is formed from V and T.
- If
TRANS='N'andSIDE='L',Cis on exit replaced withQ * C. - If
TRANS='T'andSIDE='L',Cis on exit replaced withQ**T * C. - If
TRANS='N'andSIDE='R',Cis on exit replaced withC * Q. - If
TRANS='T'andSIDE='R',Cis on exit replaced withC * Q**T.
Definition at line 212 of file stpmlqt.f.
β¨ subroutine ztpmlqt β¨
subroutine ztpmlqt (character side, character trans, integer m, integer n,
integer k, integer l, integer mb, complex*16, dimension( ldv, * ) v,
integer ldv, complex*16, dimension( ldt, * ) t, integer ldt, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b,
integer ldb, complex*16, dimension( * ) work, integer info)
ZTPMLQT
π― Purpose
ZTPMLQT applies a complex unitary matrix Q obtained from a complex block reflector H to a general complex matrix C, which consists of two blocks A and B. Itβs giving main character energy for complex matrices. π
π Parameters
SIDEβCHARACTER*1.= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right.TRANSβCHARACTER*1.= 'N': No transpose, applyQ;= 'C': Conjugate transpose, applyQ**H.MβINTEGER. The number of rows of the matrixB.M >= 0.NβINTEGER. The number of columns of the matrixB.N >= 0.KβINTEGER. The number of elementary reflectors whose product defines the matrixQ.LβINTEGER. The order of the trapezoidal part ofV.K >= L >= 0. See Further Details.MBβINTEGER. The block size used for the storage ofT.K >= MB >= 1. This must be the same value ofMBused to generateTinZTPLQT.VβCOMPLEX*16 array, dimension (LDV,K). Thei-th row must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned byZTPLQTinB. See Further Details.LDVβINTEGER. The leading dimension of the arrayV.LDV >= K.TβCOMPLEX*16 array, dimension (LDT,K). The upper triangular factors of the block reflectors as returned byZTPLQT, stored as aMB-by-Kmatrix.LDTβINTEGER. The leading dimension of the arrayT.LDT >= MB.AβCOMPLEX*16 array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'. On entry, theK-by-NorM-by-KmatrixA. On exit,Ais overwritten by the corresponding block ofQ*CorQ**H*CorC*QorC*Q**H. See Further Details.LDAβINTEGER. The leading dimension of the arrayA. IfSIDE = 'L',LDA >= max(1,K); IfSIDE = 'R',LDA >= max(1,M).BβCOMPLEX*16 array, dimension (LDB,N). On entry, theM-by-NmatrixB. On exit,Bis overwritten by the corresponding block ofQ*CorQ**H*CorC*QorC*Q**H. See Further Details.LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,M).WORKβCOMPLEX*16 array. The dimension ofWORKisN*MBifSIDE = 'L', orM*MBifSIDE = 'R'.INFOβINTEGER.= 0: successful exit;< 0: ifINFO = -i, thei-th argument had an illegal value.
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π§ Further Details
Okay so the columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a trapezoidal block V2:
V = [V1] [V2].
Not me being obsessed with a matrix that's literally two blocks in a trench coat π
The size of the trapezoidal block V2 is determined by the parameter L, where 0 <= L <= K; V2 is lower trapezoidal, consisting of the first L rows of a K-by-K upper triangular matrix. If L=K, V2 is lower triangular; if L=0, there is no trapezoidal block, hence V = V1 is rectangular.
tl;dr bestie:Lis the slider. Max it out (L=K) andV2goes full lower triangular β¨; zero it out (L=0) and the trapezoidal block just does not exist, soV = V1and it's plain rectangular. The range is0 <= L <= K, no exceptions, no vibes-based values π
Then the shapes kick in, and honestly it's giving choose your own adventure π¦
If SIDE = 'L': C gets stacked like this, where A is K-by-N, B is M-by-N and V is K-by-M:
If SIDE = 'L': C = [A] where A is K-by-N, B is M-by-N and V is K-by-M.
[B]
If SIDE = 'R': now it's side-by-side instead, where A is M-by-K, B is M-by-N and V is K-by-N:
If SIDE = 'R': C = [A B] where A is M-by-K, B is M-by-N and V is K-by-N.
The complex unitary matrix Q is formed from V and T. That's the whole glow-up right there π V and T walk in, Q walks out.
And then depending on your TRANS + SIDE combo, C gets replaced on exit like so β four flavours, one icon π:
- If
TRANS='N'andSIDE='L',Cis on exit replaced withQ * C. - If
TRANS='C'andSIDE='L',Cis on exit replaced withQ**H * C. - If
TRANS='N'andSIDE='R',Cis on exit replaced withC * Q. - If
TRANS='C'andSIDE='R',Cis on exit replaced withC * Q**H.
note the**Hbestie π«Ά β theTRANS='C'cases are the conjugate-transpose girlies, not a copy-paste typo, iykyk.
Definition at line 212 of file ztpmlqt.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code.
Not a human author, not a ghostwriter β literally a doc generator doing its little thing and honestly? it ate. β¨
π and that's the whole page, bestie π
This lil masterpiece is LAPACK Version 3.12.0, living at tpmlqt(3) β go forth, call it correctly, and may your L always be in range ππ¦πΈπ
π¦ 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