ggrqf(3)
π ggrqf(3) β Library Functions Manual π
okay bestie, buckle up, because this is the ggrqf page β yes, the whole generalized RQ factor of it β and she is long. Grab a strawberry drink π and let's go.
β¨ NAME β¨
ggrqf β the generalized RQ factor. that's it, that's the name. short, sweet, iconic. π
πΈ SYNOPSIS πΈ
π Functions
subroutine cggrqf (m, p, n, a, lda, taua, b, ldb, taub, work, lwork,
info)
CGGRQF
subroutine dggrqf (m, p, n, a, lda, taua, b, ldb, taub, work, lwork,
info)
DGGRQF
subroutine sggrqf (m, p, n, a, lda, taua, b, ldb, taub, work, lwork,
info)
SGGRQF
subroutine zggrqf (m, p, n, a, lda, taua, b, ldb, taub, work, lwork,
info)
ZGGRQF
four flavors, one vibe β C, D, S, Z, pick your letter, slay. β¨
π¦ Detailed Description π¦
okay so this section is literally empty on the page. nothing here. we move. π
π₯ Function Documentation π₯
π subroutine cggrqf
subroutine cggrqf (integer m, integer p, integer n, complex, dimension( lda,
* ) a, integer lda, complex, dimension( * ) taua, complex, dimension(
ldb, * ) b, integer ldb, complex, dimension( * ) taub, complex,
dimension( * ) work, integer lwork, integer info)
CGGRQF
π«Ά Purpose:
!>β yes the comments keep their!>, that's just how she lives, no cap.
so basically CGGRQF computes a generalized RQ factorization of an M-by-N matrix A and a P-by-N matrix B:
A = R*Q, B = Z*T*Q,
where Q is an N-by-N unitary matrix, Z is a P-by-P unitary matrix, and R and T assume one of these forms β lowkey the shapes are the whole personality:
if M <= N, R = ( 0 R12 ) M, or if M > N, R = ( R11 ) M-N,
N-M M ( R21 ) N
N
where R12 or R21 is upper triangular. and also:
if P >= N, T = ( T11 ) N , or if P < N, T = ( T11 T12 ) P,
( 0 ) P-N P N-P
N
where T11 is upper triangular. β¨
and the flex? in particular, if B is square and nonsingular, the GRQ factorization of A and B implicitly gives the RQ factorization of A*inv(B):
A*inv(B) = (R*inv(T))*Z**H
where inv(B) denotes the inverse of the matrix B, and Z**H denotes the conjugate transpose of the matrix Z. it's giving math main character energy, honestly. π
π Parameters
MβM is INTEGER, the number of rows of the matrixA. constraint:M >= 0. no negativity allowed.PβP is INTEGER, the number of rows of the matrixB. constraint:P >= 0.NβN is INTEGER, the number of columns of the matricesAandB. constraint:N >= 0.AβA is COMPLEX array, dimension (LDA,N). On entry, it's the M-by-N matrixA. On exit, ifM <= N, the upper triangle of the subarrayA(1:M,N-M+1:N)contains the M-by-M upper triangular matrixR; ifM > N, the elements on and above the(M-N)-th subdiagonal contain the M-by-N upper trapezoidal matrixR. the remaining elements, together with the arrayTAUA, represent the unitary matrixQas a product of elementary reflectors (see Further Details). π¦LDAβLDA is INTEGER, the leading dimension of the arrayA. constraint:LDA >= max(1,M).TAUAβTAUA is COMPLEX array, dimension (min(M,N)). the scalar factors of the elementary reflectors which represent the unitary matrixQ(see Further Details).BβB is COMPLEX array, dimension (LDB,N). On entry, the P-by-N matrixB. On exit, the elements on and above the diagonal of the array contain themin(P,N)-by-N upper trapezoidal matrixT(Tis upper triangular ifP >= N); the elements below the diagonal, together with the arrayTAUB, represent the unitary matrixZas a product of elementary reflectors (see Further Details). πLDBβLDB is INTEGER, the leading dimension of the arrayB. constraint:LDB >= max(1,P).TAUBβTAUB is COMPLEX array, dimension (min(P,N)). the scalar factors of the elementary reflectors which represent the unitary matrixZ(see Further Details).WORKβWORK is COMPLEX array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. king behavior. πLWORKβLWORK is INTEGER, the dimension of the arrayWORK. constraint:LWORK >= max(1,N,M,P). for optimum performance,LWORK >= max(N,M,P)*max(NB1,NB2,NB3), whereNB1is the optimal blocksize for the RQ factorization of an M-by-N matrix,NB2is the optimal blocksize for the QR factorization of a P-by-N matrix, andNB3is the optimal blocksize for a call ofCUNMRQ. and bestie, listen: 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. so don't come for her, she's just answering the question you asked. πINFOβINFO is INTEGER, and it's the vibe check:= 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.
like, an absolute supergroup of institutions. we stan. π«Ά
β Further Details:
!> β more reflective goodness incoming:
the matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(k), where k = min(m,n).
each H(i) has the form
H(i) = I - taua * v * v**H
where taua is a complex scalar, and v is a complex vector with v(n-k+i+1:n) = 0 and v(n-k+i) = 1; v(1:n-k+i-1) is stored on exit in A(m-k+i,1:n-k+i-1), and taua in TAUA(i). to form Q explicitly, use LAPACK subroutine CUNGRQ. to use Q to update another matrix, use LAPACK subroutine CUNMRQ.
the matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(p,n).
each H(i) has the form
H(i) = I - taub * v * v**H
where taub is a complex scalar, and v is a complex vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:p) is stored on exit in B(i+1:p,i), and taub in TAUB(i). to form Z explicitly, use LAPACK subroutine CUNGQR. to use Z to update another matrix, use LAPACK subroutine CUNMQR.
Definition at line 212 of file cggrqf.f. π
π§ subroutine dggrqf
subroutine dggrqf (integer m, integer p, integer n, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( * )
taua, double precision, dimension( ldb, * ) b, integer ldb, double
precision, dimension( * ) taub, double precision, dimension( * ) work,
integer lwork, integer info)
DGGRQF
π«Ά Purpose:
!>β same!>energy, different letter, we love consistency.
so DGGRQF computes a generalized RQ factorization of an M-by-N matrix A and a P-by-N matrix B:
A = R*Q, B = Z*T*Q,
where Q is an N-by-N orthogonal matrix, Z is a P-by-P orthogonal matrix, and R and T assume one of the forms:
if M <= N, R = ( 0 R12 ) M, or if M > N, R = ( R11 ) M-N,
N-M M ( R21 ) N
N
where R12 or R21 is upper triangular, and
if P >= N, T = ( T11 ) N , or if P < N, T = ( T11 T12 ) P,
( 0 ) P-N P N-P
N
where T11 is upper triangular.
in particular, if B is square and nonsingular, the GRQ factorization of A and B implicitly gives the RQ factorization of A*inv(B):
A*inv(B) = (R*inv(T))*Z**T
where inv(B) denotes the inverse of the matrix B, and Z**T denotes the transpose of the matrix Z. (note: Z**T here, not Z**H β the real version is built different, literally.) π₯
π Parameters
MβM is INTEGER, the number of rows of the matrixA. constraint:M >= 0.PβP is INTEGER, the number of rows of the matrixB. constraint:P >= 0.NβN is INTEGER, the number of columns of the matricesAandB. constraint:N >= 0.AβA is DOUBLE PRECISION array, dimension (LDA,N). On entry, the M-by-N matrixA. On exit, ifM <= N, the upper triangle of the subarrayA(1:M,N-M+1:N)contains the M-by-M upper triangular matrixR; ifM > N, the elements on and above the(M-N)-th subdiagonal contain the M-by-N upper trapezoidal matrixR. the remaining elements, together with the arrayTAUA, represent the orthogonal matrixQas a product of elementary reflectors (see Further Details). π¦LDAβLDA is INTEGER, the leading dimension of the arrayA. constraint:LDA >= max(1,M).TAUAβTAUA is DOUBLE PRECISION array, dimension (min(M,N)). the scalar factors of the elementary reflectors which represent the orthogonal matrixQ(see Further Details).BβB is DOUBLE PRECISION array, dimension (LDB,N). On entry, the P-by-N matrixB. On exit, the elements on and above the diagonal of the array contain themin(P,N)-by-N upper trapezoidal matrixT(Tis upper triangular ifP >= N); the elements below the diagonal, together with the arrayTAUB, represent the orthogonal matrixZas a product of elementary reflectors (see Further Details). πLDBβLDB is INTEGER, the leading dimension of the arrayB. constraint:LDB >= max(1,P).TAUBβTAUB is DOUBLE PRECISION array, dimension (min(P,N)). the scalar factors of the elementary reflectors which represent the orthogonal matrixZ(see Further Details).WORKβWORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORK
First up, still inside dggrqf's parameter list β we're so back π
LWORKβINTEGER. This is the dimension of the arrayWORK. The minimum isLWORK >= max(1,N,M,P). For optimum performance, you wantLWORK >= max(N,M,P)*max(NB1,NB2,NB3), whereNB1is the optimal blocksize for the RQ factorization of an M-by-N matrix,NB2is the optimal blocksize for the QR factorization of a P-by-N matrix, andNB3is the optimal blocksize for a call ofDORMRQ.
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. Literally a little vibe-check-only mode, no drama π
INFOβINTEGER.= 0: successful exit.< 0: ifINF0= -i, the i-th argument had an illegal value. Yes bestie, the source spells itINF0with a zero β we keep it exactly, no cap.
Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details π§
The matrix Q is represented as a product of elementary reflectors:
Q = H(1) H(2) . . . H(k), where k = min(m,n).
Each H(i) has the form:
H(i) = I - taua * v * v**T
where taua is a real scalar, and v is a real vector with v(n-k+i+1:n) = 0 and v(n-k+i) = 1; v(1:n-k+i-1) is stored on exit in A(m-k+i,1:n-k+i-1), and taua in TAUA(i).
To form Q explicitly, use LAPACK subroutine DORGRQ. To use Q to update another matrix, use LAPACK subroutine DORMRQ.
The matrix Z is represented as a product of elementary reflectors:
Z = H(1) H(2) . . . H(k), where k = min(p,n).
Each H(i) has the form:
H(i) = I - taub * v * v**T
where taub is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:p) is stored on exit in B(i+1:p,i), and taub in TAUB(i).
To form Z explicitly, use LAPACK subroutine DORGQR. To use Z to update another matrix, use LAPACK subroutine DORMQR.
Definition at line 212 of file dggrqf.f.
β¨ subroutine sggrqf β¨
subroutine sggrqf (integer m, integer p, integer n, real, dimension( lda, * ) a, integer lda, real, dimension( * ) taua, real, dimension( ldb, * ) b, integer ldb, real, dimension( * ) taub, real, dimension( * ) work, integer lwork, integer info)
SGGRQF is right here, same energy, different letter π«Ά
Purpose π
SGGRQF computes a generalized RQ factorization of an M-by-N matrix A and a P-by-N matrix B:
A = R*Q, B = Z*T*Q,
where Q is an N-by-N orthogonal matrix, Z is a P-by-P orthogonal matrix, and R and T assume one of the forms:
if M <= N, R = ( 0 R12 ) M, or if M > N, R = ( R11 ) M-N,
N-M M ( R21 ) N
N
where R12 or R21 is upper triangular, and
if P >= N, T = ( T11 ) N , or if P < N, T = ( T11 T12 ) P,
( 0 ) P-N P N-P
N
where T11 is upper triangular.
In particular, if B is square and nonsingular, the GRQ factorization of A and B implicitly gives the RQ factorization of A*inv(B):
A*inv(B) = (R*inv(T))*Z**T
where inv(B) denotes the inverse of the matrix B, and Z**T denotes the transpose of the matrix Z.
Parameters πΈ
MβINTEGER. The number of rows of the matrixA.M >= 0.PβINTEGER. The number of rows of the matrixB.P >= 0.NβINTEGER. The number of columns of the matricesAandB.N >= 0.AβREAL array, dimension (LDA,N). On entry, the M-by-N matrixA. On exit, ifM <= N, the upper triangle of the subarrayA(1:M,N-M+1:N)contains the M-by-M upper triangular matrixR; ifM > N, the elements on and above the(M-N)-th subdiagonal contain the M-by-N upper trapezoidal matrixR; the remaining elements, with the arrayTAUA, represent the orthogonal matrixQas a product of elementary reflectors (see Further Details).LDAβINTEGER. The leading dimension of the arrayA.LDA >= max(1,M).TAUAβREAL array, dimension (min(M,N)). The scalar factors of the elementary reflectors which represent the orthogonal matrixQ(see Further Details).BβREAL array, dimension (LDB,N). On entry, the P-by-N matrixB. On exit, the elements on and above the diagonal of the array contain themin(P,N)-by-N upper trapezoidal matrixT(Tis upper triangular ifP >= N); the elements below the diagonal, with the arrayTAUB, represent the orthogonal matrixZas a product of elementary reflectors (see Further Details).LDBβINTEGER. The leading dimension of the arrayB.LDB >= max(1,P).TAUBβREAL array, dimension (min(P,N)). The scalar factors of the elementary reflectors which represent the orthogonal matrixZ(see Further Details).WORKβREAL array, dimension (MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβINTEGER. The dimension of the arrayWORK.LWORK >= max(1,N,M,P). For optimum performanceLWORK >= max(N,M,P)*max(NB1,NB2,NB3), whereNB1is the optimal blocksize for the RQ factorization of an M-by-N matrix,NB2is the optimal blocksize for the QR factorization of a P-by-N matrix, andNB3is the optimal blocksize for a call ofSORMRQ.
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. Same iconic query behavior, zero notes π
INFOβINTEGER.= 0: successful exit.< 0: ifINF0= -i, the i-th argument had an illegal value. Again:INF0, with a zero, we are not touching it π
Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Further Details β¨
The matrix Q is represented as a product of elementary reflectors:
Q = H(1) H(2) . . . H(k), where k = min(m,n).
Each H(i) has the form:
H(i) = I - taua * v * v**T
where taua is a real scalar, and v is a real vector with v(n-k+i+1:n) = 0 and v(n-k+i) = 1; v(1:n-k+i-1) is stored on exit in A(m-k+i,1:n-k+i-1), and taua in TAUA(i).
To form Q explicitly, use LAPACK subroutine SORGRQ. To use Q to update another matrix, use LAPACK subroutine SORMRQ.
The matrix Z is represented as a product of elementary reflectors:
Z = H(1) H(2) . . . H(k), where k = min(p,n).
Each H(i) has the form:
H(i) = I - taub * v * v**T
where taub is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:p) is stored on exit in B(i+1:p,i), and taub in TAUB(i).
To form Z explicitly, use LAPACK subroutine SORGQR. To use Z to update another matrix, use LAPACK subroutine SORMQR.
Definition at line 212 of file sggrqf.f.
π¦ subroutine zggrqf π¦
subroutine zggrqf (integer m, integer p, integer n, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( * ) taua, complex*16, dimension( ldb, * ) b, integer ldb, complex*16, dimension( * ) taub, complex*16, dimension( * ) work, integer lwork, integer info)
ZGGRQF has entered the chat, and it's giving complex*16 royalty π
Purpose π
ZGGRQF computes a generalized RQ factorization of an M-by-N matrix A and a P-by-N matrix B:
A = R*Q, B = Z*T*Q,
where Q is an N-by-N unitary matrix, Z is a P-by-P unitary matrix, and R and T assume one of the forms:
if M <= N, R = ( 0 R12 ) M, or if M > N, R = ( R11 ) M-N,
N-M M ( R21 ) N
N
where R12 or R21 is upper triangular, and
if P >= N, T = ( T11 ) N , or if P < N, T = ( T11 T12 ) P,
( 0 ) P-N P N-P
N
where T11 is upper triangular.
In particular, if B is square and nonsingular, the GRQ factorization of A and B implicitly gives the RQ factorization of A*inv(B):
A*inv(B) = (R*inv(T))*Z**H
where inv(B) denotes the inverse of the matrix B, and Z**H denotes the conjugate transpose of the matrix Z.
Parameters π
MβINTEGER. The number of rows of the matrixA.M >= 0.PβINTEGER. The number of rows of the matrixB.P >= 0.NβINTEGER. The number of columns of the matricesAandB.N >= 0.
π«§ A π«§
okay so A is a COMPLEX*16 array, dimension (LDA,N).
On entry? that's literally the M-by-N matrix A, bestie.
On exit it's giving two different eras depending on your shapes:
- if
M <= N, the upper triangle of the subarrayA(1:M,N-M+1:N)holds theM-by-Mupper triangular matrixR⨠- if
M > N, the elements on and above the(M-N)-th subdiagonal hold theM-by-Nupper trapezoidal matrixRπ
and the remaining elements, together with the array TAUA, represent the unitary matrix Q as a product of elementary reflectors (peep Further Details for the receipts).
π¦ LDA π¦
LDA is INTEGER β the leading dimension of the array A. and the vibe check is: LDA >= max(1,M). no cap, it's non-negotiable π
π TAUA π
TAUA is COMPLEX*16 array, dimension (min(M,N)).
these are the scalar factors of the elementary reflectors that represent the unitary matrix Q (again, Further Details has the lore).
πΈ B πΈ
B is COMPLEX*16 array, dimension (LDB,N).
On entry, it's the P-by-N matrix B.
On exit, the elements on and above the diagonal of the array hold the min(P,N)-by-N upper trapezoidal matrix T (and T is upper triangular if P >= N). the elements below the diagonal, chillin' with the array TAUB, represent the unitary matrix Z as a product of elementary reflectors (Further Details, bestie, Further Details).
β LDB β
LDB is INTEGER β the leading dimension of the array B, and it must satisfy LDB >= max(1,P). rules are rules π
π§ TAUB π§
TAUB is COMPLEX*16 array, dimension (min(P,N)).
the scalar factors of the elementary reflectors which represent the unitary matrix Z (Further Details!! it's iconique).
π₯ WORK π₯
WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)).
On exit, if INFO = 0, then WORK(1) returns the optimal LWORK. yes, it reports back. main character behavior.
π LWORK π
LWORK is INTEGER β the dimension of the array WORK.
the bare minimum is LWORK >= max(1,N,M,P).
but for optimum performance, you want
LWORK >= max(N,M,P)*max(NB1,NB2,NB3)
where:
NB1is the optimal blocksize for the RQ factorization of anM-by-NmatrixNB2is the optimal blocksize for the QR factorization of aP-by-NmatrixNB3is the optimal blocksize for a call ofZUNMRQ
β οΈ and 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. so like, don't go expecting a complaint, it's literally built different.
π INFO π
INFO is INTEGER, your little status report:
= 0: successful exit π slay< 0: ifINFO=-i, thei-th argument had an illegal value π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole squad really said "we made this" and honestly? respect π«Ά
β¨ Further Details β¨
okay this is the part where it gets GOOD, strap in π
The matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(k), where k = min(m,n).
Each H(i) has the form
H(i) = I - taua * v * v**H
where taua is a complex scalar, and v is a complex vector with v(n-k+i+1:n) = 0 and v(n-k+i) = 1; v(1:n-k+i-1) is stored on exit in A(m-k+i,1:n-k+i-1), and taua in TAUA(i).
- To form
Qexplicitly, use LAPACK subroutineZUNGRQπ - To use
Qto update another matrix, use LAPACK subroutineZUNMRQπ
The matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(p,n).
Each H(i) has the form
H(i) = I - taub * v * v**H
where taub is a complex scalar, and v is a complex vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:p) is stored on exit in B(i+1:p,i), and taub in TAUB(i).
- To form
Zexplicitly, use LAPACK subroutineZUNGQRπ - To use
Zto update another matrix, use LAPACK subroutineZUNMQRπ
and one last lil footnote for the completionists: this is defined at line 212 of file zggrqf.f, and this whole author bit was generated automatically by Doxygen for LAPACK from the source code πΈ
okay that's the whole page bestie, you're officially a zggrqf girlie now π
this was LAPACK, Version 3.12.0 β the ggrqf(3) girlies stay winning, and yes the date lives in that footer too, go check the source code if you need the exact timestamp π mwah, study hard, hydrate, and may all your arguments be legal β¨
π¦ 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