unmtr(3)
π unmtr(3) β Library Functions Manual
okay so bestie, welcome to unmtr(3) β this is the man page for the {un,or}mtr family, which is literally the "multiply by Q from hetrd" gang. yes, that's a lowercase hetrd in the literal title, we don't ask questions, we just vibe π
β¨ NAME β¨
unmtr β {un,or}mtr: multiply by Q from hetrd
like, it's giving "I built you a Q, now let me use it" energy π
πΈ SYNOPSIS πΈ
π«Ά Functions
subroutine cunmtr (side, uplo, trans, m, n, a, lda, tau, c, ldc, work,
lwork, info)
CUNMTR (the complex one, bestie π)
subroutine dormtr (side, uplo, trans, m, n, a, lda, tau, c, ldc, work,
lwork, info)
DORMTR (double precision real, double the precision, double the slay π )
subroutine sormtr (side, uplo, trans, m, n, a, lda, tau, c, ldc, work,
lwork, info)
SORMTR (single precision real, small but mighty β¨)
subroutine zunmtr (side, uplo, trans, m, n, a, lda, tau, c, ldc, work,
lwork, info)
ZUNMTR (double complex β Z, as in Z-list, as in main character energy π)
Detailed Description
so this page is the Function Documentation for all four of these routines. they're four flavors of the exact same move, just in different precisions. pick the one that matches your data type and go off π¦
π₯ Function Documentation π₯
π subroutine cunmtr
subroutine cunmtr (character side, character uplo, character trans, integer
m, integer n, complex, dimension( lda, * ) a, integer lda, complex,
dimension( * ) tau, complex, dimension( ldc, * ) c, integer ldc,
complex, dimension( * ) work, integer lwork, integer info)
CUNMTR β the complex unitary legend π«
π Purpose
!> !>CUNMTRoverwrites the general complex M-by-N matrix C with !> !>SIDE = 'L'SIDE = 'R'!>TRANS = 'N':Q * CC * Q!>TRANS = 'C':Q**H * CC * Q**H!> !> where Q is a complex unitary matrix of order nq, with nq = m if !>SIDE = 'L'and nq = n ifSIDE = 'R'. Q is defined as the product of !> nq-1 elementary reflectors, as returned byCHETRD: !> !> ifUPLO = 'U', Q = H(nq-1) . . . H(2) H(1); !> !> ifUPLO = 'L', Q = H(1) H(2) . . . H(nq-1). !>
like, C is so getting overwritten. it's not a suggestion, it's a lifestyle π
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**H from the Left;= 'R': apply Q or Q**H from the Right.
UPLOβUPLOisCHARACTER*1= 'U': Upper triangle of A contains elementary reflectors fromCHETRD;= 'L': Lower triangle of A contains elementary reflectors fromCHETRD.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'C': Conjugate transpose, apply Q**H.
MβMisINTEGERthe number of rows of the matrix C.M >= 0.NβNisINTEGERthe number of columns of the matrix C.N >= 0.AβAisCOMPLEXarray, dimension
(LDA,M) if SIDE = 'L'
(LDA,N) if SIDE = 'R'
the vectors which define the elementary reflectors, as returned by CHETRD.
LDAβLDAisINTEGERthe leading dimension of the array A.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisCOMPLEXarray, dimension
(M-1) if SIDE = 'L'
(N-1) if SIDE = 'R'
TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by CHETRD.
CβCisCOMPLEXarray, dimension(LDC,N)on entry, the M-by-N matrix C. on exit, C is overwritten byQ*CorQ**H*CorC*Q**HorC*Q.LDCβLDCisINTEGERthe leading dimension of the array C.LDC >= max(1,M).WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK))on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGERthe dimension of the array WORK. ifSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). for optimum performanceLWORK >= N*NBifSIDE = 'L', andLWORK >= M*NBifSIDE = 'R', where NB is the optimal blocksize.
ifLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related toLWORKis issued byXERBLA. (iconic behavior honestly β ask me my size and I'll tell you, no notes π«Ά)
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.
Definition at line 170 of file cunmtr.f.
π¦ subroutine dormtr
subroutine dormtr (character side, character uplo, character trans, integer
m, integer n, 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)
DORMTR β the double precision real orthogonal one, she's precise and she knows it π
π Purpose
!> !>DORMTRoverwrites the general real M-by-N matrix C with !> !>SIDE = 'L'SIDE = 'R'!>TRANS = 'N':Q * CC * Q!>TRANS = 'T':Q**T * CC * Q**T!> !> where Q is a real orthogonal matrix of order nq, with nq = m if !>SIDE = 'L'and nq = n ifSIDE = 'R'. Q is defined as the product of !> nq-1 elementary reflectors, as returned byDSYTRD: !> !> ifUPLO = 'U', Q = H(nq-1) . . . H(2) H(1); !> !> ifUPLO = 'L', Q = H(1) H(2) . . . H(nq-1). !>
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**T from the Left;= 'R': apply Q or Q**T from the Right.
UPLOβUPLOisCHARACTER*1= 'U': Upper triangle of A contains elementary reflectors fromDSYTRD;= 'L': Lower triangle of A contains elementary reflectors fromDSYTRD.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'T': Transpose, apply Q**T.
note bestie:'T'here, not'C'β real matrices don't need conjugating, that's a complex-girl thing π
MβMisINTEGERthe number of rows of the matrix C.M >= 0.NβNisINTEGERthe number of columns of the matrix C.N >= 0.AβAisDOUBLE PRECISIONarray, dimension
(LDA,M) if SIDE = 'L'
(LDA,N) if SIDE = 'R'
the vectors which define the elementary reflectors, as returned by DSYTRD.
LDAβLDAisINTEGERthe leading dimension of the array A.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisDOUBLE PRECISIONarray, dimension
(M-1) if SIDE = 'L'
(N-1) if SIDE = 'R'
TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by DSYTRD.
CβCisDOUBLE PRECISIONarray, dimension(LDC,N)on entry, the M-by-N matrix C. on exit, C is overwritten byQ*CorQ**T*CorC*Q**TorC*Q.LDCβLDCisINTEGERthe leading dimension of the array C.LDC >= max(1,M).WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK))on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGERthe dimension of the array WORK. ifSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). for optimum performanceLWORK >= N*NBifSIDE = 'L', andLWORK >= M*NBifSIDE = 'R', where NB is the optimal blocksize.
ifLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, 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.
Definition at line 169 of file dormtr.f.
πΈ subroutine sormtr
subroutine sormtr (character side, character uplo, character trans, integer
m, integer n, real, dimension( lda, * ) a, integer lda, real, dimension(
* ) tau, real, dimension( ldc, * ) c, integer ldc, real, dimension( * )
work, integer lwork, integer info)
SORMTR β single precision real, tiny but she ate π₯
π Purpose
!> !>SORMTRoverwrites the general real M-by-N matrix C with !> !>SIDE = 'L'SIDE = 'R'!>TRANS = 'N':Q * CC * Q!>TRANS = 'T':Q**T * CC * Q**T!> !> where Q is a real orthogonal matrix of order nq, with nq = m if !>SIDE = 'L'and nq = n ifSIDE = 'R'. Q is defined as the product of !> nq-1 elementary reflectors, as returned bySSYTRD: !> !> ifUPLO = 'U', Q = H(nq-1) . . . H(2) H(1); !> !> ifUPLO = 'L', Q = H(1) H(2) . . . H(nq-1). !>
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**T from the Left;= 'R': apply Q or Q**T from the Right.
UPLOβUPLOisCHARACTER*1= 'U': Upper triangle of A contains elementary reflectors fromSSYTRD;= 'L': Lower triangle of A contains elementary reflectors fromSSYTRD.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'T': Transpose, apply Q**T.
MβMisINTEGERthe number of rows of the matrix C.M >= 0.NβNisINTEGERthe number of columns of the matrix C.N >= 0.AβAisREALarray, dimension
(LDA,M) if SIDE = 'L'
(LDA,N) if SIDE = 'R'
the vectors which define the elementary reflectors, as returned by SSYTRD.
Okay so we're still deep in SORMTR's parameter list β picking up at A because that's where this part starts, and yes bestie we're finishing every last one π
AβAisREALarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The vectors which define the elementary reflectors, as returned bySSYTRD.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisREALarray, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned bySSYTRD.CβCisREALarray, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q.LDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORKisREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK. IfSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). For optimum performanceLWORK >= N*NBifSIDE = 'L', andLWORK >= M*NBifSIDE = 'R', whereNBis the optimal blocksize.
And the special case, bestie: if LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
INFOβINFOisINTEGER.= 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.
Definition at line 170 of file sormtr.f.
π§ subroutine zunmtr β the complex sibling, and she's iconic
subroutine zunmtr (character side, character uplo, character trans, integer
m, integer n, complex*16, dimension( lda, * ) a, integer lda,
complex*16, dimension( * ) tau, complex*16, dimension( ldc, * ) c,
integer ldc, complex*16, dimension( * ) work, integer lwork, integer
info)
ZUNMTR β okay so this one is the COMPLEX*16 version, and here's the glow-up:
π― Purpose
ZUNMTR overwrites the general complex M-by-N matrix C with
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * C C * Q
TRANS = 'C': Q**H * C C * Q**H
where Q is a complex unitary matrix of order nq, with nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of nq-1 elementary reflectors, as returned by ZHETRD:
- if
UPLO = 'U',Q = H(nq-1) . . . H(2) H(1); - if
UPLO = 'L',Q = H(1) H(2) . . . H(nq-1).
πΈ Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right.UPLOβUPLOisCHARACTER*1.= 'U': Upper triangle ofAcontains elementary reflectors fromZHETRD;= 'L': Lower triangle ofAcontains elementary reflectors fromZHETRD.TRANSβTRANSisCHARACTER*1.= 'N': No transpose, applyQ;= 'C': Conjugate transpose, applyQ**H.MβMisINTEGER. The number of rows of the matrixC.M >= 0.NβNisINTEGER. The number of columns of the matrixC.N >= 0.AβAisCOMPLEX*16array, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The vectors which define the elementary reflectors, as returned byZHETRD.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisCOMPLEX*16array, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZHETRD.CβCisCOMPLEX*16array, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q.LDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORKisCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK. IfSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). For optimum performanceLWORK >= 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 the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
INFOβINFOisINTEGER.= 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.
Definition at line 169 of file zunmtr.f.
π«Ά Author
Generated automatically by Doxygen for LAPACK from the source code.
And that's a wrap on unmtr(3) from LAPACK Version 3.12.0 β generated straight from the source code by Doxygen, no cap. Bye bestie, go slay those reflectors πβ¨π
π¦ 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