unmhr(3)
π
unmhr(3) β straight out of the Library Functions Manual π
okay so bestie, buckle up π this is the page for unmhr, and it's a whole family situation β four routines, all of them doing the same iconic little dance: you've got a matrix C, you've got a Q that came out of gehrd, and these functions multiply them together. slay. let's go πΈ
πΈ NAME πΈ
unmhr β {un,or}mhr: multiply by Q from gehrd
β¨ SYNOPSIS β¨
π¦ Functions
CUNMHRβ the complex one π
subroutine cunmhr (side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc,
work, lwork, info)
DORMHRβ the double precision one π
subroutine dormhr (side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc,
work, lwork, info)
SORMHRβ the single precision one π©·
subroutine sormhr (side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc,
work, lwork, info)
ZUNMHRβ the double complex one π
subroutine zunmhr (side, trans, m, n, ilo, ihi, a, lda, tau, c, ldc,
work, lwork, info)
π Detailed Description π
this bit is literally just the section header, no cap β all the actual content lives down in Function Documentation, so keep scrolling bestie π«Ά
π« Function Documentation π«
π¦ cunmhr β aka CUNMHR
subroutine cunmhr (character side, character trans, integer m, integer n,
integer ilo, integer ihi, complex, dimension( lda, * ) a, integer lda,
complex, dimension( * ) tau, complex, dimension( ldc, * ) c, integer
ldc, complex, dimension( * ) work, integer lwork, integer info)
π Purpose
okay so CUNMHR overwrites the general complex M-by-N matrix C with... and here's the vibe table, look at it, it's giving options β¨
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 IHI-ILO elementary reflectors, as returned by CGEHRD:
Q = H(ilo) H(ilo+1) . . . H(ihi-1).
β¨ Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right. pick your fighter πTRANSβTRANSisCHARACTER*1.= 'N': applyQ(No transpose);= 'C': applyQ**H(Conjugate transpose). note the'C'here β complex routines get the conjugate, that's the whole point bestie πMβMisINTEGER. The number of rows of the matrixC.M >= 0. yes the bound is real, respect it πNβNisINTEGER. The number of columns of the matrixC.N >= 0.ILOβILOisINTEGER. that's it, that's the whole description, it's a shy icon πIHIβIHIisINTEGER.
okay so this one is important, listen up π₯ ILO and IHI must have the same values as in the previous call of CGEHRD. Q is equal to the unit matrix except in the submatrix Q(ilo+1:ihi,ilo+1:ihi).
If SIDE = 'L', then 1 <= ILO <= IHI <= M, if M > 0, and ILO = 1 and IHI = 0, if M = 0;
if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and ILO = 1 and IHI = 0, if N = 0.
(yes the ILO = 1, IHI = 0 edge case for a zero-size thing is real, don't come for me π)
AβAisCOMPLEXarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The vectors which define the elementary reflectors, as returned byCGEHRD. it's the receipts from your earlierCGEHRDcall, basically π§ΎLDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisCOMPLEXarray, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byCGEHRD.CβCisCOMPLEXarray, dimension(LDC,N). On entry, the M-by-N matrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q. she gets rewritten, that's the whole gig π«LDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. free real estate info, we love her πLWORKβLWORKisINTEGER. The dimension of the arrayWORK.
If SIDE = 'L', LWORK >= max(1,N); if SIDE = 'R', LWORK >= max(1,M).
For optimum performance LWORK >= N*NB if SIDE = 'L', and LWORK >= M*NB if SIDE = 'R', where NB is 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. so -1 is the "just tell me the size bestie" mode, iconic π§
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 177 of file cunmhr.f.
π dormhr β aka DORMHR
subroutine dormhr (character side, character trans, integer m, integer n,
integer ilo, integer ihi, 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)
π Purpose
DORMHR overwrites the general real M-by-N matrix C with... same energy, real numbers this time, here's the table πΈ
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * C C * Q
TRANS = 'T': Q**T * C C * Q**T
where Q is a real orthogonal matrix of order nq, with nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of IHI-ILO elementary reflectors, as returned by DGEHRD:
Q = H(ilo) H(ilo+1) . . . H(ihi-1).
β¨ Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right.TRANSβTRANSisCHARACTER*1.= 'N': No transpose, applyQ;= 'T': Transpose, applyQ**T. (see how it's'T'and not'C'? real routines don't conjugate, that's the difference, iykyk π )MβMisINTEGER. The number of rows of the matrixC.M >= 0.NβNisINTEGER. The number of columns of the matrixC.N >= 0.ILOβILOisINTEGER.IHIβIHIisINTEGER.
ILO and IHI must have the same values as in the previous call of DGEHRD. Q is equal to the unit matrix except in the submatrix Q(ilo+1:ihi,ilo+1:ihi).
If SIDE = 'L', then 1 <= ILO <= IHI <= M, if M > 0, and ILO = 1 and IHI = 0, if M = 0;
if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and ILO = 1 and IHI = 0, if N = 0.
AβAisDOUBLE PRECISIONarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The vectors which define the elementary reflectors, as returned byDGEHRD.LDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβTAUisDOUBLE PRECISIONarray, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byDGEHRD.CβCisDOUBLE PRECISIONarray, dimension(LDC,N). On entry, the M-by-N matrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q.LDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. The dimension of the arrayWORK.
If SIDE = 'L', LWORK >= max(1,N); if SIDE = 'R', LWORK >= max(1,M).
For optimum performance LWORK >= N*NB if SIDE = 'L', and LWORK >= M*NB if SIDE = 'R', where NB is 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, 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 176 of file dormhr.f.
π©· sormhr β aka SORMHR
subroutine sormhr (character side, character trans, integer m, integer n,
integer ilo, integer ihi, real, dimension( lda, * ) a, integer lda,
real, dimension( * ) tau, real, dimension( ldc, * ) c, integer ldc,
real, dimension( * ) work, integer lwork, integer info)
π Purpose
SORMHR overwrites the general real M-by-N matrix C with... yep, the single-precision sibling, same table, same slay π
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * C C * Q
TRANS = 'T': Q**T * C C * Q**T
where Q is a real orthogonal matrix of order nq, with nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of IHI-ILO elementary reflectors, as returned by SGEHRD:
Q = H(ilo) H(ilo+1) . . . H(ihi-1).
β¨ Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right.TRANSβTRANSisCHARACTER*1.= 'N': No transpose, applyQ;= 'T': Transpose, applyQ**T.MβMisINTEGER. The number of rows of the matrixC.M >= 0.
bestie the page literally cuts off right as we hitNβ part 2 has the rest ofSORMHRand the wholeZUNMHRsection, don't go anywhere π«Ά
N is INTEGER β the number of columns of the matrix C. N >= 0. β¨ No negative column counts allowed, bestie, we don't do that here.
ILOβ isINTEGER.IHIβ isINTEGER.ILOandIHImust have the same values as in the previous call ofSGEHRD.Qis equal to the unit matrix except in the submatrixQ(ilo+1:ihi,ilo+1:ihi). IfSIDE = 'L', then1 <= ILO <= IHI <= M, ifM > 0, andILO = 1andIHI = 0, ifM = 0; ifSIDE = 'R', then1 <= ILO <= IHI <= N, ifN > 0, andILO = 1andIHI = 0, ifN = 0. πAβREALarray. Dimensions:
(LDA,M) if SIDE = 'L'
(LDA,N) if SIDE = 'R'
These are the vectors which define the elementary reflectors, as returned by SGEHRD. π¦
LDAβINTEGER, the leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβREALarray, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned bySGEHRD.CβREALarray, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q. πLDCβINTEGER, the leading dimension of the arrayC.LDC >= max(1,M).WORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER, 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. 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β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.
Definition at line 177 of file sormhr.f.
π subroutine zunmhr π
subroutine zunmhr (character side, character trans, integer m, integer n,
integer ilo, integer ihi, 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)
π¦ Purpose π¦
ZUNMHR 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 IHI-ILO elementary reflectors, as returned by ZGEHRD:
Q = H(ilo) H(ilo+1) . . . H(ihi-1).
β¨ Parameters β¨
SIDEβCHARACTER*1.= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right. πTRANSβCHARACTER*1.= 'N': applyQ(No transpose);= 'C': applyQ**H(Conjugate transpose).MβINTEGER. The number of rows of the matrixC.M >= 0.NβINTEGER. The number of columns of the matrixC.N >= 0. (Yes, same energy as before, bestie. π )ILOβ isINTEGER.IHIβ isINTEGER.ILOandIHImust have the same values as in the previous call ofZGEHRD.Qis equal to the unit matrix except in the submatrixQ(ilo+1:ihi,ilo+1:ihi). IfSIDE = 'L', then1 <= ILO <= IHI <= M, ifM > 0, andILO = 1andIHI = 0, ifM = 0; ifSIDE = 'R', then1 <= ILO <= IHI <= N, ifN > 0, andILO = 1andIHI = 0, ifN = 0. πAβCOMPLEX*16array. Dimensions:
(LDA,M) if SIDE = 'L'
(LDA,N) if SIDE = 'R'
The vectors which define the elementary reflectors, as returned by ZGEHRD. π¦
LDAβINTEGER, the leading dimension of the arrayA.LDA >= max(1,M)ifSIDE = 'L';LDA >= max(1,N)ifSIDE = 'R'.TAUβCOMPLEX*16array, dimension(M-1)ifSIDE = 'L',(N-1)ifSIDE = 'R'.TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZGEHRD.CβCOMPLEX*16array, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q. πLDCβINTEGER, the leading dimension of the arrayC.LDC >= max(1,M).WORKβCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER, 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. 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β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.
Definition at line 176 of file zunmhr.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
β¨ And that's the whole glow-up, bestie β LAPACK, Version 3.12.0, unmhr(3). You ate that. ππ
π¦ 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