/home/abui...hr_col02.f(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay so bestie, picture this: /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/LIN/zunhr_col02.f β€” that's the whole vibe, that's our main character file, and this page is its manual (manual name energy: it's a Library Functions Manual page, section 3, iykyk πŸŽ€).


✨ SYNOPSIS ✨

πŸ¦‹ Functions/Subroutines

  • subroutine ZUNHR_COL02 (m, n, mb1, nb1, nb2, result) β€” literally just ZUNHR_COL02, no notes, she speaks for herself πŸ’…

🌸 Function/Subroutine Documentation 🌸

subroutine ZUNHR_COL02 (integer m, integer n, integer mb1, integer nb1,
    integer nb2, double precision, dimension(6) result)

πŸ‘‘ Purpose:

!>
!> ZUNHR_COL02 tests ZUNGTSQR_ROW and ZUNHR_COL inside ZGETSQRHRT
!> (which calls ZLATSQR, ZUNGTSQR_ROW and ZUNHR_COL) using ZGEMQRT.
!> Therefore, ZLATSQR (part of ZGEQR), ZGEMQRT (part of ZGEMQR)
!> have to be tested before this test.
!>
!>

so like... this subroutine is basically the test girlie πŸ§ͺ✨ β€” she tests ZUNGTSQR_ROW and ZUNHR_COL inside ZGETSQRHRT (which itself calls ZLATSQR, ZUNGTSQR_ROW and ZUNHR_COL) using ZGEMQRT. and because of that whole dependency web, ZLATSQR (part of ZGEQR) and ZGEMQRT (part of ZGEEMQR)... bestie wait, note it down exactly: ZGEMQRT (part of ZGEMQR) have to be tested before this test. so do those first, no skipping, order matters, that's the rules 🫢

πŸŽ€ Parameters

M

!>          M is INTEGER
!>          Number of rows in test matrix.
!>

M is INTEGER β€” it's the number of rows in the test matrix, the vertical situation πŸ¦‹

N

!>          N is INTEGER
!>          Number of columns in test matrix.
!>

N is INTEGER β€” number of columns in the test matrix, slay πŸ“

MB1

!>          MB1 is INTEGER
!>          Number of row in row block in an input test matrix.
!>

MB1 is INTEGER β€” number of row in the row block in an input test matrix (yes, "row", singular, we're quoting her exactly, she's iconic πŸ’€)

NB1

!>          NB1 is INTEGER
!>          Number of columns in column block an input test matrix.
!>

NB1 is INTEGER β€” number of columns in the column block an input test matrix βœ…

NB2

!>          NB2 is INTEGER
!>          Number of columns in column block in an output test matrix.
!>

NB2 is INTEGER β€” number of columns in the column block in an output test matrix, note the output vs input distinction bestie πŸ”₯

RESULT

!>          RESULT is DOUBLE PRECISION array, dimension (6)
!>          Results of each of the six tests below.
!>

RESULT is a DOUBLE PRECISION array, dimension (6) β€” all six test results live here πŸ’–

and here's the whole cast of characters, fr fr:

!>            A is a m-by-n test input matrix to be factored.
!>            so that A = Q_gr * ( R )
!>                               ( 0 ),
!>
!>            Q_qr is an implicit m-by-m unitary Q matrix, the result
!>            of factorization in blocked WY-representation,
!>            stored in ZGEQRT output format.
!>
!>            R is a n-by-n upper-triangular matrix,
!>
!>            0 is a (m-n)-by-n zero matrix,
!>
!>            Q is an explicit m-by-m unitary matrix Q = Q_gr * I
!>
!>            C is an m-by-n random matrix,
!>
!>            D is an n-by-m random matrix.
!>
  • A β€” a m-by-n test input matrix to be factored, so that A = Q_gr * ( R ) / ( 0 ) 🧚
  • Q_qr β€” an implicit m-by-m unitary Q matrix, the result of factorization in blocked WY-representation, stored in ZGEQRT output format
  • R β€” a n-by-n upper-triangular matrix
  • 0 β€” a (m-n)-by-n zero matrix
  • Q β€” an explicit m-by-m unitary matrix Q = Q_gr * I
  • C β€” an m-by-n random matrix
  • D β€” an n-by-m random matrix

🌈 The six tests are:

!>          RESULT(1) = |R - (Q**H) * A| / ( eps * m * |A| )
!>            is equivalent to test for | A - Q * R | / (eps * m * |A|),
!>
!>          RESULT(2) = |I - (Q**H) * Q| / ( eps * m ),
!>
!>          RESULT(3) = | Q_qr * C - Q * C | / (eps * m * |C|),
!>
!>          RESULT(4) = | (Q_gr**H) * C - (Q**H) * C | / (eps * m * |C|)
!>
!>          RESULT(5) = | D * Q_qr - D * Q | / (eps * m * |D|)
!>
!>          RESULT(6) = | D * (Q_qr**H) - D * (Q**H) | / (eps * m * |D|),
!>
  1. RESULT(1) = |R - (Q**H) * A| / ( eps * m * |A| ) β€” which is equivalent to the test for | A - Q * R | / (eps * m * |A|) ⭐
  2. RESULT(2) = |I - (Q**H) * Q| / ( eps * m ) πŸ’œ
  3. RESULT(3) = | Q_qr * C - Q * C | / (eps * m * |C|) πŸŽ€
  4. RESULT(4) = | (Q_gr**H) * C - (Q**H) * C | / (eps * m * |C|) πŸ¦‹
  5. RESULT(5) = | D * Q_qr - D * Q | / (eps * m * |D|) 🌸
  6. RESULT(6) = | D * (Q_qr**H) - D * (Q**H) | / (eps * m * |D|) πŸ”₯

and where do those even come from? glad you asked, bestie:

!>          where:
!>            Q_qr * C, (Q_gr**H) * C, D * Q_qr, D * (Q_qr**H) are
!>            computed using ZGEMQRT,
!>
!>            Q * C, (Q**H) * C, D * Q, D * (Q**H)  are
!>            computed using ZGEMM.
!>

so: Q_qr * C, (Q_gr**H) * C, D * Q_qr, D * (Q_qr**H) are all computed using ZGEMQRT ✨ β€” and Q * C, (Q**H) * C, D * Q, D * (Q**H) are computed using ZGEMM. two different engines, two different vibes, both valid πŸ’…

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.
Definition at line 119 of file zunhr_col02.f. πŸ“

πŸ’« Author πŸ’«

Generated automatically by Doxygen for LAPACK from the source code β€” yes she was built by the robots, no cap πŸ€–πŸ’–


and that's the whole page, bestie!! 🫢 LAPACK, Version 3.12.0, /home/abui...hr_col02.f(3) β€” mwah, periodt πŸ’…πŸŽ€πŸ’–

πŸ“¦ where this page comes from