/home/abui.../clatsqr.f(3)
π¦ CLATSQR β the blocked Tall-Skinny QR glow-up (Fortran edition)
okay so bestie, this page is the manual for /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/clatsqr.f, a Library Functions Manual situation, and it is literally about a Fortran subroutine that does a blocked TSQR on a complex matrix. main character energy fr fr β¨
π SYNOPSIS
Functions/Subroutines
subroutine CLATSQR (m, n, mb, nb, a, lda, t, ldt, work, lwork, info)
CLATSQR β that's the whole name, no notes, iconic behavior only π
π Function/Subroutine Documentation
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 π«Ά
πΈ Purpose:
!>
!> 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.
!>
!>
so basically: you hand it a tall skinny complex matrix A (M >= N), and it factorizes it as A = Q * (R ; 0). Q is M-by-M orthogonal but it does not get stored as a big obvious matrix β it lives implicitly below the diagonal of A plus inside T. R is the upper-triangular N-by-N cutie, sitting on and above the diagonal of A. and the zero block, (M-N)-by-N? not stored at all. we simply do not perceive it π
β Parameters
MβM is INTEGER. the number of rows ofA. constraint:M >= 0. no negative row era allowed π ββοΈNβN is INTEGER. the number of columns ofA. constraint:M >= N >= 0. so N can't outgrow M, that's the whole "tall-skinny" thing bestie π±MBβMB is INTEGER. the row block size used in the blocked QR. constraint:MB > N. strictly greater, not equal, watch out πNBβNB is INTEGER. the column block size used in the blocked QR. constraint:N >= NB >= 1.AβA is COMPLEX array, dimension (LDA,N). on entry, it's 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(peep Further Details below for the tea π΅).LDAβLDA is INTEGER. the leading dimension of the arrayA. constraint:LDA >= max(1,M).TβT is COMPLEX array, dimension (LDT, N * Number_of_row_blocks)whereNumber_of_row_blocks = CEIL((M-N)/(MB-N)). the blocked upper triangular block reflectors are stored in compact form as a sequence of upper triangular blocks. more deets down in Further Details πLDTβLDT is INTEGER. the leading dimension of the arrayT. constraint:LDT >= NB.WORKβ(workspace) COMPLEX array, dimension (MAX(1,LWORK)). the scratch space, doing the behind-the-scenes work soAdoesn't have to π«‘LWORKβLWORK is INTEGER. the dimension of the arrayWORK. constraint:LWORK >= NB*N. and okay important: 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. so-1is the "just tell me how much room I need" mode, no cap β¨INFOβINFO is 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.
(shoutout to the whole committee, they ate π«Ά)
π§ 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 vibe is: TSQR does QR by stacking a bunch of orthogonal transformations, Q = Q(1) * Q(2) * . . . * Q(k), and each Q(i) zeroes out subdiagonal entries of a block of MB rows of A. Q(1) handles rows 1:MB, Q(2) handles the bottom MB-N rows of rows [1:N,MB+1:2*MB-N], Q(3) handles the bottom MB-N rows of rows [1:N,2*MB-N+1:3*MB-2*N], and so on forever-ish β¨
Q(1) comes from GEQRT, which stores Householder vectors under the diagonal of rows 1:MB of A and upper triangular block reflectors in T(1:LDT,1:N). Q(i) for i>1 comes from TPQRT, with Householder vectors in rows [(i-1)*(MB-N)+N+1:i*(MB-N)+N] of A and block reflectors in T(1:LDT,(i-1)*N+1:i*N). the last Q(k) might use fewer rows, she's flexible like that πββοΈ
nerd corner π: for the full algorithm tea, see the description of Sequential TSQR in Section 2.2 of [1], βCommunication-Optimal Parallel and Sequential QR and LU Factorizations,β by J. Demmel, L. Grigori, M. Hoemmen, J. Langou, SIAM J. Sci. Comput, vol. 34, no. 1, 2012. iykyk π
π Definition at line 167 of file clatsqr.f.
π sign-off
this whole thing was generated automatically by Doxygen for LAPACK from the source code, brought to you by LAPACK, Version 3.12.0, and the file herself: /home/abui.../clatsqr.f(3). slay, go factorize something tall and skinny π
β¨π¦
π¦ 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