unm2l(3)
π unm2l(3) β {un,or}m2l: step in unmql
okay so bestie, welcome to unm2l from the Library Functions Manual. this is the group of little Fortran routines that do one step inside unmql, and honestly? it's giving "I'm the unblocked version and I know it." β¨ Four flavors, same vibe: one for complex, one for double precision, one for real, one for the double-complex girlies. Let's get into it. π
β¨ SYNOPSIS β¨
π«Ά Functions
subroutine cunm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info)β CUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).subroutine dorm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info)β DORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).subroutine sorm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info)β SORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).subroutine zunm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info)β ZUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).
πΈ Detailed Description πΈ
π Function Documentation π
π¦ subroutine cunm2l (character side, character trans, integer m, integer n, integer k, complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) tau, complex, dimension( ldc, * ) c, integer ldc, complex, dimension( * ) work, integer info)
CUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).
π Purpose:
bestie, CUNM2L overwrites the general complex m-by-n matrix C with:
Q * C if SIDE = 'L' and TRANS = 'N', or
Q**H* C if SIDE = 'L' and TRANS = 'C', or
C * Q if SIDE = 'R' and TRANS = 'N', or
C * Q**H if SIDE = 'R' and TRANS = 'C',
where Q is a complex unitary matrix defined as the product of k elementary reflectors:
Q = H(k) . . . H(2) H(1)
exactly as returned by CGEQLF. lowkey important: Q is of order m if SIDE = 'L', and of order n if SIDE = 'R'. π
β Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Hfrom the Left= 'R': applyQorQ**Hfrom the Right
TRANSβTRANSisCHARACTER*1.= 'N': applyQ(No transpose)= 'C': applyQ**H(Conjugate transpose)
MβMisINTEGER. The number of rows of the matrixC.M >= 0.NβNisINTEGER. The number of columns of the matrixC.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisCOMPLEXarray, dimension(LDA,K). The i-th column must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned by CGEQLF in the lastkcolumns of its array argumentA. nglAis modified by the routine but restored on exit.LDAβLDAisINTEGER. The leading dimension of the arrayA. IfSIDE = 'L',LDA >= max(1,M); ifSIDE = 'R',LDA >= max(1,N).TAUβTAUisCOMPLEXarray, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned by CGEQLF.CβCisCOMPLEXarray, dimension(LDC,N). On entry, the m-by-n matrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q.LDCβLDCisINTEGER. The leading dimension of the arrayC.LDC >= max(1,M).WORKβWORKisCOMPLEXarray, dimension(N)ifSIDE = 'L',(M)ifSIDE = 'R'.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 157 of file cunm2l.f.
π₯ subroutine dorm2l (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 info)
DORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).
π Purpose:
DORM2L overwrites the general real m by n matrix C with:
Q * C if SIDE = 'L' and TRANS = 'N', or
Q**T * C if SIDE = 'L' and TRANS = 'T', or
C * Q if SIDE = 'R' and TRANS = 'N', or
C * Q**T if SIDE = 'R' and TRANS = 'T',
where Q is a real orthogonal matrix defined as the product of k elementary reflectors:
Q = H(k) . . . H(2) H(1)
as returned by DGEQLF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. periodt. π«Ά
β Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Tfrom the Left= 'R': applyQorQ**Tfrom the Right
TRANSβTRANSisCHARACTER*1.= 'N': applyQ(No transpose)= 'T': applyQ**T(Transpose)
MβMisINTEGER. The number of rows of the matrixC.M >= 0.NβNisINTEGER. The number of columns of the matrixC.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA,K). The i-th column must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned by DGEQLF in the lastkcolumns of its array argumentA.LDAβLDAisINTEGER. The leading dimension of the arrayA. IfSIDE = 'L',LDA >= max(1,M); ifSIDE = 'R',LDA >= max(1,N).TAUβTAUisDOUBLE PRECISIONarray, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned by DGEQLF.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(N)ifSIDE = 'L',(M)ifSIDE = 'R'.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 156 of file dorm2l.f.
π subroutine sorm2l (character side, character trans, integer m, integer n, integer k, real, dimension( lda, * ) a, integer lda, real, dimension( * ) tau, real, dimension( ldc, * ) c, integer ldc, real, dimension( * ) work, integer info)
SORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).
π Purpose:
SORM2L overwrites the general real m by n matrix C with:
Q * C if SIDE = 'L' and TRANS = 'N', or
Q**T * C if SIDE = 'L' and TRANS = 'T', or
C * Q if SIDE = 'R' and TRANS = 'N', or
C * Q**T if SIDE = 'R' and TRANS = 'T',
where Q is a real orthogonal matrix defined as the product of k elementary reflectors:
Q = H(k) . . . H(2) H(1)
as returned by SGEQLF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. iconique. π
β Parameters
SIDEβSIDEisCHARACTER*1.= 'L': applyQorQ**Tfrom the Left= 'R': applyQorQ**Tfrom the Right
TRANSβTRANSisCHARACTER*1.= 'N': applyQ(No transpose)= 'T': applyQ**T(Transpose)
MβMisINTEGER. The number of rows of the matrixC.M >= 0.NβNisINTEGER. The number of columns of the matrixC.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisREALarray, dimension(LDA,K). The i-th column must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned by SGEQLF in the lastkcolumns of its array argumentA. and yes,Ais modified by the routine but restored on exit. πLDAβLDAisINTEGER. The leading dimension of the arrayA. IfSIDE = 'L',LDA >= max(1,M); ifSIDE = 'R',LDA >= max(1,N).TAUβTAUβ so this is aREALarray, dimension(K), andTAU(i)has got to hold the scalar factor of the elementary reflectorH(i), exactly asSGEQLFhanded it back to you. don't lose it bestie πCβREALarray, dimension(LDC,N). On entry it's yourmbynmatrixC. On exit? slayed and overwritten, babes β it becomesQ*CorQ**T*CorC*Q**TorC*Q. that's just how it goes β¨LDCβINTEGER, the leading dimension of the arrayC, and the vibe check here isLDC >= max(1,M). no cap, respect it π«ΆWORKβREALarray, and its dimension depends on where you're applying stuff from:(N)ifSIDE = 'L'(M)ifSIDE = 'R'
INFOβINTEGER, the little status receipt:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value π (so like, check your args)
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 157 of file sorm2l.f.
π subroutine zunm2l
okay so the signature is literally:
subroutine zunm2l (character side, character trans, integer m, integer n,
integer k, complex*16, dimension( lda, * ) a, integer lda, complex*16,
dimension( * ) tau, complex*16, dimension( ldc, * ) c, integer ldc,
complex*16, dimension( * ) work, integer info)
ZUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm). it's giving complex-number-glam, she's iconic π
π¦ Purpose
!>
!> ZUNM2L overwrites the general complex m-by-n matrix C with
!>
!> Q * C if SIDE = 'L' and TRANS = 'N', or
!>
!> Q**H* C if SIDE = 'L' and TRANS = 'C', or
!>
!> C * Q if SIDE = 'R' and TRANS = 'N', or
!>
!> C * Q**H if SIDE = 'R' and TRANS = 'C',
!>
!> where Q is a complex unitary matrix defined as the product of k
!> elementary reflectors
!>
!> Q = H(k) . . . H(2) H(1)
!>
!> as returned by ZGEQLF. Q is of order m if SIDE = 'L' and of order n
!> if SIDE = 'R'.
!>
like, Q is the main character here and it's built out of k elementary reflectors, in that exact order. don't reorder her, she has a whole storyline π
π Parameters
SIDEβCHARACTER*1, which literal side ofCthe magic happens on:= '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. the rule isM >= 0, periodt β¨NβINTEGER, the number of columns of the matrixC, and againN >= 0πΈKβINTEGER, the number of elementary reflectors whose product defines the matrixQ:- If
SIDE = 'L', thenM >= K >= 0 - if
SIDE = 'R', thenN >= K >= 0
- If
AβCOMPLEX*16array, dimension(LDA,K). thei-th column must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned byZGEQLFin the lastkcolumns of its array argumentA. and heads up (not in a bad way):Ais modified by the routine but restored on exit, so she leaves everything exactly how she found it, we love a considerate queen πLDAβINTEGER, the leading dimension of the arrayA:- If
SIDE = 'L',LDA >= max(1,M) - if
SIDE = 'R',LDA >= max(1,N)
- If
TAUβCOMPLEX*16array, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZGEQLF. keep it safe π₯CβCOMPLEX*16array, dimension(LDC,N). On entry, them-by-nmatrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q. she gets a whole glow-up, but like, the mathematically exact kind πLDCβINTEGER, the leading dimension of the arrayC, andLDC >= max(1,M). fr fr, check it π«ΆWORKβCOMPLEX*16array, dimension:(N)ifSIDE = 'L'(M)ifSIDE = 'R'
INFOβINTEGER, the receipts:= 0: successful exit β< 0: ifINFO = -i, thei-th argument had an illegal value β yes that means one of your args was not it π
π§ Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 157 of file zunm2l.f.
π Author (the whole page)
Generated automatically by Doxygen for LAPACK from the source code. so like, nobody hand-wrote this, it was auto-girlbossed into existence β¨
and that's the page bestie!! you made it to the very end π this whole thing is from LAPACK, Version 3.12.0, and the page is unm2l(3). go forth and multiply your matrices, but correctly πππ
π¦ 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