SRC/dgeqp3rk.f(3)
πΈ NAME πΈ
SRC/dgeqp3rk.f β straight outta the Library Functions Manual, bestie. π
β¨ SYNOPSIS β¨
Under Functions/Subroutines, we've got this whole situation:
subroutine dgeqp3rk (m, n, nrhs, kmax, abstol, reltol, a, lda, k,
maxc2nrmk, relmaxc2nrmk, jpiv, tau, work, lwork, iwork, info)
And it does this: DGEQP3RK computes a truncated Householder QR factorization with column pivoting of a real m-by-n matrix A by using Level 3 BLAS and overwrites a real m-by-nrhs matrix B with Q**T * B. π
π Function/Subroutine Documentation π
Okay so here's the full signature, no cap:
subroutine dgeqp3rk (integer m, integer n, integer nrhs, integer kmax,
double precision abstol, double precision reltol, double precision,
dimension( lda, * ) a, integer lda, integer k, double precision
maxc2nrmk, double precision relmaxc2nrmk, integer, dimension( * ) jpiv,
double precision, dimension( * ) tau, double precision, dimension( * )
work, integer lwork, integer, dimension( * ) iwork, integer info)
DGEQP3RK computes a truncated Householder QR factorization with column pivoting of a real m-by-n matrix A by using Level 3 BLAS and overwrites a real m-by-nrhs matrix B with Q**T * B. β¨
π Purpose π
okay so DGEQP3RK is out here doing two tasks simultaneously, and honestly? main character energy. π
β Task 1 β
The routine computes a truncated (rank K) or full rank Householder QR factorization with column pivoting of a real M-by-N matrix A using Level 3 BLAS. K is the number of columns that were factorized, i.e. factorization rank of the factor R, and K <= min(M,N). π«Ά
Here's the whole equation vibe:
A * P(K) = Q(K) * R(K) =
= Q(K) * ( R11(K) R12(K) ) = Q(K) * ( R(K)_approx )
( 0 R22(K) ) ( 0 R(K)_residual ),
where:
P(K)is anN-by-Npermutation matrix;Q(K)is anM-by-Morthogonal matrix;R(K)_approx = ( R11(K), R12(K) )is a rankKapproximation of the full rank factorRwithK-by-Kupper-triangularR11(K)andK-by-NrectangularR12(K). The diagonal entries ofR11(K)appear in non-increasing order of absolute value, and absolute values of all of them exceed the maximum column 2-norm ofR22(K)up to roundoff error. π₯R(K)_residual = R22(K)is the residual of a rankKapproximation of the full rank factorR. It is an(M-K)-by-(N-K)rectangular matrix;0is an(M-K)-by-Kzero matrix.
π Task 2 π
At the same time, the routine overwrites a real M-by-NRHS matrix B with Q(K)**T * B using Level 3 BLAS. π¦
=====================================================================
The matrices A and B are stored on input in the array A as the left and right blocks A(1:M,1:N) and A(1:M, N+1:N+NRHS) respectively. Look:
N NRHS
array_A = M [ mat_A, mat_B ]
The truncation criteria (i.e. when to stop the factorization) can be any of the following, bestie:
- The input parameter
KMAX, the maximum number of columnsKMAXto factorize, i.e. the factorization rank is limited toKMAX. IfKMAX >= min(M,N), the criterion is not used. π― - The input parameter
ABSTOL, the absolute tolerance for the maximum column 2-norm of the residual matrixR22(K). This means that the factorization stops if this norm is less or equal toABSTOL. IfABSTOL < 0.0, the criterion is not used. - The input parameter
RELTOL, the tolerance for the maximum column 2-norm matrix of the residual matrixR22(K)divided by the maximum column 2-norm of the original matrixA, which is equal toabs(R(1,1)). This means that the factorization stops when the ratio of the maximum column 2-norm ofR22(K)to the maximum column 2-norm ofAis less than or equal toRELTOL. IfRELTOL < 0.0, the criterion is not used. π - In case both stopping criteria
ABSTOLorRELTOLare not used, and when the residual matrixR22(K)is a zero matrix in some factorization stepK. ( This stopping criterion is implicit. ) π
The algorithm stops when any of these conditions is first satisfied, otherwise the whole matrix A is factorized. periodt.
To factorize the whole matrix A, use the values KMAX >= min(M,N), ABSTOL < 0.0 and RELTOL < 0.0. β¨
The routine returns:
- a)
Q(K),R(K)_approx = ( R11(K), R12(K) ),R(K)_residual = R22(K),P(K), i.e. the resulting matrices of the factorization;P(K)is represented byJPIV, ( ifK = min(M,N),R(K)_approxis the full factorR, and there is no residual matrixR(K)_residual); - b)
K, the number of columns that were factorized, i.e. factorization rank; - c)
MAXC2NRMK, the maximum column 2-norm of the residual matrixR(K)_residual = R22(K), ( ifK = min(M,N),MAXC2NRMK = 0.0); - d)
RELMAXC2NRMKequalsMAXC2NRMKdivided byMAXC2NRM, the maximum column 2-norm of the original matrixA, which is equal toabs(R(1,1)), ( ifK = min(M,N),RELMAXC2NRMK = 0.0); - e)
Q(K)**T * B, the matrixBwith the orthogonal transformationQ(K)**Tapplied on the left. π
The N-by-N permutation matrix P(K) is stored in a compact form in the integer array JPIV. For 1 <= j <= N, column j of the matrix A was interchanged with column JPIV(j). π
The M-by-M orthogonal matrix Q is represented as a product of elementary Householder reflectors:
Q(K) = H(1) * H(2) * . . . * H(K),
where K is the number of columns that were factorized.
Each H(j) has the form:
H(j) = I - tau * v * v**T,
where 1 <= j <= K and:
Iis anM-by-Midentity matrix,tauis a real scalar,vis a real vector withv(1:j-1) = 0andv(j) = 1.
v(j+1:M) is stored on exit in A(j+1:M,j) and tau in TAU(j). π
See the Further Details section for more information. π
π«Ά Parameters π«Ά
M
M is INTEGER. The number of rows of the matrix A. M >= 0. πΈ
N
N is INTEGER. The number of columns of the matrix A. N >= 0. π¦
NRHS
NRHS is INTEGER. The number of right hand sides, i.e. the number of columns of the matrix B. NRHS >= 0. β¨
KMAX
KMAX is INTEGER.
The first factorization stopping criterion. KMAX >= 0. π―
The maximum number of columns of the matrix A to factorize, i.e. the maximum factorization rank.
- a) If
KMAX >= min(M,N), then this stopping criterion is not used, the routine factorizes columns depending onABSTOLandRELTOL. - b) If
KMAX = 0, then this stopping criterion is satisfied on input and the routine exits immediately. This means that the factorization is not performed, the matricesAandBare not modified, and the matrixAis itself the residual. π
ABSTOL
ABSTOL is DOUBLE PRECISION.
The second factorization stopping criterion, cannot be NaN. π«Ά
The absolute tolerance (stopping threshold) for maximum column 2-norm of the residual matrix R22(K). The algorithm converges (stops the factorization) when the maximum column 2-norm of the residual matrix R22(K) is less than or equal to ABSTOL. Let SAFMIN = DLAMCH('S').
- a) If
ABSTOLisNaN, then no computation is performed and an error message (INFO = -5) is issued byXERBLA. - b) If
ABSTOL < 0.0, then this stopping criterion is not used, the routine factorizes columns depending onKMAXandRELTOL. This includes the caseABSTOL = -Inf. - c) If
0.0 <= ABSTOL < 2*SAFMIN, thenABSTOL = 2*SAFMINis used. This includes the caseABSTOL = -0.0. - d) If
2*SAFMIN <= ABSTOLthen the input value ofABSTOLis used. β¨
Let MAXC2NRM be the maximum column 2-norm of the whole original matrix A. If ABSTOL chosen above is >= MAXC2NRM, then this stopping criterion is satisfied on input and routine exits immediately after MAXC2NRM is computed. The routine returns MAXC2NRM in MAXC2NORMK, and 1.0 in RELMAXC2NORMK. This includes the case ABSTOL = +Inf. This means that the factorization is not performed, the matrices A and B are not modified, and the matrix A is itself the residual. π
RELTOL
So RELTOL is DOUBLE PRECISION, bestie β it's the third factorization stopping criterion, and it cannot be NaN. It's the tolerance (stopping threshold) for the ratio abs(R(K+1,K+1))/abs(R(1,1)) of the maximum column 2-norm of the residual matrix R22(K) to the maximum column 2-norm of the original matrix A. The algorithm converges (stops the factorization) when abs(R(K+1,K+1))/abs(R(1,1)) A is less than or equal to RELTOL. Let EPS = DLAMCH('E').
- a) If
RELTOLisNaN, then no computation is performed and an error message (INFO = -6) is issued byXERBLA. Not the vibe, honestly π. - b) If
RELTOL < 0.0, then this stopping criterion is not used, and the routine factorizes columns depending onKMAXandABSTOL. This includes the caseRELTOL = -Inf. Periodt. - c) If
0.0 <= RELTOL < EPS, thenRELTOL = EPSis used. This includes the caseRELTOL = -0.0. Not me side-eyeing-0.0π . - d) If
EPS <= RELTOLthen the input value ofRELTOLis used.
Let MAXC2NRM be the maximum column 2-norm of the whole original matrix A. If RELTOL chosen above is >= 1.0, then this stopping criterion is satisfied on input and the routine exits immediately after MAXC2NRM is computed. The routine returns MAXC2NRM in MAXC2NORMK, and 1.0 in RELMAXC2NORMK. This includes the case RELTOL = +Inf. This means that the factorization is not performed, the matrices A and B are not modified, and the matrix A is itself the residual. Iconic early exit, no cap β¨.
π NOTE: We recommend thatRELTOLsatisfymin( max(M,N)*EPS, sqrt(EPS) ) <= RELTOL.
πΈ A
A is DOUBLE PRECISION array, dimension (LDA,N+NRHS).
- On entry:
- a) The subarray
A(1:M,1:N)contains theM-by-NmatrixA. - b) The subarray
A(1:M,N+1:N+NRHS)contains theM-by-NRHSmatrixB.
- a) The subarray
N NRHS
array_A = M [ mat_A, mat_B ]
- On exit:
- a) The subarray
A(1:M,1:N)contains parts of the factors of the matrixA:- If
K = 0,A(1:M,1:N)contains the original matrixA. - If
K > 0,A(1:M,1:N)contains parts of the factors:- The elements below the diagonal of the subarray
A(1:M,1:K)together withTAU(1:K)represent the orthogonal matrixQ(K)as a product ofKHouseholder elementary reflectors. - The elements on and above the diagonal of the subarray
A(1:K,1:N)containK-by-Nupper-trapezoidal matrixR(K)_approx = ( R11(K), R12(K) ).
- The elements below the diagonal of the subarray
- If
- a) The subarray
NOTE: IfK=min(M,N), i.e. full rank factorization, thenR_approx(K)is the full factorRwhich is upper-trapezoidal. If, in addition,M>=N, thenRis upper-triangular.
- The subarray
A(K+1:M,K+1:N)contains(M-K)-by-(N-K)rectangular matrixR(K)_residual = R22(K).
- b) If
NRHS > 0, the subarrayA(1:M,N+1:N+NRHS)contains theM-by-NRHSproductQ(K)**T * B.
π LDA
LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M). This is the leading dimension for both matrices, A and B.
π¦ K
K is INTEGER. Factorization rank of the matrix A, i.e. the rank of the factor R, which is the same as the number of non-zero rows of the factor R. 0 <= K <= min(M,KMAX,N).
K also represents the number of non-zero Householder vectors.
NOTE: IfK = 0, a) the arraysAandBare not modified; b) the arrayTAU(1:min(M,N))is set toZERO, if the matrixAdoes not containNaN, otherwise the elementsTAU(1:min(M,N))are undefined; c) the elements of the arrayJPIVare set as follows: forj = 1:N,JPIV(j) = j.
π₯ MAXC2NRMK
MAXC2NRMK is DOUBLE PRECISION. The maximum column 2-norm of the residual matrix R22(K), when the factorization stopped at rank K. MAXC2NRMK >= 0.
- a) If
K = 0, i.e. the factorization was not performed, the matrixAwas not modified and is itself a residual matrix, thenMAXC2NRMKequals the maximum column 2-norm of the original matrixA. - b) If
0 < K < min(M,N), thenMAXC2NRMKis returned. - c) If
K = min(M,N), i.e. the whole matrixAwas factorized and there is no residual matrix, thenMAXC2NRMK = 0.0.
NOTE:MAXC2NRMKin the factorization stepKwould equalR(K+1,K+1)in the next factorization stepK+1.
π RELMAXC2NRMK
RELMAXC2NRMK is DOUBLE PRECISION. The ratio MAXC2NRMK / MAXC2NRM of the maximum column 2-norm of the residual matrix R22(K) (when the factorization stopped at rank K) to the maximum column 2-norm of the whole original matrix A. RELMAXC2NRMK >= 0.
- a) If
K = 0, i.e. the factorization was not performed, the matrixAwas not modified and is itself a residual matrix, thenRELMAXC2NRMK = 1.0. - b) If
0 < K < min(M,N), thenRELMAXC2NRMK = MAXC2NRMK / MAXC2NRMis returned. - c) If
K = min(M,N), i.e. the whole matrixAwas factorized and there is no residual matrix, thenRELMAXC2NRMK = 0.0.
NOTE:RELMAXC2NRMKin the factorization stepKwould equalabs(R(K+1,K+1))/abs(R(1,1))in the next factorization stepK+1.
π JPIV
JPIV is INTEGER array, dimension (N). Column pivot indices. For 1 <= j <= N, column j of the matrix A was interchanged with column JPIV(j).
The elements of the array JPIV(1:N) are always set by the routine, for example, even when no columns were factorized, i.e. when K = 0, the elements are set as JPIV(j) = j for j = 1:N.
πΈ TAU
TAU is DOUBLE PRECISION array, dimension (min(M,N)). The scalar factors of the elementary reflectors.
If 0 < K <= min(M,N), only the elements TAU(1:K) of the array TAU are modified by the factorization. After the factorization computed, if no NaN was found during the factorization, the remaining elements TAU(K+1:min(M,N)) are set to zero, otherwise the elements TAU(K+1:min(M,N)) are not set and therefore undefined.
( If K = 0, all elements of TAU are set to zero, if the matrix A does not contain NaN. )
β WORK
WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
π§ LWORK
LWORK is INTEGER. The dimension of the array WORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= (3*N+NRHS-1), otherwise. For optimal performance LWORK >= (2*N + NB*( N+NRHS+1 )), where NB is the optimal block size for DGEQP3RK returned by ILAENV. Minimal block size MINNB=2.
NOTE: The decision, whether to use unblockedBLAS 2or blockedBLAS 3code is based not only on the dimensionLWORKof the available workspaceWORK, but also on the matrixAdimensionNvia crossover pointNXreturned byILAENV. (ForNless thanNX, unblocked code should be used.)
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.
π
IWORK
IWORK is INTEGER array, dimension (N-1). Is a work array. ( IWORK is used to store indices of columns for norm downdating in the residual matrix in the blocked step auxiliary subroutine DLAQP3RK ).
π INFO
Okay bestie, INFO is the next parameter and its full description is literally coming right up β we're not skipping it, promise π«Άβ¨
INFOisINTEGERβ and bestie, the value tells you so much:INFO = 0: successful exit. slay.INFO < 0: ifINFO = -i, thei-th argument had an illegal value.- If
INFO = j_1, where1 <= j_1 <= N, then NaN was detected and the routine stops the computation. Thej_1-th column of the matrixAor thej_1-th element of arrayTAUcontains the first occurrence of NaN in the factorization stepK+1(whenKcolumns have been factorized).
On exit:
Kis set to the number of factorized columns without exception.MAXC2NRMKis set to NaN.RELMAXC2NRMKis set to NaN.TAU(K+1:min(M,N))is not set and contains undefined elements. Ifj_1=K+1,TAU(K+1)may contain NaN.
- If
INFO = j_2, whereN+1 <= j_2 <= 2*N, then no NaN was detected, but+Inf(or-Inf) was detected and the routine continues the computation until completion. The(j_2-N)-th column of the matrixAcontains the first occurrence of+Inf(or-Inf) in the factorization stepK+1(whenKcolumns have been factorized).
π Author π«Ά
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details:
DGEQP3RK is based on the same BLAS3 Householder QR factorization algorithm with column pivoting as in DGEQP3 routine which uses DLARFG routine to generate Householder reflectors for QR factorization.
We can also write:
A = A_approx(K) + A_residual(K)
The low rank approximation matrix A(K)_approx from the truncated QR factorization of rank K of the matrix A is:
A(K)_approx = Q(K) * ( R(K)_approx ) * P(K)**T
( 0 0 )
= Q(K) * ( R11(K) R12(K) ) * P(K)**T
( 0 0 )
The residual A_residual(K) of the matrix A is:
A_residual(K) = Q(K) * ( 0 0 ) * P(K)**T =
( 0 R(K)_residual )
= Q(K) * ( 0 0 ) * P(K)**T
( 0 R22(K) )
The truncated (rank K) factorization guarantees that the maximum column 2-norm of A_residual(K) is less than or equal to MAXC2NRMK up to roundoff error.
NOTE: An approximation of the null vectors ofAcan be easily computed fromR11(K)andR12(K):
Null( A(K) )_approx = P * ( inv(R11(K)) * R12(K) )
( -I )
π References:
- [1] A Level 3 BLAS QR factorization algorithm with column pivoting developed in 1996. G. Quintana-Orti, Depto. de Informatica, Universidad Jaime I, Spain. X. Sun, Computer Science Dept., Duke University, USA. C. H. Bischof, Math. and Comp. Sci. Div., Argonne National Lab, USA. A BLAS-3 version of the QR factorization with column pivoting. LAPACK Working Note 114 and in SIAM J. Sci. Comput., 19(5):1486-1494, Sept. 1998.
- [2] A partial column norm updating strategy developed in 2006. Z. Drmac and Z. Bujanovic, Dept. of Math., University of Zagreb, Croatia. On the failure of rank revealing QR factorization software β a case study. LAPACK Working Note 176. and in ACM Trans. Math. Softw. 35, 2, Article 12 (July 2008), 28 pages.
π Contributors:
November 2023, Igor Kozachenko, James Demmel, EECS Department, University of California, Berkeley, USA.
Definition at line 583 of file dgeqp3rk.f.
Author π
Generated automatically by Doxygen for LAPACK from the source code.
okay thatβs the whole page, bestie π«Ά β footer vibes: source SRC/dgeqp3rk.f(3), version LAPACK Version 3.12.0, and thereβs no date line in this footer so Iβm not making one up π
β¨
π¦ 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