unm2l(3)

πŸ’… unm2l(3) β€” {un,or}m2l: step in unmql

okay so bestie, welcome to unm2l from the Library Functions Manual. this is the group of little Fortran routines that do one step inside unmql, and honestly? it's giving "I'm the unblocked version and I know it." ✨ Four flavors, same vibe: one for complex, one for double precision, one for real, one for the double-complex girlies. Let's get into it. πŸŽ€


✨ SYNOPSIS ✨

🫢 Functions

  • subroutine cunm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” CUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).
  • subroutine dorm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” DORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).
  • subroutine sorm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” SORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).
  • subroutine zunm2l (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” ZUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).

🌸 Detailed Description 🌸

πŸ’œ Function Documentation πŸ’œ

πŸ¦‹ subroutine cunm2l (character side, character trans, integer m, integer n, integer k, complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) tau, complex, dimension( ldc, * ) c, integer ldc, complex, dimension( * ) work, integer info)

CUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm).

πŸŽ€ Purpose:

bestie, CUNM2L overwrites the general complex m-by-n matrix C with:

Q * C   if SIDE = 'L' and TRANS = 'N', or

Q**H* C if SIDE = 'L' and TRANS = 'C', or

C * Q   if SIDE = 'R' and TRANS = 'N', or

C * Q**H if SIDE = 'R' and TRANS = 'C',

where Q is a complex unitary matrix defined as the product of k elementary reflectors:

Q = H(k) . . . H(2) H(1)

exactly as returned by CGEQLF. lowkey important: Q is of order m if SIDE = 'L', and of order n if SIDE = 'R'. πŸ’…

⭐ Parameters

  • SIDE β€” SIDE is CHARACTER*1.
    • = 'L': apply Q or Q**H from the Left
    • = 'R': apply Q or Q**H from the Right
  • TRANS β€” TRANS is CHARACTER*1.
    • = 'N': apply Q (No transpose)
    • = 'C': apply Q**H (Conjugate transpose)
  • M β€” M is INTEGER. The number of rows of the matrix C. M >= 0.
  • 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. If SIDE = 'L', M >= K >= 0; if SIDE = 'R', N >= K >= 0.
  • A β€” A is COMPLEX 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 CGEQLF in the last k columns of its array argument A. ngl A is modified by the routine but restored on exit.
  • 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 COMPLEX array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by CGEQLF.
  • C β€” C is COMPLEX array, dimension (LDC,N). On entry, the m-by-n matrix C. On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q.
  • LDC β€” LDC is INTEGER. The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is COMPLEX array, dimension (N) if SIDE = 'L', (M) if SIDE = 'R'.
  • 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.

Definition at line 157 of file cunm2l.f.


πŸ”₯ subroutine dorm2l (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 info)

DORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).

πŸŽ€ Purpose:

DORM2L overwrites the general real m by n matrix C with:

Q * C   if SIDE = 'L' and TRANS = 'N', or

Q**T * C if SIDE = 'L' and TRANS = 'T', or

C * Q   if SIDE = 'R' and TRANS = 'N', or

C * Q**T if SIDE = 'R' and TRANS = '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'. periodt. 🫢

⭐ Parameters

  • SIDE β€” SIDE is CHARACTER*1.
    • = 'L': apply Q or Q**T from the Left
    • = 'R': apply Q or Q**T from the Right
  • TRANS β€” TRANS is CHARACTER*1.
    • = 'N': apply Q (No transpose)
    • = 'T': apply Q**T (Transpose)
  • M β€” M is INTEGER. The number of rows of the matrix C. M >= 0.
  • 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. 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.
  • 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). 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.
  • LDC β€” LDC is INTEGER. The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (N) if SIDE = 'L', (M) if SIDE = 'R'.
  • 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.

Definition at line 156 of file dorm2l.f.


🌈 subroutine sorm2l (character side, character trans, integer m, integer n, integer k, real, dimension( lda, * ) a, integer lda, real, dimension( * ) tau, real, dimension( ldc, * ) c, integer ldc, real, dimension( * ) work, integer info)

SORM2L multiplies a general matrix by the orthogonal matrix from a QL factorization determined by sgeqlf (unblocked algorithm).

πŸŽ€ Purpose:

SORM2L overwrites the general real m by n matrix C with:

Q * C   if SIDE = 'L' and TRANS = 'N', or

Q**T * C if SIDE = 'L' and TRANS = 'T', or

C * Q   if SIDE = 'R' and TRANS = 'N', or

C * Q**T if SIDE = 'R' and TRANS = '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 SGEQLF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. iconique. 🌟

⭐ Parameters

  • SIDE β€” SIDE is CHARACTER*1.
    • = 'L': apply Q or Q**T from the Left
    • = 'R': apply Q or Q**T from the Right
  • TRANS β€” TRANS is CHARACTER*1.
    • = 'N': apply Q (No transpose)
    • = 'T': apply Q**T (Transpose)
  • M β€” M is INTEGER. The number of rows of the matrix C. M >= 0.
  • 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. If SIDE = 'L', M >= K >= 0; if SIDE = 'R', N >= K >= 0.
  • A β€” A is REAL 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 SGEQLF in the last k columns of its array argument A. and yes, A is modified by the routine but restored on exit. πŸ’…
  • 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 β€” so this is a REAL array, dimension (K), and TAU(i) has got to hold the scalar factor of the elementary reflector H(i), exactly as SGEQLF handed it back to you. don't lose it bestie πŸ’…
  • C β€” REAL array, dimension (LDC,N). On entry it's your m by n matrix C. On exit? slayed and overwritten, babes β€” it becomes Q*C or Q**T*C or C*Q**T or C*Q. that's just how it goes ✨
  • LDC β€” INTEGER, the leading dimension of the array C, and the vibe check here is LDC >= max(1,M). no cap, respect it 🫢
  • WORK β€” REAL array, and its dimension depends on where you're applying stuff from:
    • (N) if SIDE = 'L'
    • (M) if SIDE = 'R'
  • INFO β€” INTEGER, the little status receipt:
    • = 0: successful exit πŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value πŸ’€ (so like, check your args)

πŸ‘‘ Author

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

Definition at line 157 of file sorm2l.f.


🌈 subroutine zunm2l

okay so the signature is literally:

subroutine zunm2l (character side, character trans, integer m, integer n,
    integer k, complex*16, dimension( lda, * ) a, integer lda, complex*16,
    dimension( * ) tau, complex*16, dimension( ldc, * ) c, integer ldc,
    complex*16, dimension( * ) work, integer info)

ZUNM2L multiplies a general matrix by the unitary matrix from a QL factorization determined by cgeqlf (unblocked algorithm). it's giving complex-number-glam, she's iconic πŸ’œ

πŸ¦‹ Purpose

!>
!> ZUNM2L overwrites the general complex m-by-n matrix C with
!>
!>       Q * C  if SIDE = 'L' and TRANS = 'N', or
!>
!>       Q**H* C  if SIDE = 'L' and TRANS = 'C', or
!>
!>       C * Q  if SIDE = 'R' and TRANS = 'N', or
!>
!>       C * Q**H if SIDE = 'R' and TRANS = 'C',
!>
!> where Q is a complex unitary matrix defined as the product of k
!> elementary reflectors
!>
!>       Q = H(k) . . . H(2) H(1)
!>
!> as returned by ZGEQLF. Q is of order m if SIDE = 'L' and of order n
!> if SIDE = 'R'.
!>

like, Q is the main character here and it's built out of k elementary reflectors, in that exact order. don't reorder her, she has a whole storyline 😭

πŸ’– Parameters

  • SIDE β€” CHARACTER*1, which literal side of C the magic happens on:
    • = 'L': apply Q or Q**H from the Left
    • = 'R': apply Q or Q**H from the Right
  • TRANS β€” CHARACTER*1:
    • = 'N': apply Q (No transpose)
    • = 'C': apply Q**H (Conjugate transpose)
  • M β€” INTEGER, the number of rows of the matrix C. the rule is M >= 0, periodt ✨
  • N β€” INTEGER, the number of columns of the matrix C, and again N >= 0 🌸
  • K β€” INTEGER, the number of elementary reflectors whose product defines the matrix Q:
    • If SIDE = 'L', then M >= K >= 0
    • if SIDE = 'R', then N >= K >= 0
  • A β€” COMPLEX*16 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 ZGEQLF in the last k columns of its array argument A. and heads up (not in a bad way): A is modified by the routine but restored on exit, so she leaves everything exactly how she found it, we love a considerate queen πŸŽ€
  • LDA β€” INTEGER, the leading dimension of the array A:
    • If SIDE = 'L', LDA >= max(1,M)
    • if SIDE = 'R', LDA >= max(1,N)
  • TAU β€” COMPLEX*16 array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by ZGEQLF. keep it safe πŸ”₯
  • C β€” COMPLEX*16 array, dimension (LDC,N). On entry, the m-by-n matrix C. On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q. she gets a whole glow-up, but like, the mathematically exact kind πŸ’…
  • LDC β€” INTEGER, the leading dimension of the array C, and LDC >= max(1,M). fr fr, check it 🫢
  • WORK β€” COMPLEX*16 array, dimension:
    • (N) if SIDE = 'L'
    • (M) if SIDE = 'R'
  • INFO β€” INTEGER, the receipts:
    • = 0: successful exit ⭐
    • < 0: if INFO = -i, the i-th argument had an illegal value β€” yes that means one of your args was not it πŸ™ˆ

🧚 Author

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

Definition at line 157 of file zunm2l.f.


🌟 Author (the whole page)

Generated automatically by Doxygen for LAPACK from the source code. so like, nobody hand-wrote this, it was auto-girlbossed into existence ✨

and that's the page bestie!! you made it to the very end πŸŽ‰ this whole thing is from LAPACK, Version 3.12.0, and the page is unm2l(3). go forth and multiply your matrices, but correctly πŸ’–πŸ’œπŸ’…
πŸ“¦ where this page comes from