latsqr(3)

πŸ’… latsqr β€” the tall-skinny QR factor bestie πŸ’…

okay so bestie, welcome to latsqr(3) from the Library Functions Manual β€” this is where the tall-skinny QR factorization lives, and honestly? it's giving main character energy in the world of blocked QR. πŸŽ€


✨ NAME ✨

latsqr β€” latsqr: tall-skinny QR factor. that's the whole vibe. short name, big job. πŸ¦‹


🌸 SYNOPSIS 🌸

🫢 Functions

okay so there's not one but FOUR of these bad boys, one per flavour of precision and complexity. pick your fighter:

  • subroutine clatsqr (m, n, mb, nb, a, lda, t, ldt, work, lwork, info) β€” the CLATSQR one πŸ’œ (complex, single precision)
  • subroutine dlatsqr (m, n, mb, nb, a, lda, t, ldt, work, lwork, info) β€” the DLATSQR one πŸ”₯ (double precision, real)
  • subroutine slatsqr (m, n, mb, nb, a, lda, t, ldt, work, lwork, info) β€” the SLATSQR one ⭐ (single precision, real)
  • subroutine zlatsqr (m, n, mb, nb, a, lda, t, ldt, work, lwork, info) β€” the ZLATSQR one πŸ‘‘ (complex, double precision)

same argument list for all four, only the types change. iconic behaviour honestly. ✨


πŸ¦‹ Detailed Description πŸ¦‹

this page is literally the function documentation for the whole latsqr family β€” the blocked tall-skinny QR routines. everything below is organised per-routine, so scroll to the flavour you need. (iykyk 🌈)


πŸŽ€ Function Documentation πŸŽ€

πŸ’– subroutine clatsqr

subroutine clatsqr (integer m, integer n, integer mb, integer nb, complex,
    dimension( lda, * ) a, integer lda, complex, dimension( ldt, * ) t,
    integer ldt, complex, dimension( * ) work, integer lwork, integer info)

CLATSQR β€” the complex single-precision one. πŸ’œ

🌸 Purpose

no cap, CLATSQR computes a blocked Tall-Skinny QR factorization of a complex 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. (we don't store zeros around here, that's so much unnecessary data πŸ’€)

✨ 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. M >= N >= 0.
  • MB β€” MB is INTEGER. The row block size to be used in the blocked QR. MB > N. πŸ‘€ (yes, note that it's MB > N here, not MB > 0 β€” the complex version is built different fr fr)
  • NB β€” NB is INTEGER. The column block size to be used in the blocked QR. N >= NB >= 1.
  • A β€” A is COMPLEX 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 below). 🫢
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • T β€” T is COMPLEX 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 β€” LDT is INTEGER. The leading dimension of the array T. LDT >= NB.
  • WORK β€” (workspace) COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ⭐
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= NB*N, otherwise.

if LWORK = -1, then a workspace query is assumed; the routine only calculates the minimal 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. (the classic "just tell me how much room I need" move πŸ™ˆ)

  • INFO β€” INFO is 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.

πŸ‘‘ Further Details

bestie, this is the good part. 🫢

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

Definition at line 170 of file clatsqr.f.


πŸ’œ subroutine dlatsqr

subroutine dlatsqr (integer m, integer n, integer mb, integer nb, double
    precision, dimension( lda, * ) a, integer lda, double precision,
    dimension( ldt, * ) t, integer ldt, double precision, dimension( * )
    work, integer lwork, integer info)

DLATSQR β€” the double-precision real one. πŸ”₯

🌸 Purpose

DLATSQR 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.

✨ 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. M >= N >= 0.
  • MB β€” MB is INTEGER. The row block size to be used in the blocked QR. MB > 0. πŸ‘€ (and yes, this one says MB > 0 β€” don't mix it up with CLATSQR's MB > N, I'm warning you gently 🫢)
  • NB β€” NB is INTEGER. The column block size to be used in the blocked QR. N >= NB >= 1.
  • A β€” A is DOUBLE PRECISION 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 below). πŸ¦‹
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • T β€” T is DOUBLE PRECISION 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 β€” LDT is INTEGER. The leading dimension of the array T. LDT >= NB.
  • WORK β€” (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ⭐
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= NB*N, otherwise.

if LWORK = -1, then a workspace query is assumed; the routine only calculates the minimal 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: 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.

πŸ‘‘ 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

Definition at line 170 of file dlatsqr.f.


okay that's the chunky part handled πŸ’… slatsqr and zlatsqr are up next β€” don't go anywhere bestie 🫢

πŸ¦‹ subroutine slatsqr πŸ¦‹

   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 β€” bestie, this is the single-precision icon πŸ’…

✨ Purpose ✨

Okay so SLATSQR computes a blocked Tall-Skinny QR factorization of a real M-by-N matrix A for M >= N, and the way it does it is genuinely iconic:

   A = Q * ( R ),
           ( 0 )

where, fr fr:

  • 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.

No cap, that zero block is just not invited to the storage party πŸ™ˆ

πŸŽ€ 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. M >= N >= 0.

MB

MB is INTEGER The row block size to be used in the blocked QR. MB > N.

NB

NB is INTEGER The column block size to be used in the blocked QR. N >= NB >= 1.

A

A is 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).

LDA

LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M).

T

T is 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

LDT is INTEGER The leading dimension of the array T. LDT >= NB.

WORK

(workspace) REAL array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the minimal LWORK.

LWORK

LWORK is INTEGER The dimension of the array WORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= NB*N, otherwise.

If LWORK = -1, then a workspace query is assumed; the routine only calculates the minimal 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: 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.

πŸ’« 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

Definition at line 170 of file slatsqr.f.


πŸ¦‹ subroutine zlatsqr πŸ¦‹

   subroutine zlatsqr (integer m, integer n, integer mb, integer nb,
       complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension(
       ldt, * ) t, integer ldt, complex*16, dimension( * ) work, integer lwork,
       integer info)

ZLATSQR β€” and here's the complex*16 version, serving the same legendary energy ✨

✨ Purpose ✨

ZLATSQR computes a blocked Tall-Skinny QR factorization of a complex 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.

Same iconic decomposition, just with COMPLEX*16 sparkle 🫢

πŸŽ€ 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. M >= N >= 0.

MB

MB is INTEGER The row block size to be used in the blocked QR. MB > N.

NB

NB is INTEGER The column block size to be used in the blocked QR. N >= NB >= 1.

A

A is COMPLEX*16 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).

LDA

LDA is INTEGER The leading dimension of the array A. LDA >= max(1,M).

T

T is COMPLEX*16 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

LDT is INTEGER The leading dimension of the array T. LDT >= NB.

WORK

(workspace) COMPLEX*16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the minimal LWORK.

LWORK

LWORK is INTEGER The dimension of the array WORK. LWORK >= 1, if MIN(M,N) = 0, and LWORK >= NB*N, otherwise.

If LWORK = -1, then a workspace query is assumed; the routine only calculates the minimal 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: 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.

πŸ’« 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

Definition at line 170 of file zlatsqr.f.


🌟 Author 🌟

Generated automatically by Doxygen for LAPACK from the source code.

Okay bestie, that's the whole latsqr(3) page πŸ’– This lil masterpiece came from LAPACK Version 3.12.0, and the footer literally says latsqr(3) β€” so you know exactly where to find it again. Slay, and may your QR always be communication-optimal βœ¨πŸ‘‘
πŸ“¦ where this page comes from