gemqr(3)

πŸŽ€ gemqr β€” gemqr: multiply by Q from geqr πŸŽ€

okay bestie, welcome to gemqr(3) β€” yes that's the manual section three, we're in library functions territory, put your hair up πŸ’…


✨ NAME ✨

gemqr β€” gemqr: multiply by Q from geqr

like, that's the whole name. short. iconic. it multiplies stuff by Q. slay.


🌸 SYNOPSIS 🌸

🫢 Functions

  • subroutine cgemqr β€” CGEMQR, the complex one πŸ’œ
subroutine cgemqr (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work,
    lwork, info)
  • subroutine dgemqr β€” DGEMQR, the double precision one 🌸
subroutine dgemqr (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work,
    lwork, info)
  • subroutine sgemqr β€” SGEMQR, the single precision one πŸ“
subroutine sgemqr (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work,
    lwork, info)
  • subroutine zgemqr β€” ZGEMQR, the double complex one πŸ¦‹
subroutine zgemqr (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work,
    lwork, info)

four routines, one vibe. precision queens, all of them πŸ‘‘


πŸ’– Detailed Description πŸ’–

bestie this section is genuinely just vibes and a doorway β€” it says Function Documentation and then we go straight into the goods. no preamble. respect.


πŸ”₯ Function Documentation πŸ”₯

πŸ’… subroutine cgemqr

subroutine cgemqr (character side, character trans, integer m, integer n,
    integer k, complex, dimension( lda, * ) a, integer lda, complex,
    dimension( * ) t, integer tsize, complex, dimension( ldc, * ) c, integer
    ldc, complex, dimension( * ) work, integer lwork, integer info)

CGEMQR

⭐ Purpose

so what it does: CGEMQR overwrites the general real M-by-N matrix C with πŸ‘‡

                     SIDE = 'L'     SIDE = 'R'
     TRANS = 'N':      Q * C          C * Q
     TRANS = 'T':      Q**H * C       C * Q**H

(yes it says "real M-by-N matrix" in the complex routine, that's literally what the source says, I'm just the messenger 🫢)

where Q is a complex unitary matrix defined as the product of blocked elementary reflectors computed by tall skinny QR factorization (CGEQR). tall skinny. main character energy. ✨

πŸŽ€ Parameters

  • SIDE β€” CHARACTER*1. = 'L': apply Q or QH from the Left; = 'R': apply Q or QH from the Right. pick a side, bestie πŸ’…
  • TRANS β€” CHARACTER*1. = 'N': No transpose, apply Q; = 'C': Conjugate transpose, apply Q**H. πŸ¦‹
  • M β€” INTEGER. The number of rows of the matrix A. M >=0.
  • N β€” INTEGER. The number of columns of the matrix C. N >= 0.
  • K β€” 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 β€” COMPLEX array, dimension (LDA,K). Part of the data structure to represent Q as returned by CGEQR. it's not just a matrix, it's a whole data structure, respect the lore πŸ’œ
  • LDA β€” INTEGER. The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,M); if SIDE = 'R', LDA >= max(1,N).
  • T β€” COMPLEX array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by CGEQR. πŸŽ€
  • TSIZE β€” INTEGER. The dimension of the array T. TSIZE >= 5.
  • C β€” 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. she gets overwritten, no cap 😭
  • LDC β€” INTEGER. The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” (workspace) COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ✨
  • LWORK β€” INTEGER. The dimension of the array WORK. LWORK >= 1. If LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA. the sneaky little size-check trick, obsessed 😌
  • 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

These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface.

read that again bestie β€” not part of the interface. it's lore, not contract πŸ”₯

In this version:

  • T(2): row block size (MB)
  • T(3): column block size (NB)
  • T(6:TSIZE): data structure needed for Q, computed by CLATSQR or CGEQRT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, CGEQR will use either CLATSQR (if the matrix is tall-and-skinny) or CGEQRT to compute the QR factorization. This version of CGEMQR will use either CLAMTSQR or CGEMQRT to multiply matrix Q by another matrix. Further Details in CLAMTSQR or CGEMQRT. πŸŒ€

Definition at line 173 of file cgemqr.f.


🌈 subroutine dgemqr

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

DGEMQR

⭐ Purpose

DGEMQR 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 blocked elementary reflectors computed by tall skinny QR factorization (DGEQR). note the glow-up: no H here, it's a plain **T because we're in real land, we love a consistent queen πŸ’…

πŸŽ€ Parameters

  • SIDE β€” CHARACTER*1. = 'L': apply Q or QT from the Left; = 'R': apply Q or QT 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 A. M >=0.
  • N β€” INTEGER. The number of columns of the matrix C. N >= 0.
  • K β€” 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 β€” DOUBLE PRECISION array, dimension (LDA,K). Part of the data structure to represent Q as returned by DGEQR. πŸŽ€
  • LDA β€” INTEGER. The leading dimension of the array A. If SIDE = 'L', LDA >= max(1,M); if SIDE = 'R', LDA >= max(1,N).
  • T β€” DOUBLE PRECISION array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by DGEQR. πŸ’œ
  • TSIZE β€” INTEGER. The dimension of the array T. TSIZE >= 5.
  • C β€” 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 β€” INTEGER. The leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ⭐
  • LWORK β€” INTEGER. The dimension of the array WORK. LWORK >= 1. If LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA. πŸ¦‹
  • 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

These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface.

In this version:

  • T(2): row block size (MB)
  • T(3): column block size (NB)
  • T(6:TSIZE): data structure needed for Q, computed by DLATSQR or DGEQRT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, DGEQR will use either DLATSQR (if the matrix is tall-and-skinny) or DGEQRT to compute the QR factorization. This version of DGEMQR will use either DLAMTSQR or DGEMQRT to multiply matrix Q by another matrix. Further Details in DLATMSQR or DGEMQRT. πŸŒ€

ngl that last reference says DLATMSQR in the original and I am not touching it, character for character, we do not edit the lore πŸ™ˆ

Definition at line 173 of file dgemqr.f.


πŸ“ subroutine sgemqr

subroutine sgemqr (character side, character trans, integer m, integer n,
    integer k, real, dimension( lda, * ) a, integer lda, real, dimension( *
    ) t, integer tsize, real, dimension( ldc, * ) c, integer ldc, real,
    dimension( * ) work, integer lwork, integer info)

SGEMQR

⭐ Purpose

SGEMQR 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 blocked elementary reflectors computed by tall skinny QR factorization (SGEQR). πŸ“

πŸŽ€ Parameters

  • SIDE …

okay that's where part 1 wraps, bestie β€” sgemqr's parameters and the whole zgemqr situation are rolling in next, don't go anywhere πŸ’–

  • SIDE β€” it's a CHARACTER*1, bestie. 'L' means apply Q or Q**T from the Left; 'R' means apply Q or Q**T from the Right. Pick a side πŸ’…
  • TRANS β€” also CHARACTER*1. 'N' = no transpose, apply Q; 'T' = transpose, apply Q**T. That's the whole vibe check ✨
  • M β€” INTEGER, the number of rows of matrix A. Constraint: M >=0.
  • N β€” INTEGER, the number of columns of matrix C. Constraint: 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 β€” REAL array, dimension (LDA,K). Part of the data structure to represent Q as returned by SGEQR.
  • LDA β€” INTEGER, the leading dimension of the array A. If SIDE = 'L', LDA >= max(1,M); if SIDE = 'R', LDA >= max(1,N).
  • T β€” REAL array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by SGEQR.
  • TSIZE β€” INTEGER, the dimension of the array T. Constraint: TSIZE >= 5.
  • C β€” 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 β€” INTEGER, the leading dimension of the array C. Constraint: LDC >= max(1,M).
  • WORK β€” (workspace) REAL array, dimension (MAX(1,LWORK)).
  • LWORK β€” INTEGER, the dimension of the array WORK. If LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA.
  • INFO β€” INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value.

πŸ’– Author

Shoutout to the legends who wrote this:

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

🧚 Further Details

⚠️ Okay, tea time: these details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and they are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface.

In this version:

  • T(2): row block size (MB)
  • T(3): column block size (NB)
  • T(6:TSIZE): data structure needed for Q, computed by SLATSQR or SGEQRT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, SGEQR will use either SLATSQR (if the matrix is tall-and-skinny) or SGEQRT to compute the QR factorization. This version of SGEMQR will use either SLAMTSQR or SGEMQRT to multiply matrix Q by another matrix. Further Details in SLAMTSQR or SGEMQRT.

Definition at line 172 of file sgemqr.f.


πŸ¦‹ zgemqr β€” ZGEMQR, the complex*16 edition

subroutine zgemqr (character side, character trans, integer m, integer n,
    integer k, complex*16, dimension( lda, * ) a, integer lda, complex*16,
    dimension( * ) t, integer tsize, complex*16, dimension( ldc, * ) c,
    integer ldc, complex*16, dimension( * ) work, integer lwork, integer
    info)

🌸 Purpose

ZGEMQR overwrites the general real M-by-N matrix C with:

                     SIDE = 'L'     SIDE = 'R'
     TRANS = 'N':      Q * C          C * Q
     TRANS = 'T':      Q**H * C       C * Q**H

where Q is a complex unitary matrix defined as the product of blocked elementary reflectors computed by tall skinny QR factorization (ZGEQR).

πŸŽ€ 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 A. Constraint: M >=0.
  • N β€” INTEGER, the number of columns of the matrix C. Constraint: 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). Part of the data structure to represent Q as returned by ZGEQR.
  • LDA β€” INTEGER, the leading dimension of the array A. If SIDE = 'L', LDA >= max(1,M); if SIDE = 'R', LDA >= max(1,N).
  • T β€” COMPLEX*16 array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by ZGEQR.
  • TSIZE β€” INTEGER, the dimension of the array T. Constraint: TSIZE >= 5.
  • 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.
  • LDC β€” INTEGER, the leading dimension of the array C. Constraint: LDC >= max(1,M).
  • WORK β€” (workspace) COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK.
  • LWORK β€” INTEGER, the dimension of the array WORK. Constraint: LWORK >= 1. If LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA.
  • INFO β€” INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value.

✨ Author

Same absolute icons:

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

πŸ”₯ Further Details

⚠️ Again for the people in the back: these details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and they are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface.

In this version:

  • T(2): row block size (MB)
  • T(3): column block size (NB)
  • T(6:TSIZE): data structure needed for Q, computed by ZLATSQR or ZGEQRT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, ZGEQR will use either ZLATSQR (if the matrix is tall-and-skinny) or ZGEQRT to compute the QR factorization. This version of ZGEMQR will use either ZLAMTSQR or ZGEMQRT to multiply matrix Q by another matrix. Further Details in ZLAMTSQR or ZGEMQRT.

Definition at line 173 of file zgemqr.f.


This whole page got generated automatically by Doxygen for LAPACK from the source code β€” iconic tooling behavior, no cap.

That's a wrap on gemqr(3), bestie! Straight from LAPACK Version 3.12.0, page gemqr(3) β€” mwah πŸ’‹

πŸ“¦ where this page comes from