unmlq(3)
π¦ unmlq(3) β {un,or}mlq: multiply by Q from gelqf π¦
okay bestie, this is the unmlq(3) page from the Library Functions Manual, and it's giving "four LAPACK routines, one very specific mission" energy. No cap: this is part 1, and it's all about multiplying by Q from gelqf. Let's go β¨
π NAME π
unmlq β {un,or}mlq: multiply by Q from gelqf.
β¨ SYNOPSIS β¨
π§ Functions
subroutine cunmlq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
CUNMLQ
subroutine dormlq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
DORMLQ
subroutine sormlq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
SORMLQ
subroutine zunmlq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
ZUNMLQ
π¦ Detailed Description π¦
This is where the page gets into the actual routines, bestie β the Function Documentation below is the main character energy β¨
π₯ Function Documentation π₯
π subroutine cunmlq π
subroutine cunmlq (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 lwork, integer info)
CUNMLQ
πΈ Purpose
Bestie, CUNMLQ 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 defined as the product of k elementary reflectors
Q = H(k)**H . . . H(2)**H H(1)**H
as returned by CGELQF. Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'.
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**H from the Left;= 'R': apply Q or Q**H from the Right.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'C': Conjugate transpose, apply Q**H.
MβMisINTEGER. The number of rows of the matrix C.M >= 0.NβNisINTEGER. The number of columns of the matrix C.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrix Q. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisCOMPLEXarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The i-th row must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned byCGELQFin the first k rows of its array argument A.LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,K).TAUβTAUisCOMPLEXarray, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byCGELQF.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βLDCisINTEGER. The 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βLWORKisINTEGER. The dimension of the arrayWORK. IfSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). For good performance,LWORKshould generally be larger. 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β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 166 of file cunmlq.f.
π subroutine dormlq π
subroutine dormlq (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)
DORMLQ
πΈ Purpose
Bestie, DORMLQ 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
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 DGELQF. Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'.
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**T from the Left;= 'R': apply Q or Q**T from the Right.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'T': Transpose, apply Q**T.
MβMisINTEGER. The number of rows of the matrix C.M >= 0.NβNisINTEGER. The number of columns of the matrix C.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrix Q. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The i-th row must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned byDGELQFin the first k rows of its array argument A.LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,K).TAUβTAUisDOUBLE PRECISIONarray, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byDGELQF.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βLDCisINTEGER. The 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βLWORKisINTEGER. The dimension of the arrayWORK. IfSIDE = 'L',LWORK >= max(1,N); ifSIDE = 'R',LWORK >= max(1,M). For good performance,LWORKshould generally be larger. 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β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 165 of file dormlq.f.
π subroutine sormlq π
subroutine sormlq (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 lwork, integer info)
SORMLQ
πΈ Purpose
Bestie, SORMLQ 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
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 SGELQF. Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'.
π Parameters
SIDEβSIDEisCHARACTER*1= 'L': apply Q or Q**T from the Left;= 'R': apply Q or Q**T from the Right.
TRANSβTRANSisCHARACTER*1= 'N': No transpose, apply Q;= 'T': Transpose, apply Q**T.
MβMisINTEGER. The number of rows of the matrix C.M >= 0.NβNisINTEGER. The number of columns of the matrix C.N >= 0.KβKisINTEGER. The number of elementary reflectors whose product defines the matrix Q. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0.AβAisREALarray, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. The i-th row must contain the vector which defines the elementary reflectorH(i), fori = 1,2,...,k, as returned bySGELQFin the first k rows of its array argument A.LDAβLDAisINTEGER. The leading dimension of the array A.LDA >= max(1,K).TAUβ bestie, part 2 picks up right here with theTAUtea βTAUβREALarray, dimension(K).TAU(i)has to hold the scalar factor of the elementary reflectorH(i), exactly likeSGELQFhanded it to you. No improvising, bestie πCβREALarray, dimension(LDC,N). On entry? TheM-by-NmatrixC. On exit? It's been overwritten byQ*CorQ**T*CorC*Q**TorC*Q. She's a main character who reinvents herself, okay π¦LDCβINTEGER, the leading dimension of the arrayC. Constraint:LDC >= max(1,M). Respect the boundary, girl πWORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0, thenWORK(1)gives you back the optimalLWORK. A little thank-you note in slot one β¨LWORKβINTEGER, the dimension of the arrayWORK.- If
SIDE = 'L', thenLWORK >= max(1,N) - If
SIDE = 'R', thenLWORK >= max(1,M) - For good performance,
LWORKshould generally be larger. Like, be generous, she thrives π«Ά
- If
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. It's a vibe check, not a full commit π
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 166 of file sormlq.f.
π§ subroutine zunmlq (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 lwork, integer info)
subroutine zunmlq (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 lwork, integer info)
πΈ ZUNMLQ
π Purpose:
ZUNMLQ 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 defined as the product of k elementary reflectors:
Q = H(k)**H . . . H(2)**H H(1)**H
as returned by ZGELQF. Like, Q is of order M if SIDE = 'L', and of order N if SIDE = 'R'. Depends on the side, and honestly? Relatable π
β¨ Parameters
SIDEβCHARACTER*1= 'L': applyQorQ**Hfrom the Left= 'R': applyQorQ**Hfrom the Right
Pick a side, any side π
TRANSβCHARACTER*1= 'N': No transpose, applyQ= 'C': Conjugate transpose, applyQ**H
MβINTEGER, the number of rows of the matrixC. Constraint:M >= 0.NβINTEGER, the number of columns of the matrixC. Constraint:N >= 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
Boundaries: respected π
AβCOMPLEX*16array, dimension(LDA,M)ifSIDE = 'L'(LDA,N)ifSIDE = 'R'
The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ZGELQF in the first k rows of its array argument A. So likeβ¦ don't rearrange her rows, she was already perfect π
LDAβINTEGER, the leading dimension of the arrayA. Constraint:LDA >= max(1,K).TAUβCOMPLEX*16array, dimension(K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZGELQF. Same energy as above, just complex now π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. Constraint:LDC >= max(1,M).WORKβCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0, thenWORK(1)returns the optimalLWORK. Iconic little receipt π§ΎLWORKβINTEGER, the dimension of the arrayWORK.- If
SIDE = 'L', thenLWORK >= max(1,N) - If
SIDE = 'R', thenLWORK >= max(1,M) - For good performance,
LWORKshould generally be larger. Bigger workspace, better life β
- If
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. Just peeking, not touching π
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 165 of file zunmlq.f.
π«Ά Author
Generated automatically by Doxygen for LAPACK from the source code.
Ok bestie, that's the whole page π This one was auto-generated by Doxygen for LAPACK straight from the source code βLAPACK,Version 3.12.0, filed underunmlq(3). Go forth and apply your reflectors correctly, no cap ππΈ
π¦ 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