unml2(3)

okay bestie, welcome to unml2(3) β€” straight from the Library Functions Manual and honestly it's giving "the LQ glow-up nobody told you about" πŸ’… this is the level-2 (unblocked) step in unmlq, and it's literally four subroutines doing the same gorgeous thing in four different flavours. buckle up πŸŽ€


✨ NAME ✨

unml2 β€” {un,or}ml2: multiply by Q, level 2, step in unmlq πŸ¦‹


🌸 SYNOPSIS 🌸

🫢 Functions

  • subroutine cunml2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” CUNML2 multiplies a general matrix by the unitary matrix from a LQ factorization determined by cgelqf (unblocked algorithm). πŸ’œ
  • subroutine dorml2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” DORML2 multiplies a general matrix by the orthogonal matrix from a LQ factorization determined by sgelqf (unblocked algorithm). no cap, it really does say sgelqf in there 😭
  • subroutine sorml2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” SORML2 multiplies a general matrix by the orthogonal matrix from a LQ factorization determined by sgelqf (unblocked algorithm). πŸ‘‘
  • subroutine zunml2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” ZUNML2 multiplies a general matrix by the unitary matrix from a LQ factorization determined by cgelqf (unblocked algorithm). ✨

πŸ”₯ Detailed Description πŸ”₯

Function Documentation β€” yes, that's the whole section title, we're getting into the good part now.

🧚 Function Documentation 🧚

πŸ’– subroutine cunml2

subroutine cunml2 (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)

CUNML2 multiplies a general matrix by the unitary matrix from a LQ factorization determined by cgelqf (unblocked algorithm). πŸ¦‹

⭐ Purpose

okay so CUNML2 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 . . . H(2)**H H(1)**H

as returned by CGELQF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. periodt. πŸ’…

πŸŽ€ Parameters

  • SIDE β€” is CHARACTER*1
    • = 'L': apply Q or Q**H from the Left
    • = 'R': apply Q or Q**H from the Right
  • TRANS β€” is CHARACTER*1
    • = 'N': apply Q (No transpose)
    • = 'C': apply Q**H (Conjugate transpose)
  • M β€” is INTEGER
    • The number of rows of the matrix C. M >= 0.
  • N β€” is INTEGER
    • The number of columns of the matrix C. N >= 0.
  • 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 β€” is COMPLEX array, dimension
    • (LDA,M) if SIDE = 'L',
    • (LDA,N) if SIDE = 'R'
    • The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by CGELQF in the first k rows of its array argument A.
    • A is modified by the routine but restored on exit. 🫢 (we give it back, promise)
  • LDA β€” is INTEGER
    • The leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” is COMPLEX array, dimension (K)
    • TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by CGELQF.
  • 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 β€” is INTEGER
    • The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” is COMPLEX array, dimension
    • (N) if SIDE = 'L',
    • (M) if SIDE = 'R'
  • 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 cunml2.f.


πŸ’œ subroutine dorml2

subroutine dorml2 (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)

DORML2 multiplies a general matrix by the orthogonal matrix from a LQ factorization determined by sgelqf (unblocked algorithm). 🌸

⭐ Purpose

DORML2 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 DGELQF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. iconic. πŸŽ€

πŸŽ€ Parameters

  • SIDE β€” is CHARACTER*1
    • = 'L': apply Q or Q**T from the Left
    • = 'R': apply Q or Q**T from the Right
  • TRANS β€” is CHARACTER*1
    • = 'N': apply Q (No transpose)
    • = 'T': apply Q**T (Transpose)
  • M β€” is INTEGER
    • The number of rows of the matrix C. M >= 0.
  • N β€” is INTEGER
    • The number of columns of the matrix C. N >= 0.
  • 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 β€” is DOUBLE PRECISION array, dimension
    • (LDA,M) if SIDE = 'L',
    • (LDA,N) if SIDE = 'R'
    • The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by DGELQF in the first k rows of its array argument A.
  • LDA β€” is INTEGER
    • The leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” is DOUBLE PRECISION array, dimension (K)
    • TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by DGELQF.
  • 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 β€” is INTEGER
    • The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” is DOUBLE PRECISION array, dimension
    • (N) if SIDE = 'L',
    • (M) if SIDE = 'R'
  • 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 dorml2.f.


πŸ¦‹ subroutine sorml2

subroutine sorml2 (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)

SORML2 multiplies a general matrix by the orthogonal matrix from a LQ factorization determined by sgelqf (unblocked algorithm). ✨

⭐ Purpose

SORML2 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 SGELQF. Q is of order m if SIDE = 'L' and of order n if SIDE = 'R'. highkey obsessed. πŸ’–

πŸŽ€ Parameters

  • SIDE β€” is CHARACTER*1
    • = 'L': apply Q or Q**T from the Left
    • = 'R': apply Q or Q**T from the Right
  • TRANS β€” is CHARACTER*1
    • = 'N': apply Q (No transpose)
    • = 'T': apply Q**T (Transpose)
  • M β€” is INTEGER
    • The number of rows of the matrix C. M >= 0.
  • N β€” is INTEGER
    • The number of columns of the matrix C. N >= 0.
  • 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 β€” is REAL array, dimension
    • (LDA,M) if SIDE = 'L',
    • (LDA,N) if SIDE = 'R'
    • The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by SGELQF in the first k rows of its array argument A.
    • A is modified by the routine but restored on exit. 🫢
  • LDA β€” is INTEGER
    • The leading dimension of the array A. LDA >= max(1,K).
  • TAU
  • TAU β€” TAU is REAL array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by SGELQF. πŸ’–
  • C β€” C is REAL 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 REAL 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 sorml2.f.


🌈 subroutine zunml2 🌈

   subroutine zunml2 (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)

ZUNML2 multiplies a general matrix by the unitary matrix from the LQ factorization determined by cgelqf (unblocked algorithm). πŸ¦‹

✨ Purpose ✨

ZUNML2 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 . . . H(2)**H H(1)**H

as returned by ZGELQF. 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*16 array, dimension (LDA,M) if SIDE = 'L', (LDA,N) if SIDE = 'R'. The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ZGELQF in the first k rows of its array argument A. A is modified by the routine but restored on exit. πŸ”₯
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,K). πŸŽ€
  • TAU β€” TAU is COMPLEX*16 array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by ZGELQF. πŸ’œ
  • C β€” C is 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. πŸ¦‹
  • LDC β€” LDC is INTEGER. The leading dimension of the array C. LDC >= max(1,M). 🌈
  • WORK β€” WORK is COMPLEX*16 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 zunml2.f.

🫢 Author 🫢

Generated automatically by Doxygen for LAPACK from the source code.


okay bestie, that’s the whole page β€” footer says LAPACK Version 3.12.0 and this is unml2(3). πŸ’–βœ¨πŸ’…

πŸ“¦ where this page comes from