unmrq(3)
π
unmrq β {un,or}mrq: multiply by Q from gerqf π¦
okay bestie, welcome to the unmrq page β this is the family of LAPACK routines that take the Q you carefully built with gerqf and actually use it. like, Q gets to have its main character moment and multiply a whole matrix. iconic behavior honestly.
the homegirls in question are cunmrq, dormrq, sormrq and zunmrq β one for each real/complex, single/double precision vibe check. same energy, different dtypes. iykyk β¨
πΈ SYNOPSIS πΈ
subroutine cunmrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
CUNMRQ
subroutine dormrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
DORMRQ
subroutine sormrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
SORMRQ
subroutine zunmrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
lwork, info)
ZUNMRQ
π Detailed Description π
so this page is like a little friend group of four routines, all doing the same thing for different precisions. every one of them is documented in full below β no skipping, bestie, we read the whole menu π«Ά
β¨ Function Documentation β¨
π subroutine cunmrq π
subroutine cunmrq (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)
CUNMRQ
Purpose:
!>
!> CUNMRQ 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(1)**H H(2)**H . . . H(k)**H
!>
!> as returned by CGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>
like, literally β it overwrites your general complex M-by-N matrix C with whichever of those four products you asked for. and Q here is that complex unitary matrix, built as the product of k elementary reflectors, exactly as CGERQF handed it to you. Q is order M if SIDE = 'L', order N if SIDE = 'R'. slay π
Parameters
SIDEβSIDE is CHARACTER*1β¨= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right.
TRANSβTRANS is CHARACTER*1π= 'N': No transpose, applyQ;= 'C': Conjugate transpose, applyQ**H.
MβM is INTEGER. the number of rows of the matrixC.M >= 0.NβN is INTEGER. the number of columns of the matrixC.N >= 0.KβK is INTEGER. the number of elementary reflectors whose product defines the matrixQ.- If
SIDE = 'L',M >= K >= 0; - if
SIDE = 'R',N >= K >= 0.
- If
AβA is COMPLEX array, dimension
(LDA,M) if SIDE = 'L',
(LDA,N) if SIDE = 'R'
the i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by CGERQF in the last k rows of its array argument A.
LDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,K).TAUβTAU is COMPLEX array, dimension (K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byCGERQF.CβC is COMPLEX array, dimension (LDC,N). on entry, theM-by-NmatrixC. on exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q.LDCβLDC is INTEGER. the leading dimension of the arrayC.LDC >= max(1,M).WORKβWORK is COMPLEX array, dimension (MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. the dimension of the arrayWORK.- If
SIDE = 'L',LWORK >= max(1,N); - if
SIDE = 'R',LWORK >= max(1,M). - For good performance,
LWORKshould generally be larger.
- 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.
INFOβINFO is INTEGER= 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 cunmrq.f.
π¦ subroutine dormrq π¦
subroutine dormrq (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)
DORMRQ
Purpose:
!>
!> DORMRQ 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(1) H(2) . . . H(k)
!>
!> as returned by DGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>
same deal, double precision edition π β overwrites the general real M-by-N matrix C with one of those four products, where Q is a real orthogonal matrix defined as the product of k elementary reflectors, as returned by DGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.
Parameters
SIDEβSIDE is CHARACTER*1β¨= 'L': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right.
TRANSβTRANS is CHARACTER*1π= 'N': No transpose, applyQ;= 'T': Transpose, applyQ**T.
MβM is INTEGER. the number of rows of the matrixC.M >= 0.NβN is INTEGER. the number of columns of the matrixC.N >= 0.KβK is INTEGER. the number of elementary reflectors whose product defines the matrixQ.- If
SIDE = 'L',M >= K >= 0; - if
SIDE = 'R',N >= K >= 0.
- If
AβA is DOUBLE PRECISION array, dimension
(LDA,M) if SIDE = 'L',
(LDA,N) if SIDE = 'R'
the i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by DGERQF in the last k rows of its array argument A.
LDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,K).TAUβTAU is DOUBLE PRECISION array, dimension (K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byDGERQF.CβC is DOUBLE PRECISION array, dimension (LDC,N). on entry, theM-by-NmatrixC. on exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q.LDCβLDC is INTEGER. the leading dimension of the arrayC.LDC >= max(1,M).WORKβWORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. the dimension of the arrayWORK.- If
SIDE = 'L',LWORK >= max(1,N); - if
SIDE = 'R',LWORK >= max(1,M). - For good performance,
LWORKshould generally be larger.
- 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.
INFOβINFO is INTEGER= 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 dormrq.f.
π§ subroutine sormrq π§
subroutine sormrq (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)
SORMRQ
Purpose:
!>
!> SORMRQ 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(1) H(2) . . . H(k)
!>
!> as returned by SGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>
single precision real, bestie πΈ β overwrites the general real M-by-N matrix C with one of those four products, Q being a real orthogonal matrix defined as the product of k elementary reflectors as returned by SGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.
Parameters
SIDEβSIDE is CHARACTER*1β¨= 'L': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right.
TRANSβTRANS is CHARACTER*1π= 'N': No transpose, applyQ;= 'T': Transpose, applyQ**T.
MβM is INTEGER. the number of rows of the matrixC.M >= 0.NβN is INTEGER. the number of columns of the matrixC.N >= 0.KβK is INTEGER. the number of elementary reflectors whose product defines the matrixQ.- If
SIDE = 'L',M >= K >= 0; - if
SIDE = 'R',N >= K >= 0.
- If
AβA is REAL array, dimension
(LDA,M) if SIDE = 'L',
(LDA,N) if SIDE = 'R'
the i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by SGERQF in the last k rows of its array argument A.
LDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,K).TAUβTAU is REAL array, dimension (K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned bySGERQF.CβC is REAL array, dimension (LDC,N). on entry, theM-by-NmatrixC. on exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q.LDCβLDC is INTEGER. the leading dimension of the arrayC.LDC >= max(1,M).WORKβWORK is REAL array, dimension (MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. the dimension of the arrayWORK.- If
SIDE = 'L',LWORK >= max(1,N); - if
SIDE = 'R',LWORK >= max(1,M). - For good performance,
LWORKshould generally be larger.
- 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.
INFOβINFO is INTEGER= 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 164 of file sormrq.f.
π subroutine zunmrq π
subroutine zunmrq (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)
ZUNMRQ
Purpose:
!>
!> ZUNMRQ 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(1)**H H(2)**H . . . H(k)**H
!>
!> as returned by ZGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>
double precision complex, the queen herself π
β overwrites the general complex M-by-N matrix C with one of those four, where Q is a complex unitary matrix defined as the product of k elementary reflectors, as returned by ZGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.
Parameters
SIDEβSIDE is CHARACTER*1β¨= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right.
TRANSβTRANS is CHARACTER*1π= 'N': No transpose, applyQ;= 'C': Conjugate transpose, applyQ**H.
MβM is INTEGER. the number of rows of the matrixC.M >= 0.NβN is INTEGER. the number of columns of the matrixC.N >= 0.KβK is INTEGER. the number of elementary reflectors whose product defines the matrixQ.- If
SIDE = 'L',M >= K >= 0; - if
SIDE = 'R',N >= K >= 0.
- If
AβA is COMPLEX*16 array, dimension
(LDA,M) if SIDE = 'L',
(LDA,N) if SIDE = 'R'
the i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ZGERQF in the last k rows of its array argument A.
LDAβLDA is INTEGER. the leading dimension of the arrayA.LDA >= max(1,K).TAUβTAU is COMPLEX*16 array, dimension (K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZGERQF.CβC is COMPLEX*16 array, dimension (LDC,N). on entry, theM-by-NmatrixC. on exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q.LDCβLDC is INTEGER. the leading dimension of the arrayC.LDC >= max(1,M).WORKβWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORK is INTEGER. the dimension of the arrayWORK.- If
SIDE = 'L',LWORK >= max(1,N); - if
SIDE = 'R',LWORK >= max(1,M). - For good performance,
LWORKshould generally be larger.
- 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.
INFOβINFO is INTEGER= 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 167 of file zunmrq.f.
okay and that's part 1, bestie β there's more where that came from, so don't you dare close the tab yet π«Άπ
TAUβ itβs aREAL array, dimension (K), andTAU(i)must contain the scalar factor of the elementary reflectorH(i), exactly as returned bySGERQF. slay β¨CβC is REAL array, dimension (LDC,N). On entry itβs theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q. iconic behavior πLDCβLDC is INTEGER, the leading dimension of the arrayC. And the rule isLDC >= max(1,M). no cap.WORKβWORK is REAL array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0, thenWORK(1)returns the optimalLWORK. bestie, itβs giving workspace reveal π«ΆLWORKβLWORK is INTEGER, the dimension of the arrayWORK. IfSIDE = 'L', thenLWORK >= max(1,N); ifSIDE = 'R', thenLWORK >= max(1,M). For good performance,LWORKshould generally be larger.
Also: 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. periodt π
INFOβINFO is INTEGER.= 0: successful exit π< 0: ifINFO = -i, thei-thargument had an illegal value π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Definition
Definition at line 166 of file sormrq.f.
πΈ subroutine zunmrq β the complex edition, hehe π¦
subroutine zunmrq (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)
ZUNMRQ
β¨ Purpose
okay so ZUNMRQ 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(1)**H H(2)**H . . . H(k)**H
as returned by ZGERQF. Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'. literally the main character matrix energy π
β¨ Parameters
SIDEβSIDE is CHARACTER*1.= 'L': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right. choose your vibe π
TRANSβTRANS is CHARACTER*1.= 'N': No transpose, applyQ;= 'C': Conjugate transpose, applyQ**H. yup, conjugate transpose is the moment π
MβM is INTEGER, the number of rows of the matrixC. AndM >= 0. respect the bound, bestie π«ΆNβN is INTEGER, the number of columns of the matrixC. AndN >= 0. slay the dimension check β¨KβK is INTEGER, the number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L', thenM >= K >= 0; ifSIDE = 'R', thenN >= K >= 0. math said what it said πAβA is COMPLEX*16 array, 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 ZGERQF in the last k rows of its array argument A. okayyyyy data placement icon π
LDAβLDA is INTEGER, the leading dimension of the arrayA. AndLDA >= max(1,K). no skipping the leading dimension, iykyk πΈTAUβTAU is COMPLEX*16 array, dimension (K).TAU(i)must contain the scalar factor of the elementary reflectorH(i), as returned byZGERQF. the scalar factor is doing its little dance πCβC is COMPLEX*16 array, dimension (LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q. bestie itβs literally getting replaced, stay calm πLDCβLDC is INTEGER, the leading dimension of the arrayC. AndLDC >= max(1,M). periodt π₯WORKβWORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0, thenWORK(1)returns the optimalLWORK. workspace said βIβm the momentβ β¨LWORKβLWORK is INTEGER, the dimension of the arrayWORK. IfSIDE = 'L', thenLWORK >= max(1,N); ifSIDE = 'R', thenLWORK >= max(1,M). For good performance,LWORKshould generally be larger.
Also: 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. no notes, just query behavior π«Ά
INFOβINFO is INTEGER.= 0: successful exit π< 0: ifINFO = -i, thei-thargument had an illegal value π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π Definition
Definition at line 165 of file zunmrq.f.
π Author
Generated automatically by Doxygen for LAPACK from the source code. yes babe, the docs generated themselves and still ate π
okay final footer check, bestie: this whole thing is serving LAPACK Version 3.12.0, page unmrq(3), and itβs from the LAPACK source-code side of the internet. mwah ππ
π¦ 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