/home/abui.../slatsqr.f(3)
πΈ slatsqr.f πΈ
ok so bestie, you're looking at a page from the Library Functions Manual for /home/abui.../slatsqr.f(3) β yes that's the truncated path vibe, the real one lives further down. Buckle up π
β¨ NAME β¨
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/slatsqr.f
that's it, that's the whole name. the file is the name. iconic honestly π
π¦ SYNOPSIS π¦
Functions/Subroutines
subroutine SLATSQR (m, n, mb, nb, a, lda, t, ldt, work, lwork, info)β SLATSQR
π Function/Subroutine Documentation π
subroutine SLATSQR (integer m, integer n, integer mb, integer nb, real,
dimension( lda, * ) a, integer lda, real, dimension(ldt, *) t, integer
ldt, real, dimension( * ) work, integer lwork, integer info)
SLATSQR. that's the name, no notes β¨
π Purpose:
!>
!> SLATSQR computes a blocked Tall-Skinny QR factorization of
!> a real M-by-N matrix A for M >= N:
!>
!> A = Q * ( R ),
!> ( 0 )
!>
!> where:
!>
!> Q is a M-by-M orthogonal matrix, stored on exit in an implicit
!> form in the elements below the diagonal of the array A and in
!> the elements of the array T;
!>
!> R is an upper-triangular N-by-N matrix, stored on exit in
!> the elements on and above the diagonal of the array A.
!>
!> 0 is a (M-N)-by-N zero matrix, and is not stored.
!>
!>
so basically, bestie: you hand it a tall skinny real M-by-N matrix A with M >= N, and it factorizes it as A = Q times that stacked (R over 0) situation. Q is M-by-M orthogonal and it does not get written out as a whole matrix β it hides out implicitly in the stuff below the diagonal of A plus the array T. R is the N-by-N upper-triangular part sitting on and above the diagonal of A. and the (M-N)-by-N zero block? not stored at all, we simply do not keep it, zero matrix found unemployed π«Ά
π Parameters π
- M β
INTEGER, the number of rows of the matrixA.M >= 0. (can be zero, she's flexible like that) - N β
INTEGER, the number of columns of the matrixA.M >= N >= 0. - MB β
INTEGER, the row block size used in the blocked QR.MB > N. no cap, she needs to actually be bigger thanNπ - NB β
INTEGER, the column block size used in the blocked QR.N >= NB >= 1. - A β
REAL array, dimension (LDA,N). On entry, the M-by-N matrixA. On exit, the elements on and above the diagonal of the array contain the N-by-N upper triangular matrixR; the elements below the diagonal representQby the columns of blockedV(see Further Details). same array, whole new personality π₯ - LDA β
INTEGER, the leading dimension of the arrayA.LDA >= max(1,M). - T β
REAL array, dimension (LDT, N * Number_of_row_blocks)whereNumber_of_row_blocks = CEIL((M-N)/(MB-N)). the blocked upper triangular block reflectors, stored in compact form as a sequence of upper triangular blocks. See Further Details below. π§ - LDT β
INTEGER, the leading dimension of the arrayT.LDT >= NB. - WORK β (workspace)
REAL array, dimension (MAX(1,LWORK)). - LWORK β
INTEGER, the dimension of the arrayWORK.LWORK >= NB*N. 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. (yes the-1trick, classic LAPACK main character energy) - INFO β
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.
the whole squad credited, we love to see it π«Ά
β Further Details: β
!> Tall-Skinny QR (TSQR) performs QR by a sequence of orthogonal transformations,
!> representing Q as a product of other orthogonal matrices
!> Q = Q(1) * Q(2) * . . . * Q(k)
!> where each Q(i) zeros out subdiagonal entries of a block of MB rows of A:
!> Q(1) zeros out the subdiagonal entries of rows 1:MB of A
!> Q(2) zeros out the bottom MB-N rows of rows [1:N,MB+1:2*MB-N] of A
!> Q(3) zeros out the bottom MB-N rows of rows [1:N,2*MB-N+1:3*MB-2*N] of A
!> . . .
!>
!> Q(1) is computed by GEQRT, which represents Q(1) by Householder vectors
!> stored under the diagonal of rows 1:MB of A, and by upper triangular
!> block reflectors, stored in array T(1:LDT,1:N).
!> For more information see Further Details in GEQRT.
!>
!> Q(i) for i>1 is computed by TPQRT, which represents Q(i) by Householder vectors
!> stored in rows [(i-1)*(MB-N)+N+1:i*(MB-N)+N] of A, and by upper triangular
!> block reflectors, stored in array T(1:LDT,(i-1)*N+1:i*N).
!> The last Q(k) may use fewer rows.
!> For more information see Further Details in TPQRT.
!>
!> For more details of the overall algorithm, see the description of
!> Sequential TSQR in Section 2.2 of [1].
!>
!> [1] βCommunication-Optimal Parallel and Sequential QR and LU Factorizations,β
!> J. Demmel, L. Grigori, M. Hoemmen, J. Langou,
!> SIAM J. Sci. Comput, vol. 34, no. 1, 2012
!>
so the tea is: Tall-Skinny QR just stacks QR after QR after QR. Q is a product Q(1) * Q(2) * . . . * Q(k), and each Q(i) zeroes out subdiagonal entries of a block of MB rows of A:
Q(1)zeroes out the subdiagonal entries of rows1:MBofAQ(2)zeroes out the bottomMB-Nrows of rows[1:N,MB+1:2*MB-N]ofAQ(3)zeroes out the bottomMB-Nrows of rows[1:N,2*MB-N+1:3*MB-2*N]ofA. . .and so on, you get the pattern bestie
Q(1) comes from GEQRT, which represents Q(1) with Householder vectors stored under the diagonal of rows 1:MB of A, plus upper triangular block reflectors stored in T(1:LDT,1:N). more deets over in GEQRT's Further Details.
Q(i) for i>1 comes from TPQRT, which represents Q(i) with Householder vectors stored in rows [(i-1)*(MB-N)+N+1:i*(MB-N)+N] of A, plus upper triangular block reflectors in T(1:LDT,(i-1)*N+1:i*N). the last one, Q(k), may use fewer rows. more deets over in TPQRT's Further Details.
want the full algorithm lore? see the description of Sequential TSQR in Section 2.2 of [1]:
[1] βCommunication-Optimal Parallel and Sequential QR and LU Factorizations,β J. Demmel, L. Grigori, M. Hoemmen, J. Langou, SIAM J. Sci. Comput, vol. 34, no. 1, 2012
Definition at line 167 of file slatsqr.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
bestie the whole thing is auto-generated, so if a line looks a little feral, that's the Doxygen of it all π
ok bye ily, this page is LAPACK Version 3.12.0 from /home/abui.../slatsqr.f(3) β go factorize something tall and skinny, slay πβ¨
π¦ 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