SRC/dormql.f(3)

πŸ’– SRC/dormql.f β€” from the LAPACK Library Functions Manual πŸ’–

okay bestie, gather round, because today we're reading the docs for SRC/dormql.f and honestly? it's giving main character energy. this is straight out of the LAPACK Library Functions Manual and it's lowkey iconic. let's get into it πŸ’…


✨ SYNOPSIS ✨

🫢 Functions/Subroutines

subroutine dormql (side, trans, m, n, k, a, lda, tau, c, ldc, work,
    lwork, info)

DORMQL β€” that's the whole vibe. that's the function. πŸŽ€


🌸 Function/Subroutine Documentation 🌸

⭐ subroutine dormql

subroutine dormql (character side, character trans, integer m, integer n,
    integer k, double precision, dimension( lda, * ) a, integer lda, double
    precision, dimension( * ) tau, double precision, dimension( ldc, * ) c,
    integer ldc, double precision, dimension( * ) work, integer lwork,
    integer info)

DORMQL β€” no cap, that's the signature, character for character. πŸ¦‹


πŸ’œ Purpose:

!>
!> DORMQL overwrites the general real M-by-N matrix C with
!>
!>                 SIDE = 'L'     SIDE = 'R'
!> TRANS = 'N':      Q * C          C * Q
!> TRANS = 'T':      Q**T * C       C * Q**T
!>
!> where Q is a real orthogonal matrix defined as the product of k
!> elementary reflectors
!>
!>       Q = H(k) . . . H(2) H(1)
!>
!> as returned by DGEQLF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>

so basically πŸ‘‘: DORMQL straight up overwrites your general real M-by-N matrix C β€” like, it does not ask, it just does it. and where it gets applied depends on SIDE and TRANS, per that cute little grid up there. Q itself is a real orthogonal matrix, defined as the product of k elementary reflectors, Q = H(k) . . . H(2) H(1), exactly as returned by DGEQLF. and here's the tea: Q is of order M if SIDE = 'L', and of order N if SIDE = 'R'. iykyk ✨


🌈 Parameters 🌈

  • SIDE β€” SIDE is CHARACTER*1. it's the "which side tho" flag:
    • = 'L': apply Q or Q**T from the Left;
    • = 'R': apply Q or Q**T from the Right.
  • TRANS β€” TRANS is CHARACTER*1. the "transpose or nah" flag:
    • = 'N': No transpose, apply Q;
    • = 'T': Transpose, apply Q**T.
  • M β€” M is INTEGER. the number of rows of the matrix C. M >= 0. (yes, zero is allowed, she's flexible πŸ’…)
  • N β€” N is INTEGER. the number of columns of the matrix C. N >= 0.
  • K β€” K is INTEGER. the number of elementary reflectors whose product defines the matrix Q. the rules:
    • If SIDE = 'L', M >= K >= 0;
    • if SIDE = 'R', N >= K >= 0.
  • A β€” A is DOUBLE PRECISION array, dimension (LDA,K). the 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. like, that's the assignment, bestie πŸŽ€
  • LDA β€” LDA is INTEGER. the leading dimension of the array A:
    • If SIDE = 'L', LDA >= max(1,M);
    • if SIDE = 'R', LDA >= max(1,N).
  • 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. πŸ¦‹
  • C β€” C is DOUBLE PRECISION array, dimension (LDC,N). the glow-up happens here:
    • On entry, the M-by-N matrix C.
    • On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. (she's had a whole transformation, we love to see it ✨)
  • LDC β€” LDC is INTEGER. the leading dimension of the array C. LDC >= max(1,M). non-negotiable fr fr.
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). the workspace. and the fun part: On exit, if INFO = 0, WORK(1) returns the optimal LWORK. she tells you the tea on her way out πŸ’…
  • LWORK β€” LWORK is INTEGER. the dimension of the array WORK:
    • If SIDE = 'L', LWORK >= max(1,N);
    • if SIDE = 'R', LWORK >= max(1,M).
    • For good performance, LWORK should generally be larger. (bigger workspace = better performance, that's the whole mood πŸ”₯)
    • 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. ✨ query mode activated ✨
  • INFO β€” INFO is INTEGER. the receipts:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ’€
heads up bestie: if you pass something illegal, INFO goes negative and it's specifically -i for the i-th argument. check your args, no cap. πŸ™ˆ

πŸ‘‘ Author

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

πŸ“– Definition at line 165 of file dormql.f.


πŸŽ€ Author

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole page, bestie! 🫢 this was LAPACK, Version 3.12.0, dated with SRC/dormql.f(3) β€” go forth and apply those reflectors. periodt. πŸ’–βœ¨πŸŒΈ

πŸ“¦ where this page comes from