SRC/dorg2l.f(3)

🌸 SRC/dorg2l.f β€” bestie, let me introduce you to dorg2l πŸ’…

Okay so before we even get into it, I need you to know this is from LAPACK, the manual is SRC/dorg2l.f(3), and it lives in the _Library Functions Manual_. It's giving "I'm a serious numerical library but make it cute." We're talking Fortran, we're talking orthogonal matrices, we're talking a routine that does one very specific slay. Let's go 🫢


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine dorg2l (m, n, k, a, lda, tau, work, info) β€” so this is the whole gang. DORG2L generates all or part of the orthogonal matrix Q from a QL factorization determined by sgeqlf (the unblocked algorithm). Obsessed with a queen who knows her lane πŸ’–

πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

subroutine dorg2l (integer m, integer n, integer k, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( * ) tau, double precision, dimension( * ) work, integer info)

Bestie. This is the full signature. DORG2L generates all or part of the orthogonal matrix Q from a QL factorization determined by sgeqlf (unblocked algorithm). It's iconic, it's focused, it's not here to do more than exactly what it says πŸ”₯

πŸŽ€ Purpose:

Okay so read this carefully because it's literally the whole vibe check:

!>
!> DORG2L generates an m by n real matrix Q with orthonormal columns,
!> which is defined as the last n columns of a product of k elementary
!> reflectors of order m
!>
!>       Q  =  H(k) . . . H(2) H(1)
!>
!> as returned by DGEQLF.
!>

The way that Q is literally the last n columns of a product of k elementary reflectors of order m, constructed exactly as DGEQLF hands it back to you. Main character matrix energy, fr fr 🌈


Parameters

🌟 M

!>          M is INTEGER
!>          The number of rows of the matrix Q. M >= 0.
!>

M is an INTEGER, and it's the number of rows of the matrix Q. Constraint era: M >= 0. Respect the boundary, bestie πŸŽ€

πŸ’– N

!>          N is INTEGER
!>          The number of columns of the matrix Q. M >= N >= 0.
!>

N is an INTEGER β€” the number of columns of the matrix Q. And the rule is M >= N >= 0, no cap. So N can be smol, but it can never be bigger than M πŸ’…

πŸ’œ K

!>          K is INTEGER
!>          The number of elementary reflectors whose product defines the
!>          matrix Q. N >= K >= 0.
!>

K is an INTEGER, the number of elementary reflectors whose product defines the matrix Q. Constraint: N >= K >= 0. She fits right in the middle, periodt ✨

πŸ¦‹ A

!>          A is DOUBLE PRECISION array, dimension (LDA,N)
!>          On entry, the (n-k+i)-th column must contain the vector which
!>          defines the elementary reflector H(i), for i = 1,2,...,k, as
!>          returned by DGEQLF in the last k columns of its array
!>          argument A.
!>          On exit, the m by n matrix Q.
!>

A is a DOUBLE PRECISION array, dimension (LDA,N). Pay attention because there's a before-and-after moment here:

  • On entry: the (n-k+i)-th column must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by DGEQLF in the last k columns of its array argument A. πŸ™ˆ
  • On exit: she's transformed β€” now A is the m by n matrix Q. Glow-up complete πŸ’–

🌸 LDA

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

LDA is an INTEGER, the first dimension of the array A. And the constraint is LDA >= max(1,M) β€” don't play with it, fr πŸŽ€

πŸ“ TAU

!>          TAU is DOUBLE PRECISION array, dimension (K)
!>          TAU(i) must contain the scalar factor of the elementary
!>          reflector H(i), as returned by DGEQLF.
!>

TAU is a DOUBLE PRECISION array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), exactly as returned by DGEQLF. She's the supporting character who's actually essential, iykyk πŸ’œ

🧚 WORK

!>          WORK is DOUBLE PRECISION array, dimension (N)
!>

WORK is a DOUBLE PRECISION array, dimension (N). That's it. That's the whole note. She works, literally 😭

⭐ INFO

!>          INFO is INTEGER
!>          = 0: successful exit
!>          < 0: if INFO = -i, the i-th argument has an illegal value
!>

INFO is an INTEGER and it's the vibe check at the end:

  • = 0: successful exit β€” we ate, no crumbs πŸ‘‘
  • < 0: if INFO = -i, the i-th argument has an illegal value β€” someone broke the rules and INFO is telling on them πŸ’€

πŸ’… Author

The legends behind this:

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

Absolute royalty, all of them. Respect the founders of the numerical arts 🌟

Definition at line 113 of file dorg2l.f. You can literally go look at it. She's real, she's documented, she's at a specific line number and everything ✨


🫢 Author (yes, again, but this time about the doc itself)

This whole page was generated automatically by Doxygen for LAPACK, straight from the source code. So the docs are not hand-typed by a tired grad student at 3am β€” they're generated, bestie. The system works 🌸


πŸ’‘ Reminder from your girl: the constraints are not suggestions. M >= N >= 0, N >= K >= 0, LDA >= max(1,M), M >= 0. Respect them or INFO will come for you with a negative number and zero chill πŸ’€

Alright, that's the whole page β€” every flag, every constraint, every parameter, every author, all of it, in full. This was SRC/dorg2l.f(3) from _Library Functions Manual_, generated by Doxygen for LAPACK, Version 3.12.0. Stay orthonormal, stay iconic, and remember: Q = H(k) . . . H(2) H(1) forever πŸ¦‹πŸ’–πŸŽ€ periodt.

πŸ“¦ where this page comes from