SRC/dggqrf.f(3)
π NAME π
SRC/dggqrf.f β okay bestie, this is the SRC/dggqrf.f(3) manual page from the Library Functions Manual, and it's all about the DGGQRF routine. π
β¨ SYNOPSIS β¨
π§ Functions/Subroutines π§
subroutine dggqrf (n, m, p, a, lda, taua, b, ldb, taub, work, lwork, info)
DGGQRF
π¦ Function/Subroutine Documentation π¦
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)
DGGQRF
π Purpose π
Okay so this one is a whole generalized QR factorization moment: 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βN is INTEGER. The number of rows of the matrices A and B.N >= 0.MβM is INTEGER. The number of columns of the matrix A.M >= 0.PβP is INTEGER. The number of columns of the matrix B.P >= 0.AβA is DOUBLE PRECISION array, dimension (LDA,M). On entry, the N-by-M matrix A. On exit, the elements on and above the diagonal of the array contain themin(N,M)-by-M upper trapezoidal matrix R (R is upper triangular ifN >= M); the elements below the diagonal, with the array TAUA, represent the orthogonal matrix Q as a product ofmin(N,M)elementary reflectors (see Further Details).LDAβLDA is INTEGER. The leading dimension of the array A.LDA >= max(1,N).TAUAβTAUA is DOUBLE PRECISION array, dimension (min(N,M)). The scalar factors of the elementary reflectors which represent the orthogonal matrix Q (see Further Details).BβB is DOUBLE PRECISION array, dimension (LDB,P). On entry, the N-by-P matrix B. On exit, ifN <= P, the upper triangle of the subarrayB(1:N,P-N+1:P)contains the N-by-N upper triangular matrix T; ifN > 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βLDB is INTEGER. The leading dimension of the array B.LDB >= max(1,N).TAUBβTAUB is DOUBLE PRECISION array, dimension (min(N,P)). The scalar factors of the elementary reflectors which represent the orthogonal matrix Z (see Further Details).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 array WORK.LWORK >= max(1,N,M,P). For optimum performanceLWORK >= max(N,M,P)*max(NB1,NB2,NB3), where NB1 is the optimal blocksize for the QR factorization of an N-by-M matrix, NB2 is the optimal blocksize for the RQ factorization of an N-by-P matrix, and NB3 is the optimal blocksize for a call ofDORMQR.
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.
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.
π₯ 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.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
π That's the whole page, bestie! It's the LAPACK Version 3.12.0 manual page for SRC/dggqrf.f(3). π
π¦ 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