tpmlqt(3)

tpmlqt(3) β€” Library Functions Manual πŸ¦‹βœ¨

okay so bestie, welcome to tpmlqt(3), the manual page that's literally all about applying Q. This is part 1 of 3, and we're covering ctpmlqt and dtpmlqt today. No cap, it's giving linear algebra realness. πŸ’…


NAME

tpmlqt β€” tpmlqt: applies Q. That's it. That's the whole name. Periodt. πŸ’–

SYNOPSIS ✨

Functions

  • ctpmlqt
subroutine ctpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
    b, ldb, work, info)

CTPMLQT 🫢

  • dtpmlqt
subroutine dtpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
    b, ldb, work, info)

DTPMLQT πŸ’œ

  • stpmlqt
subroutine stpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
    b, ldb, work, info)

STPMLQT 🌸

  • ztpmlqt
subroutine ztpmlqt (side, trans, m, n, k, l, mb, v, ldv, t, ldt, a, lda,
    b, ldb, work, info)

ZTPMLQT ⭐

Detailed Description

(okay so this section is literally empty in the original β€” no tea here, moving on to the function docs πŸ‘‡)

Function Documentation

ctpmlqt β€” CTPMLQT πŸ¦‹

subroutine ctpmlqt (character side, character trans, integer m, integer n,
    integer k, integer l, integer mb, complex, dimension( ldv, * ) v,
    integer ldv, complex, dimension( ldt, * ) t, integer ldt, complex,
    dimension( lda, * ) a, integer lda, complex, dimension( ldb, * ) b,
    integer ldb, complex, dimension( * ) work, integer info)

CTPMLQT

Purpose:

okay so CTPMLQT applies a complex unitary matrix Q obtained from a complex block reflector H to a general complex matrix C, which consists of two blocks A and B. That's the whole vibe. πŸ’…

Parameters:

  • SIDE β€” CHARACTER*1 tells you which side Q is applied from:
    • 'L': apply Q or Q**H from the Left;
    • 'R': apply Q or Q**H from the Right.
  • TRANS β€” CHARACTER*1
    • 'N': No transpose, apply Q;
    • 'C': Conjugate transpose, apply Q**H.
  • M β€” INTEGER The number of rows of the matrix B. M >= 0.
  • N β€” INTEGER The number of columns of the matrix B. N >= 0.
  • K β€” INTEGER The number of elementary reflectors whose product defines the matrix Q.
  • L β€” INTEGER The order of the trapezoidal part of V. K >= L >= 0. See Further Details.
  • MB β€” INTEGER The block size used for the storage of T. K >= MB >= 1. This must be the same value of MB used to generate T in CTPLQT.
  • V β€” COMPLEX array, dimension (LDV,K) The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by CTPLQT in B. See Further Details.
  • LDV β€” INTEGER The leading dimension of the array V. LDV >= K.
  • T β€” COMPLEX array, dimension (LDT,K) The upper triangular factors of the block reflectors as returned by CTPLQT, stored as a MB-by-K matrix.
  • LDT β€” INTEGER The leading dimension of the array T. LDT >= MB.
  • A β€” COMPLEX array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R' On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or QH*C or C*Q or C*QH. See Further Details.
  • LDA β€” INTEGER The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,K); If SIDE = 'R', LDA >= max(1,M).
  • B β€” COMPLEX array, dimension (LDB,N) On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or QH*C or C*Q or C*QH. See Further Details.
  • LDB β€” INTEGER The leading dimension of the array B. LDB >= max(1,M).
  • WORK β€” COMPLEX array The dimension of WORK is N*MB if SIDE = 'L', or M*MB if SIDE = 'R'.
  • INFO β€” 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. πŸ‘‘

Further Details:

okay so the columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a trapezoidal block V2:

V = [V1] [V2].

The size of the trapezoidal block V2 is determined by the parameter L, where 0 <= L <= K; V2 is lower trapezoidal, consisting of the first L rows of a K-by-K upper triangular matrix. If L=K, V2 is lower triangular; if L=0, there is no trapezoidal block, hence V = V1 is rectangular.

If SIDE = 'L':  C = [A]  where A is K-by-N,  B is M-by-N and V is K-by-M.
                    [B]

If SIDE = 'R':  C = [A B]  where A is M-by-K, B is M-by-N and V is K-by-N.

The complex unitary matrix Q is formed from V and T.

If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.

If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C.

If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.

If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H.

Definition at line 197 of file ctpmlqt.f.


dtpmlqt β€” DTPMLQT πŸ’œ

subroutine dtpmlqt (character side, character trans, integer m, integer n,
    integer k, integer l, integer mb, double precision, dimension( ldv, * )
    v, integer ldv, double precision, dimension( ldt, * ) t, integer ldt,
    double precision, dimension( lda, * ) a, integer lda, double precision,
    dimension( ldb, * ) b, integer ldb, double precision, dimension( * )
    work, integer info)

DTPMLQT

Purpose:

okay so the original says (and yes it literally says DTPMQRT, not DTPMLQT β€” we don't make the rules, bestie) β€” DTPMQRT applies a real orthogonal matrix Q obtained from a real block reflector H to a general real matrix C, which consists of two blocks A and B.

Parameters:

  • SIDE β€” CHARACTER*1 tells you which side Q is applied from:
    • 'L': apply Q or Q**T from the Left;
    • 'R': apply Q or Q**T from the Right.
  • TRANS β€” CHARACTER*1
    • 'N': No transpose, apply Q;
    • 'T': Transpose, apply Q**T.
  • M β€” INTEGER The number of rows of the matrix B. M >= 0.
  • N β€” INTEGER The number of columns of the matrix B. N >= 0.
  • K β€” INTEGER The number of elementary reflectors whose product defines the matrix Q.
  • L β€” INTEGER The order of the trapezoidal part of V. K >= L >= 0. See Further Details.
  • MB β€” INTEGER The block size used for the storage of T. K >= MB >= 1. This must be the same value of MB used to generate T in DTPLQT.
  • V β€” DOUBLE PRECISION array, dimension (LDV,K) The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by DTPLQT in B. See Further Details.
  • LDV β€” INTEGER The leading dimension of the array V. LDV >= K.
  • T β€” DOUBLE PRECISION array, dimension (LDT,K) The upper triangular factors of the block reflectors as returned by DTPLQT, stored as a MB-by-K matrix.
  • LDT β€” INTEGER The leading dimension of the array T. LDT >= MB.
  • A β€” DOUBLE PRECISION array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R' On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or QT*C or C*Q or C*QT. See Further Details.
  • LDA β€” INTEGER The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,K); If SIDE = 'R', LDA >= max(1,M).
  • B β€” DOUBLE PRECISION array, dimension (LDB,N) On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or QT*C or C*Q or C*QT. See Further Details.
  • LDB β€” INTEGER The leading dimension of the array B. LDB >= max(1,M).
  • WORK β€” DOUBLE PRECISION array The dimension of WORK is N*MB if SIDE = 'L', or M*MB if SIDE = 'R'.
  • INFO β€” 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. πŸ‘‘

Further Details:

(and that's where part 1 ends, bestie β€” part 2 is coming with stpmlqt and ztpmlqt, so don't go anywhere πŸ’–)


Okay so real talk: the columns of that pentagonal matrix V? They contain the elementary reflectors H(1), H(2), ..., H(K). And V is literally composed of a rectangular block V1 and a trapezoidal block V2, like:

V = [V1] [V2].

The size of that trapezoidal block V2? It’s totally determined by the parameter L, where 0 <= L <= K. V2 is lower trapezoidal β€” it’s made of the first L rows of a K-by-K upper triangular matrix. If L=K, then V2 is lower triangular; if L=0, there’s no trapezoidal block at all, so V = V1 and it’s just rectangular. Periodt. πŸ’…

Now check the SIDE vibes:

If SIDE = 'L':  C = [A]  where A is K-by-N,  B is M-by-N and V is K-by-M.
                    [B]
If SIDE = 'R':  C = [A B]  where A is M-by-K, B is M-by-N and V is K-by-N.

The real orthogonal matrix Q is formed from V and T.

  • If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
  • If TRANS='T' and SIDE='L', C is on exit replaced with Q**T * C.
  • If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
  • If TRANS='T' and SIDE='R', C is on exit replaced with C * Q**T.

Definition at line 212 of file dtpmlqt.f.


✨ subroutine stpmlqt ✨

   subroutine stpmlqt (character side, character trans, integer m, integer n,
       integer k, integer l, integer mb, real, dimension( ldv, * ) v, integer
       ldv, real, dimension( ldt, * ) t, integer ldt, real, dimension( lda, * )
       a, integer lda, real, dimension( ldb, * ) b, integer ldb, real,
       dimension( * ) work, integer info)
       STPMLQT

🎯 Purpose

Bestie, STPMLQT applies a real orthogonal matrix Q obtained from a real block reflector H to a general real matrix C, which consists of two blocks A and B. That’s the whole vibe. 🫢

🌸 Parameters

  • SIDE β€” CHARACTER*1. = 'L': apply Q or Q**T from the Left; = 'R': apply Q or Q**T from the Right.
  • TRANS β€” CHARACTER*1. = 'N': No transpose, apply Q; = 'T': Transpose, apply Q**T.
  • M β€” INTEGER. The number of rows of the matrix B. M >= 0.
  • N β€” INTEGER. The number of columns of the matrix B. N >= 0.
  • K β€” INTEGER. The number of elementary reflectors whose product defines the matrix Q.
  • L β€” INTEGER. The order of the trapezoidal part of V. K >= L >= 0. See Further Details.
  • MB β€” INTEGER. The block size used for the storage of T. K >= MB >= 1. This must be the same value of MB used to generate T in STPLQT.
  • V β€” REAL array, dimension (LDV,K). The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by STPLQT in B. See Further Details.
  • LDV β€” INTEGER. The leading dimension of the array V. LDV >= K.
  • T β€” REAL array, dimension (LDT,K). The upper triangular factors of the block reflectors as returned by STPLQT, stored as a MB-by-K matrix.
  • LDT β€” INTEGER. The leading dimension of the array T. LDT >= MB.
  • A β€” REAL array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'. On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or Q**T*C or C*Q or C*Q**T. See Further Details.
  • LDA β€” INTEGER. The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,K); If SIDE = 'R', LDA >= max(1,M).
  • B β€” REAL array, dimension (LDB,N). On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or Q**T*C or C*Q or C*Q**T. See Further Details.
  • LDB β€” INTEGER. The leading dimension of the array B. LDB >= max(1,M).
  • WORK β€” REAL array. The dimension of WORK is N*MB if SIDE = 'L', or M*MB if SIDE = 'R'.
  • INFO β€” 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.

πŸ¦‹ Further Details

Okay so real talk: the columns of that pentagonal matrix V? They contain the elementary reflectors H(1), H(2), ..., H(K). And V is literally composed of a rectangular block V1 and a trapezoidal block V2, like:

V = [V1] [V2].

The size of that trapezoidal block V2? It’s totally determined by the parameter L, where 0 <= L <= K. V2 is lower trapezoidal β€” it’s made of the first L rows of a K-by-K upper triangular matrix. If L=K, then V2 is lower triangular; if L=0, there’s no trapezoidal block at all, so V = V1 and it’s just rectangular. Periodt. πŸ’…

Now check the SIDE vibes:

If SIDE = 'L':  C = [A]  where A is K-by-N,  B is M-by-N and V is K-by-M.
                    [B]
If SIDE = 'R':  C = [A B]  where A is M-by-K, B is M-by-N and V is K-by-N.

The real orthogonal matrix Q is formed from V and T.

  • If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
  • If TRANS='T' and SIDE='L', C is on exit replaced with Q**T * C.
  • If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
  • If TRANS='T' and SIDE='R', C is on exit replaced with C * Q**T.

Definition at line 212 of file stpmlqt.f.


✨ subroutine ztpmlqt ✨

   subroutine ztpmlqt (character side, character trans, integer m, integer n,
       integer k, integer l, integer mb, complex*16, dimension( ldv, * ) v,
       integer ldv, complex*16, dimension( ldt, * ) t, integer ldt, complex*16,
       dimension( lda, * ) a, integer lda, complex*16, dimension( ldb, * ) b,
       integer ldb, complex*16, dimension( * ) work, integer info)
       ZTPMLQT

🎯 Purpose

ZTPMLQT applies a complex unitary matrix Q obtained from a complex block reflector H to a general complex matrix C, which consists of two blocks A and B. It’s giving main character energy for complex matrices. πŸ’œ

🌈 Parameters

  • SIDE β€” CHARACTER*1. = 'L': apply Q or Q**H from the Left; = 'R': apply Q or Q**H from the Right.
  • TRANS β€” CHARACTER*1. = 'N': No transpose, apply Q; = 'C': Conjugate transpose, apply Q**H.
  • M β€” INTEGER. The number of rows of the matrix B. M >= 0.
  • N β€” INTEGER. The number of columns of the matrix B. N >= 0.
  • K β€” INTEGER. The number of elementary reflectors whose product defines the matrix Q.
  • L β€” INTEGER. The order of the trapezoidal part of V. K >= L >= 0. See Further Details.
  • MB β€” INTEGER. The block size used for the storage of T. K >= MB >= 1. This must be the same value of MB used to generate T in ZTPLQT.
  • V β€” COMPLEX*16 array, dimension (LDV,K). The i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by ZTPLQT in B. See Further Details.
  • LDV β€” INTEGER. The leading dimension of the array V. LDV >= K.
  • T β€” COMPLEX*16 array, dimension (LDT,K). The upper triangular factors of the block reflectors as returned by ZTPLQT, stored as a MB-by-K matrix.
  • LDT β€” INTEGER. The leading dimension of the array T. LDT >= MB.
  • A β€” COMPLEX*16 array, dimension (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R'. On entry, the K-by-N or M-by-K matrix A. On exit, A is overwritten by the corresponding block of Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
  • LDA β€” INTEGER. The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,K); If SIDE = 'R', LDA >= max(1,M).
  • B β€” COMPLEX*16 array, dimension (LDB,N). On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or Q**H*C or C*Q or C*Q**H. See Further Details.
  • LDB β€” INTEGER. The leading dimension of the array B. LDB >= max(1,M).
  • WORK β€” COMPLEX*16 array. The dimension of WORK is N*MB if SIDE = 'L', or M*MB if SIDE = 'R'.
  • INFO β€” 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.

🧚 Further Details

Okay so the columns of the pentagonal matrix V contain the elementary reflectors H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a trapezoidal block V2:

V = [V1] [V2].

Not me being obsessed with a matrix that's literally two blocks in a trench coat πŸ’…


The size of the trapezoidal block V2 is determined by the parameter L, where 0 <= L <= K; V2 is lower trapezoidal, consisting of the first L rows of a K-by-K upper triangular matrix. If L=K, V2 is lower triangular; if L=0, there is no trapezoidal block, hence V = V1 is rectangular.

tl;dr bestie: L is the slider. Max it out (L=K) and V2 goes full lower triangular ✨; zero it out (L=0) and the trapezoidal block just does not exist, so V = V1 and it's plain rectangular. The range is 0 <= L <= K, no exceptions, no vibes-based values πŸŽ€

Then the shapes kick in, and honestly it's giving choose your own adventure πŸ¦‹

If SIDE = 'L': C gets stacked like this, where A is K-by-N, B is M-by-N and V is K-by-M:

If SIDE = 'L':  C = [A]  where A is K-by-N,  B is M-by-N and V is K-by-M.
                    [B]

If SIDE = 'R': now it's side-by-side instead, where A is M-by-K, B is M-by-N and V is K-by-N:

If SIDE = 'R':  C = [A B]  where A is M-by-K, B is M-by-N and V is K-by-N.

The complex unitary matrix Q is formed from V and T. That's the whole glow-up right there πŸ‘‘ V and T walk in, Q walks out.


And then depending on your TRANS + SIDE combo, C gets replaced on exit like so β€” four flavours, one icon πŸ“:

  • If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
  • If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C.
  • If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
  • If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H.
note the **H bestie 🫢 β€” the TRANS='C' cases are the conjugate-transpose girlies, not a copy-paste typo, iykyk.

Definition at line 212 of file ztpmlqt.f.


πŸ‘‘ Author

Generated automatically by Doxygen for LAPACK from the source code.

Not a human author, not a ghostwriter β€” literally a doc generator doing its little thing and honestly? it ate. ✨

πŸ’– and that's the whole page, bestie πŸ’–

This lil masterpiece is LAPACK Version 3.12.0, living at tpmlqt(3) β€” go forth, call it correctly, and may your L always be in range πŸŽ€πŸ¦‹πŸŒΈπŸ’œ

πŸ“¦ where this page comes from