SGEQP3RK(3)
β¨ SGEQP3RK(3) β¨ β from the Library Functions Manual, bestie! π
NAME
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sgeqp3rk.f
that's the file, no cap. π
SYNOPSIS
Functions/Subroutines
subroutine SGEQP3RK (m, n, nrhs, kmax, abstol, reltol, a, lda, k,
maxc2nrmk, relmaxc2nrmk, jpiv, tau, work, lwork, iwork, info)
so what does it do? SGEQP3RK 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. iconic. β¨
Function/Subroutine Documentation
okay so here's the full signature with all the types and dimensions, periodt:
subroutine SGEQP3RK (integer m, integer n, integer nrhs, integer kmax, real
abstol, real reltol, real, dimension( lda, * ) a, integer lda, integer
k, real maxc2nrmk, real relmaxc2nrmk, integer, dimension( * ) jpiv,
real, dimension( * ) tau, real, dimension( * ) work, integer lwork,
integer, dimension( * ) iwork, integer info)
and the one-liner is literally: SGEQP3RK 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 SGEQP3RK is literally doing two tasks at the same time, multitasking queen π
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. the factorization rank of the factor R, and K <= min(M,N).
Here's the math 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 an N-by-N permutation matrix;
- Q(K) is an M-by-M orthogonal matrix;
- R(K)_approx = ( R11(K), R12(K) ) is a rank K approximation of the full rank factor R with K-by-K upper-triangular R11(K) and K-by-N rectangular R12(K). The diagonal entries of R11(K) appear in non-increasing order of absolute value, and absolute values of all of them exceed the maximum column 2-norm of R22(K) up to roundoff error.
- R(K)_residual = R22(K) is the residual of a rank K approximation of the full rank factor R. It is a an (M-K)-by-(N-K) rectangular matrix;
- 0 is a an (M-K)-by-K zero 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.
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:
- The input parameter KMAX, the maximum number of columns KMAX to factorize, i.e. the factorization rank is limited to KMAX. If
KMAX >= min(M,N), the criterion is not used. - The input parameter ABSTOL, the absolute tolerance for the maximum column 2-norm of the residual matrix R22(K). This means that the factorization stops if this norm is less or equal to ABSTOL. If
ABSTOL < 0.0, the criterion is not used. - The input parameter RELTOL, the tolerance for the maximum column 2-norm matrix of the residual matrix R22(K) divided by the maximum column 2-norm of the original matrix A, which is equal to
abs(R(1,1)). This means that the factorization stops when the ratio of the maximum column 2-norm of R22(K) to the maximum column 2-norm of A is less than or equal to RELTOL. IfRELTOL < 0.0, the criterion is not used. - In case both stopping criteria ABSTOL or RELTOL are not used, and when the residual matrix R22(K) is a zero matrix in some factorization step K. ( This stopping criterion is implicit. )
The algorithm stops when any of these conditions is first satisfied, otherwise the whole matrix A is factorized.
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 by JPIV, ( if
K = min(M,N), R(K)_approx is the full factor R, and there is no residual matrix R(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 matrix R(K)_residual = R22(K), ( if
K = min(M,N),MAXC2NRMK = 0.0); - d) RELMAXC2NRMK equals MAXC2NRMK divided by MAXC2NRM, the maximum column 2-norm of the original matrix A, which is equal to
abs(R(1,1)), ( ifK = min(M,N),RELMAXC2NRMK = 0.0); - e)
Q(K)**T * B, the matrix B with 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:
- I is an M-by-M identity matrix,
- tau is a real scalar,
- v is a real vector with
v(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. no negative rows allowed, bestie π
N
N is INTEGER. The number of columns of the matrix A. N >= 0. periodt πΈ
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 on ABSTOL and RELTOL. - 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 matrices A and B are not modified, and the matrix A is itself the residual. π
ABSTOL
ABSTOL is REAL.
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 = SLAMCH('S').
- a) If ABSTOL is NaN, then no computation is performed and an error message (
INFO = -5) is issued by XERBLA. - b) If
ABSTOL < 0.0, then this stopping criterion is not used, the routine factorizes columns depending on KMAX and RELTOL. 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 of ABSTOL is 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
(and that's where part 1 cuts off β RELTOL details are coming in part 2, stay tuned bestie! π)
RELTOLisREALβ the third factorization stopping criterion, and bestie, it literally cannot be NaN. It's the tolerance (aka the stopping threshold) for the ratioabs(R(K+1,K+1))/abs(R(1,1))β that's the max column 2-norm of the residual matrixR22(K)over the max column 2-norm of the original matrixA. The algorithm converges (i.e. stops the factorization) whenabs(R(K+1,K+1))/abs(R(1,1))ofAis less than or equal toRELTOL. And letEPS = SLAMCH('E'), periodt. β¨
Here's the vibe check on what RELTOL can be, fr:
- a) if
RELTOLisNaN, then literally no computation happens and an error message (INFO = -6) gets issued byXERBLA. Not the moment. π - b) if
RELTOL < 0.0, this stopping criterion is just⦠not used, and the routine factorizes columns depending onKMAXandABSTOL. This includes the caseRELTOL = -Inf. - c) if
0.0 <= RELTOL < EPS, thenRELTOL = EPSis used instead. This includes the caseRELTOL = -0.0(yes, negative zero counts, she's included π«Ά). - d) if
EPS <= RELTOL, then the input value ofRELTOLis used, as-is. Iconic.
Now, let MAXC2NRM be the maximum column 2-norm of the whole original matrix A. If the RELTOL chosen above is >= 1.0, then this stopping criterion is satisfied on input and the routine exits immediately after MAXC2NRM is computed. It returns MAXC2NRM in MAXC2NORMK, and 1.0 in RELMAXC2NORMK. This includes the case RELTOL = +Inf. Which means: the factorization is not performed, matrices A and B are not modified, and matrix A is itself the residual. Zero notes taken, we're leaving early π
NOTE: we recommend thatRELTOLsatisfymin( max(M,N)*EPS, sqrt(EPS) ) <= RELTOL
AisREAL 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.
Ok so picture it like this, bestie:
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, and the plot thickens:- if
K = 0, thenA(1:M,1:N)contains the original matrixA. No thoughts, head empty, unchanged. - if
K > 0, thenA(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. Slay. - the elements on and above the diagonal of the subarray
A(1:K,1:N)contain theK-by-Nupper-trapezoidal matrixR(K)_approx = ( R11(K), R12(K) ).
- the elements below the diagonal of the subarray
- if
NOTE: ifK=min(M,N), i.e. a full rank factorization, thenR_approx(K)is the full factorR, which is upper-trapezoidal. If, in addition,M>=N, thenRis upper-triangular. π
- the subarray
A(K+1:M,K+1:N)contains the(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.
LDAisINTEGERβ the leading dimension of the arrayA, andLDA >= max(1,M). Heads up: this is the leading dimension for both matrices,AandB. One number, two jobs, main character energy πKisINTEGERβ the factorization rank of the matrixA, i.e. the rank of the factorR, which is the same as the number of non-zero rows of the factorR. And0 <= K <= min(M,KMAX,N).Kalso represents the number of non-zero Householder vectors. Two jobs again, we love a multitasker β¨
NOTE: ifK = 0, then: - 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.
MAXC2NRMKisREALβ the maximum column 2-norm of the residual matrixR22(K), when the factorization stopped at rankK. AndMAXC2NRMK >= 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. Clean slate, no notes π
- a) if
NOTE:MAXC2NRMKin the factorization stepKwould equalR(K+1,K+1)in the next factorization stepK+1. Foreshadowing fr.
RELMAXC2NRMKisREALβ the ratioMAXC2NRMK / MAXC2NRM, i.e. the maximum column 2-norm of the residual matrixR22(K)(when the factorization stopped at rankK) over the maximum column 2-norm of the whole original matrixA. AndRELMAXC2NRMK >= 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.
- a) if
NOTE:RELMAXC2NRMKin the factorization stepKwould equalabs(R(K+1,K+1))/abs(R(1,1))in the next factorization stepK+1. Told you it was foreshadowing π₯
JPIVisINTEGER array, dimension (N)β the column pivot indices. For1 <= j <= N, columnjof the matrixAwas interchanged with columnJPIV(j).
The elements of the array JPIV(1:N) are always set by the routine β like, for example, even when no columns were factorized, i.e. when K = 0, the elements are still set as JPIV(j) = j for j = 1:N. She shows up even when there's nothing to do π«Ά
TAUisREAL 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 is 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 are therefore undefined. (And if K = 0, all elements of TAU are set to zero, if the matrix A does not contain NaN.) π careful bestie
WORKisREAL array, dimension (MAX(1,LWORK))β on exit, ifINFO = 0, thenWORK(1)returns the optimalLWORK. She's a gossip, she tells you what size you should have used πLWORKisINTEGERβ the dimension of the arrayWORK.LWORK >= (3*N + NRHS - 1)- for optimal performance,
LWORK >= (2*N + NB*( N+NRHS+1 )), whereNBis the optimal block size forSGEQP3RKreturned byILAENV. Minimal block sizeMINNB=2.
NOTE: the decision whether to use unblocked BLAS 2 or blocked BLAS 3 code is based not only on the dimensionLWORKof the available workspaceWORK, but also on the matrixAdimensionNvia the crossover pointNXreturned byILAENV. (ForNless thanNX, unblocked code should be used.)
And 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. It's just asking, not committing π
IWORKisINTEGER array, dimension (N-1)β it's a work array. (IWORKis used to store indices of columns for norm downdating in the residual matrix in the blocked step auxiliary subroutineSLAQP3RK.) Little backstage helper, never gets credited πINFOINFOisINTEGER, bestie, and it's literally the routine's β¨status reportβ¨:INFO = 0: successful exit. slay.INFO < 0: ifINFO = -i, thei-th argument had an illegal value.- If
INFO = j_1, where1 <= j_1 <= N, thenNaNwas detected and the routine stops the computation. Thej_1-th column of the matrixAor thej_1-th element of arrayTAUcontains the first occurrence ofNaNin the factorization stepK+1(whenKcolumns have been factorized).
On exit:
Kis set to the number of factorized columns without exception.MAXC2NRMKis set toNaN.RELMAXC2NRMKis set toNaN.TAU(K+1:min(M,N))is not set and contains undefined elements. Ifj_1=K+1,TAU(K+1)may containNaN.
- If
INFO = j_2, whereN+1 <= j_2 <= 2*N, then noNaNwas 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 π₯
SGEQP3RK is based on the same BLAS3 Householder QR factorization algorithm with column pivoting as in SGEQP3 routine which uses SLARFG 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 of A can be easily computed from R11(K) and R12(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 582 of file sgeqp3rk.f.
π§ Author π§
Generated automatically by Doxygen for LAPACK from the source code.
That's the whole tea β β this page's source/version footer is LAPACK Version 3.12.0, from /home/abui.../sgeqp3rk.f(3). Byeee bestie, go factor something iconic π
β¨
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms