SRC/stzrzf.f(3)

🌸 SRC/stzrzf.f β€” like, the library functions manual page for stzrzf (iykyk) 🌸

okay bestie so this is the SRC/stzrzf.f(3) page from the Library Functions Manual and it's literally all about one little Fortran subroutine that does one very specific slay. buckle up πŸ’…


✨ NAME ✨

SRC/stzrzf.f β€” that's it, that's the name, she's lowkey iconic for it πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine stzrzf (m, n, a, lda, tau, work, lwork, info) β€” STZRZF πŸ¦‹

✨ Function/Subroutine Documentation ✨

subroutine stzrzf (integer m, integer n, real, dimension( lda, * ) a,
    integer lda, real, dimension( * ) tau, real, dimension( * ) work,
    integer lwork, integer info)

STZRZF πŸ’–

🧚 Purpose 🧚

okay so here's the vibe, straight up:

!>
!> STZRZF reduces the M-by-N ( M<=N ) real upper trapezoidal matrix A
!> to upper triangular form by means of orthogonal transformations.
!>
!> The upper trapezoidal matrix A is factored as
!>
!>    A = ( R  0 ) * Z,
!>
!> where Z is an N-by-N orthogonal matrix and R is an M-by-M upper
!> triangular matrix.
!>

so she takes your real upper trapezoidal matrix A (M-by-N, and M<=N, no exceptions bestie) and reduces it to upper triangular form using orthogonal transformations. the glow-up is real ✨

🫢 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.  N >= M.
!>
  • A
!>          A is REAL array, dimension (LDA,N)
!>          On entry, the leading M-by-N upper trapezoidal part of the
!>          array A must contain the matrix to be factorized.
!>          On exit, the leading M-by-M upper triangular part of A
!>          contains the upper triangular matrix R, and elements M+1 to
!>          N of the first M rows of A, with the array TAU, represent the
!>          orthogonal matrix Z as a product of M elementary reflectors.
!>

she goes in as your trapezoidal situation and comes out holding R in the leading M-by-M upper triangular part πŸ’… and the rest? elements M+1 to N of the first M rows of A, together with TAU, are out here representing the orthogonal matrix Z as a product of M elementary reflectors. main character behavior fr fr.

  • LDA
!>          LDA is INTEGER
!>          The leading dimension of the array A.  LDA >= max(1,M).
!>
  • TAU
!>          TAU is REAL array, dimension (M)
!>          The scalar factors of the elementary reflectors.
!>
  • WORK
!>          WORK is REAL array, dimension (MAX(1,LWORK))
!>          On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
!>
  • LWORK
!>          LWORK is INTEGER
!>          The dimension of the array WORK.  LWORK >= max(1,M).
!>          For optimum performance LWORK >= M*NB, where NB is
!>          the optimal blocksize.
!>
!>          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.
!>
ngl the LWORK = -1 thing is a whole mood β€” you're not actually asking her to do the work, you're just asking her how much space she'd want. she answers in WORK(1) and XERBLA stays completely quiet about it. no drama. πŸŽ€
  • INFO
!>          INFO is INTEGER
!>          = 0:  successful exit
!>          < 0:  if INFO = -i, the i-th argument had an illegal value
!>

= 0 means successful exit, we ate and left no crumbs πŸ”₯. < 0 means INFO = -i and the i-th argument had an illegal value β€” someone did NOT read the constraints, and honestly? embarrassing for them πŸ™ˆ.

πŸ‘‘ Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

πŸ“ Contributors: πŸ“

  • A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA

πŸ’œ Further Details: πŸ’œ

okay this part is the lore, stay with me:

!>
!>  The N-by-N matrix Z can be computed by
!>
!>     Z =  Z(1)*Z(2)* ... *Z(M)
!>
!>  where each N-by-N Z(k) is given by
!>
!>     Z(k) = I - tau(k)*v(k)*v(k)**T
!>
!>  with v(k) is the kth row vector of the M-by-N matrix
!>
!>     V = ( I   A(:,M+1:N) )
!>
!>  I is the M-by-M identity matrix, A(:,M+1:N)
!>  is the output stored in A on exit from STZRZF,
!>  and tau(k) is the kth element of the array TAU.
!>
!>

so yeah, Z is just Z(1)*Z(2)* ... *Z(M), each Z(k) = I - tau(k)*v(k)*v(k)**T, with v(k) being the kth row vector of V = ( I A(:,M+1:N) ). I is the M-by-M identity matrix (yes that identity matrix πŸ’…), A(:,M+1:N) is the output stored in A on exit from STZRZF, and tau(k) is the kth element of TAU. it's giving choreography. it's giving coordinated. periodt. 🌈


Definition at line 150 of file stzrzf.f. πŸ“


✨ Author ✨

Generated automatically by Doxygen for LAPACK from the source code. (yes she was literally born this way, no cap πŸ€–βœ¨)


and that's the whole page bestie!! 🫢 this tea was served by LAPACK, Version 3.12.0, dated SRC/stzrzf.f(3) β€” mwah, go reduce something trapezoidal, ily, byeeee πŸ’–πŸŽ€πŸ¦‹
πŸ“¦ where this page comes from