ggqrf(3)
okay so welcome to ggqrf(3) β Library Functions Manual β the generalized QR factor page, and honestly? iconic linear algebra behavior πβ¨
NAME πΈ
ggqrf β ggqrf: Generalized QR factor (short name, big main-character energy π
)
SYNOPSIS β¨
okay bestie, here's the function lineup. Four flavors, same general vibe:
Functions π
subroutine cggqrf (n, m, p, a, lda, taua, b, ldb, taub, work, lwork,
info)
CGGQRF
subroutine dggqrf (n, m, p, a, lda, taua, b, ldb, taub, work, lwork,
info)
DGGQRF
subroutine sggqrf (n, m, p, a, lda, taua, b, ldb, taub, work, lwork,
info)
SGGQRF
subroutine zggqrf (n, m, p, a, lda, taua, b, ldb, taub, work, lwork,
info)
ZGGQRF
Detailed Description π¦
this section is literally just a title in the source, no extra prose, bestie β the real tea starts in Function Documentation π
Function Documentation π
subroutine cggqrf π
subroutine cggqrf (integer n, integer m, integer p, 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)
this one's labeled CGGQRF, and yes it's giving complex unitary realness β¨
Purpose π
okay so CGGQRF computes a generalized QR factorization of an N-by-M matrix A and an N-by-P matrix B:
A = Q*R, B = Q*T*Z,
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 N >= M, R = ( R11 ) M , or if N < M, R = ( R11 R12 ) N,
( 0 ) N-M N M-N
M
where R11 is upper triangular, and
if N <= P, T = ( 0 T12 ) N, or if N > P, T = ( T11 ) N-P,
P-N N ( T21 ) P
P
where T12 or T21 is upper triangular.
in particular, if B is square and nonsingular, the GQR factorization of A and B implicitly gives the QR factorization of inv(B)*A:
inv(B)*A = Z**H * (inv(T)*R)
where inv(B) denotes the inverse of the matrix B, and Z' denotes the conjugate transpose of matrix Z.
Parameters π«Ά
NβNisINTEGER. the number of rows of the matricesAandB.N >= 0.MβMisINTEGER. the number of columns of the matrixA.M >= 0.PβPisINTEGER. the number of columns of the matrixB.P >= 0.AβAisCOMPLEXarray, dimension(LDA,M). On entry, theN-by-MmatrixA. On exit, the elements on and above the diagonal of the array contain themin(N,M)-by-Mupper trapezoidal matrixR(Ris upper triangular ifN >= M); the elements below the diagonal, with the arrayTAUA, represent the unitary matrixQas a product ofmin(N,M)elementary reflectors (see Further Details).LDAβLDAisINTEGER. the leading dimension of the arrayA.LDA >= max(1,N).TAUAβTAUAisCOMPLEXarray, dimension(min(N,M)). the scalar factors of the elementary reflectors which represent the unitary matrixQ(see Further Details).BβBisCOMPLEXarray, dimension(LDB,P). On entry, theN-by-PmatrixB. On exit, ifN <= P, the upper triangle of the subarrayB(1:N,P-N+1:P)contains theN-by-Nupper triangular matrixT; ifN > P, the elements on and above the(N-P)-th subdiagonal contain theN-by-Pupper trapezoidal matrixT; the remaining elements, with the arrayTAUB, represent the unitary matrixZas a product of elementary reflectors (see Further Details).LDBβLDBisINTEGER. the leading dimension of the arrayB.LDB >= max(1,N).TAUBβTAUBisCOMPLEXarray, dimension(min(N,P)). the scalar factors of the elementary reflectors which represent the unitary matrixZ(see Further Details).WORKβWORKisCOMPLEXarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.LWORKβLWORKisINTEGER. 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 QR factorization of anN-by-Mmatrix,NB2is the optimal blocksize for the RQ factorization of anN-by-Pmatrix, andNB3is the optimal blocksize for a call ofCUNMQR. 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, thei-th argument had an illegal value.
Author π
the source says:
- 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(n,m).
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(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and taua in TAUA(i). To form Q explicitly, use LAPACK subroutine CUNGQR. To use Q to update another matrix, use LAPACK subroutine CUNMQR.
the matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(n,p).
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(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in B(n-k+i,1:p-k+i-1), and taub in TAUB(i). To form Z explicitly, use LAPACK subroutine CUNGRQ. To use Z to update another matrix, use LAPACK subroutine CUNMRQ.
Definition at line 213 of file cggqrf.f.
subroutine dggqrf π
subroutine dggqrf (integer n, integer m, integer p, 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)
this one's labeled DGGQRF, and it's the double-precision orthogonal sibling β no cap π«Ά
Purpose π
DGGQRF computes a generalized QR factorization of an N-by-M matrix A and an N-by-P matrix B:
A = Q*R, B = Q*T*Z,
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 N >= M, R = ( R11 ) M , or if N < M, R = ( R11 R12 ) N,
( 0 ) N-M N M-N
M
where R11 is upper triangular, and
if N <= P, T = ( 0 T12 ) N, or if N > P, T = ( T11 ) N-P,
P-N N ( T21 ) P
P
where T12 or T21 is upper triangular.
in particular, if B is square and nonsingular, the GQR factorization of A and B implicitly gives the QR factorization of inv(B)*A:
inv(B)*A = Z**T*(inv(T)*R)
where inv(B) denotes the inverse of the matrix B, and Z**T denotes the transpose of the matrix Z.
Parameters π«Ά
NβNisINTEGER. the number of rows of the matricesAandB.N >= 0.MβMisINTEGER. the number of columns of the matrixA.M >= 0.PβPisINTEGER. the number of columns of the matrixB.P >= 0.AβAisDOUBLE PRECISIONarray, dimension(LDA,M). On entry, theN-by-MmatrixA. On exit, the elements on and above the diagonal of the array contain themin(N,M)-by-Mupper trapezoidal matrixR(Ris upper triangular ifN >= M); the elements below the diagonal, with the arrayTAUA, represent the orthogonal matrixQas a product ofmin(N,M)elementary reflectors (see Further Details).LDAβLDAisINTEGER. the leading dimension of the arrayA.LDA >= max(1,N).TAUAβTAUAisDOUBLE PRECISIONarray, dimension(min(N,M)). the scalar factors of the elementary reflectors which represent the orthogonal matrixQ(see Further Details).BβBisDOUBLE PRECISIONarray, dimension(LDB,P). On entry, theN-by-PmatrixB. On exit, ifN <= P, the upper triangle of the subarrayB(1:N,P-N+1:P)contains theN-by-Nupper triangular matrixT; ifN > P, the elements on and above the(N-P)-th subdiagonal contain theN-by-Pupper trapezoidal matrixT; the remaining elements, with the arrayTAUB, represent the orthogonal matrixZas a product of elementary reflectors (see Further Details).LDBβLDBisINTEGER. the leading dimension of the arrayB.LDB >= max(1,N).TAUBβTAUBisDOUBLE PRECISIONarray, dimension(min(N,P)). the scalar factors of the elementary reflectors which represent the orthogonal matrixZ(see Further Details).WORKβWORKisDOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK.
LWORK π
and this is exactly where this chunk of the page cuts off, bestie β part 2 picks up the rest of LWORK's lore and then INFO β¨
LWORKβINTEGER. Dimension of theWORKarray, and bestie, she has requirements. β¨LWORK >= max(1,N,M,P)β the absolute bare minimum, the "it'll run, don't @ me" setting.- For optimum performance,
LWORK >= max(N,M,P)*max(NB1,NB2,NB3), whereNB1is the optimal blocksize for the QR factorization of an N-by-M matrix,NB2is the optimal blocksize for the RQ factorization of an N-by-P matrix, andNB3is the optimal blocksize for a call ofDORMQR. That's the full glam, the blowout, the "I booked the whole salon" vibe. π - If
LWORK = -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 literally just window shopping β no commitment, no scolding. ποΈ
INFOβINTEGER. The little report card at the end. π= 0: successful exit. Slay, it worked.< 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.
π Further Details:
The matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(k), where k = min(n,m).
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(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and taua in TAUA(i). To form Q explicitly, use LAPACK subroutine DORGQR. To use Q to update another matrix, use LAPACK subroutine DORMQR.
The matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(n,p).
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(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in B(n-k+i,1:p-k+i-1), and taub in TAUB(i). To form Z explicitly, use LAPACK subroutine DORGRQ. To use Z to update another matrix, use LAPACK subroutine DORMRQ.
Definition at line 213 of file dggqrf.f.
π₯ sggqrf β the single-precision girlie
subroutine sggqrf (integer n, integer m, integer p, 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)
SGGQRF π
Purpose:
SGGQRF computes a generalized QR factorization of an N-by-M matrix A and an N-by-P matrix B:
A = Q*R, B = Q*T*Z,
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 N >= M, R = ( R11 ) M , or if N < M, R = ( R11 R12 ) N,
( 0 ) N-M N M-N
M
where R11 is upper triangular, and
if N <= P, T = ( 0 T12 ) N, or if N > P, T = ( T11 ) N-P,
P-N N ( T21 ) P
P
where T12 or T21 is upper triangular.
In particular, if B is square and nonsingular, the GQR factorization of A and B implicitly gives the QR factorization of inv(B)*A:
inv(B)*A = Z**T*(inv(T)*R)
where inv(B) denotes the inverse of the matrix B, and Z**T denotes the transpose of the matrix Z. It's giving β¨free factorizationβ¨.
Parameters
NβINTEGER. The number of rows of the matrices A and B.N >= 0. π¦MβINTEGER. The number of columns of the matrix A.M >= 0.PβINTEGER. The number of columns of the matrix B.P >= 0.AβREALarray, dimension(LDA,M). On entry, the N-by-M matrix A.
On exit, the elements on and above the diagonal of the array contain the min(N,M)-by-M upper trapezoidal matrix R (R is upper triangular if N >= M); the elements below the diagonal, with the array TAUA, represent the orthogonal matrix Q as a product of min(N,M) elementary reflectors (see Further Details). πΈ
LDAβINTEGER. The leading dimension of the array A.LDA >= max(1,N).TAUAβREALarray, dimension(min(N,M)). The scalar factors of the elementary reflectors which represent the orthogonal matrix Q (see Further Details).BβREALarray, dimension(LDB,P). On entry, the N-by-P matrix B.
On exit, if N <= P, the upper triangle of the subarray B(1:N,P-N+1:P) contains the N-by-N upper triangular matrix T; if N > P, the elements on and above the (N-P)-th subdiagonal contain the N-by-P upper trapezoidal matrix T; the remaining elements, with the array TAUB, represent the orthogonal matrix Z as a product of elementary reflectors (see Further Details). π«
LDBβINTEGER. The leading dimension of the array B.LDB >= max(1,N).TAUBβREALarray, dimension(min(N,P)). The scalar factors of the elementary reflectors which represent the orthogonal matrix Z (see Further Details).WORKβREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. She tells you what she needs, and honestly? Listen to her. πLWORKβINTEGER. Dimension ofWORK, same whole deal as before:LWORK >= max(1,N,M,P)β the floor, the "good enough" era.- For optimum performance
LWORK >= max(N,M,P)*max(NB1,NB2,NB3), whereNB1is the optimal blocksize for the QR factorization of an N-by-M matrix,NB2is the optimal blocksize for the RQ factorization of an N-by-P matrix, andNB3is the optimal blocksize for a call ofSORMQR. π₯ - If
LWORK = -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. The verdict.= 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.
β Further Details:
The matrix Q is represented as a product of elementary reflectors
Q = H(1) H(2) . . . H(k), where k = min(n,m).
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(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and taua in TAUA(i). To form Q explicitly, use LAPACK subroutine SORGQR. To use Q to update another matrix, use LAPACK subroutine SORMQR.
The matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(n,p).
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(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in B(n-k+i,1:p-k+i-1), and taub in TAUB(i). To form Z explicitly, use LAPACK subroutine SORGRQ. To use Z to update another matrix, use LAPACK subroutine SORMRQ.
Definition at line 213 of file sggqrf.f.
π zggqrf β double complex, double the drama
subroutine zggqrf (integer n, integer m, integer p, 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)
ZGGQRF π§
Purpose:
ZGGQRF computes a generalized QR factorization of an N-by-M matrix A and an N-by-P matrix B:
A = Q*R, B = Q*T*Z,
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 N >= M, R = ( R11 ) M , or if N < M, R = ( R11 R12 ) N,
( 0 ) N-M N M-N
M
where R11 is upper triangular, and
if N <= P, T = ( 0 T12 ) N, or if N > P, T = ( T11 ) N-P,
P-N N ( T21 ) P
P
where T12 or T21 is upper triangular.
In particular, if B is square and nonsingular, the GQR factorization of A and B implicitly gives the QR factorization of inv(B)*A:
inv(B)*A = Z**H * (inv(T)*R)
where inv(B) denotes the inverse of the matrix B, and Z**H denotes the conjugate transpose of matrix Z. Note it's **H here, not **T β she's complex, she conjugates, that's just her vibe. π
Parameters
NβINTEGER. The number of rows of the matrices A and B.N >= 0. βMβINTEGER. The number of columns of the matrix A.M >= 0.PβINTEGER. The number of columns of the matrix B.P >= 0.Aβ
Okay bestie, back to the argument glow-up list β¨ β these are the storage besties carrying the whole factorization vibe:
Aβ aCOMPLEX*16array, dimension(LDA,M). On entry, it's theN-by-MmatrixAβ main character energy π . On exit, the elements on and above the diagonal of the array hold themin(N,M)-by-Mupper trapezoidal matrixR(and yes,Ris upper triangular ifN >= M); the elements below the diagonal, with the arrayTAUA, represent the unitary matrixQas a product ofmin(N,M)elementary reflectors (peepFurther Detailsbelow, iykyk).LDAβ isINTEGER. The leading dimension of the arrayA.LDA >= max(1,N). No cap, just dimension rules β¨.TAUAβ is aCOMPLEX*16array, dimension(min(N,M)). The scalar factors of the elementary reflectors which represent the unitary matrixQ(seeFurther Details). These little icons are important π«Ά.Bβ is aCOMPLEX*16array, dimension(LDB,P). On entry, theN-by-PmatrixB. On exit, ifN <= P, the upper triangle of the subarrayB(1:N,P-N+1:P)contains theN-by-Nupper triangular matrixT; ifN > P, the elements on and above the(N-P)-th subdiagonal contain theN-by-Pupper trapezoidal matrixT; the remaining elements, with the arrayTAUB, represent the unitary matrixZas a product of elementary reflectors (seeFurther Details). It's giving "same matrix, different era" ππ₯.LDBβ isINTEGER. The leading dimension of the arrayB.LDB >= max(1,N). Periodt.TAUBβ is aCOMPLEX*16array, dimension(min(N,P)). The scalar factors of the elementary reflectors which represent the unitary matrixZ(seeFurther Details). Slay, tiny scalar factors, slay π.WORKβ is aCOMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. The workspace bestie has entered the chat πΈ.LWORKβ isINTEGER. 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 QR factorization of anN-by-Mmatrix,NB2is the optimal blocksize for the RQ factorization of anN-by-Pmatrix, andNB3is the optimal blocksize for a call ofZUNMQR.
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. That's the "just asking, not committing" vibe π.
INFOβ isINTEGER.= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value. Ruh-roh π.
π 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(n,m).
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(1:i-1) = 0 and v(i) = 1; v(i+1:n) is stored on exit in A(i+1:n,i), and taua in TAUA(i). To form Q explicitly, use LAPACK subroutine ZUNGQR. To use Q to update another matrix, use LAPACK subroutine ZUNMQR. Iconic behavior honestly π
β¨.
The matrix Z is represented as a product of elementary reflectors
Z = H(1) H(2) . . . H(k), where k = min(n,p).
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(p-k+i+1:p) = 0 and v(p-k+i) = 1; v(1:p-k+i-1) is stored on exit in B(n-k+i,1:p-k+i-1), and taub in TAUB(i). To form Z explicitly, use LAPACK subroutine ZUNGRQ. To use Z to update another matrix, use LAPACK subroutine ZUNMRQ. Chef's kiss, no notes π§π.
Definition at line 213 of file zggqrf.f.
π§ Author π§
Generated automatically by Doxygen for LAPACK from the source code.
Source/version check, bestie: LAPACK Version 3.12.0, page ggqrf(3). The footer doesn't give us a date, so I'm not inventing one β no fake-date energy here, periodt ππ.
π¦ 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