/home/abui.../slatsqr.f(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

🌸 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 matrix A. M >= 0. (can be zero, she's flexible like that)
  • N β€” INTEGER, the number of columns of the matrix A. M >= N >= 0.
  • MB β€” INTEGER, the row block size used in the blocked QR. MB > N. no cap, she needs to actually be bigger than N πŸ’…
  • 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 matrix A. On exit, the elements on and above the diagonal of the array contain the N-by-N upper triangular matrix R; the elements below the diagonal represent Q by the columns of blocked V (see Further Details). same array, whole new personality πŸ”₯
  • LDA β€” INTEGER, the leading dimension of the array A. LDA >= max(1,M).
  • T β€” REAL array, dimension (LDT, N * Number_of_row_blocks) where Number_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 array T. LDT >= NB.
  • WORK β€” (workspace) REAL array, dimension (MAX(1,LWORK)).
  • LWORK β€” INTEGER, the dimension of the array WORK. LWORK >= NB*N. 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. (yes the -1 trick, classic LAPACK main character energy)
  • INFO β€” INTEGER:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -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 rows 1:MB of A
  • Q(2) zeroes out the bottom MB-N rows of rows [1:N,MB+1:2*MB-N] of A
  • Q(3) zeroes out the bottom MB-N rows of rows [1:N,2*MB-N+1:3*MB-2*N] of A
  • . . . 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