/home/abui...hr_col01.f(3)
π NAME π
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/LIN/sorhr_col01.f
okay so bestie, this page lives in the Library Functions Manual and it's about one single file β that big long path right up there. that's the whole name. it's giving "my address is a novel" energy but we move π
β¨ SYNOPSIS β¨
π¦ Functions/Subroutines
subroutine SORHR_COL01 (m, n, mb1, nb1, nb2, result)
SORHR_COL01
like, that's it. that's the girl. one subroutine, six arguments, no cap πΈ
π Function/Subroutine Documentation π
subroutine SORHR_COL01 (integer m, integer n, integer mb1, integer nb1,
integer nb2, real, dimension(6) result)
SORHR_COL01
π Purpose:
!>
!> SORHR_COL01 tests SORGTSQR and SORHR_COL using SLATSQR, SGEMQRT.
!> Therefore, SLATSQR (part of SGEQR), SGEMQRT (part of SGEMQR)
!> have to be tested before this test.
!>
!>
so literally what this does: it runs a vibe check on SORGTSQR and SORHR_COL, and it does that using SLATSQR and SGEMQRT. which means β important β SLATSQR (which is part of SGEQR) and SGEMQRT (which is part of SGEMQR) have to be tested before this test. it's a whole prerequisite chain, bestie. don't skip steps π«Ά
π Parameters π
πΈ M
!> M is INTEGER
!> Number of rows in test matrix.
!>
M is INTEGER. it's how many rows the test matrix has. simple as that π
π¦ N
!> N is INTEGER
!> Number of columns in test matrix.
!>
N is INTEGER. column count of the test matrix. iconic of her β¨
π MB1
!> MB1 is INTEGER
!> Number of row in row block in an input test matrix.
!>
MB1 is INTEGER. number of row in row block in an input test matrix (yes, "row" β that's the original phrasing, we stan a typo that came to slay) π
π§ NB1
!> NB1 is INTEGER
!> Number of columns in column block an input test matrix.
!>
NB1 is INTEGER. number of columns in 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 column block in an output test matrix. note the "output" β she's different from NB1, don't get it twisted π
π RESULT
!> RESULT is REAL array, dimension (6)
!> Results of each of the six tests below.
!>
RESULT is a REAL array, dimension (6). six slots, six tests, six results. she's holding all the receipts π
now the setup for those tests, 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 orthogonal Q matrix, the result
!> of factorization in blocked WY-representation,
!> stored in SGEQRT 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 orthogonal matrix Q = Q_gr * I
!>
!> C is an m-by-n random matrix,
!>
!> D is an n-by-m random matrix.
!>
okay so let's break the cast down, because the way this lineup ate:
Aβ the m-by-n test input matrix that gets factored, such thatA = Q_gr * ( R )over( 0 )Q_qrβ an implicit m-by-m orthogonal Q matrix, aka the result of factorization in blocked WY-representation, stored inSGEQRToutput formatRβ a n-by-n upper-triangular matrix0β a (m-n)-by-n zero matrix (yes she's literally just zeros, main character of nothing)Qβ an explicit m-by-m orthogonal matrix,Q = Q_gr * ICβ an m-by-n random matrixDβ 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|),
!>
RESULT(1)=|R - (Q**H) * A| / ( eps * m * |A| )β and that's equivalent to testing| A - Q * R | / (eps * m * |A|)RESULT(2)=|I - (Q**H) * Q| / ( eps * m )β orthogonality check, we love to see itRESULT(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|)
and then, the "where" clause, which is lowkey the most important part π:
!> where:
!> Q_qr * C, (Q_gr**H) * C, D * Q_qr, D * (Q_qr**H) are
!> computed using SGEMQRT,
!>
!> Q * C, (Q**H) * C, D * Q, D * (Q**H) are
!> computed using SGEMM.
!>
so:
Q_qr * C,(Q_gr**H) * C,D * Q_qr,D * (Q_qr**H)β computed usingSGEMQRTQ * C,(Q**H) * C,D * Q,D * (Q**H)β computed usingSGEMM
two different routines doing the multiplying, and the whole test is basically checking they agree. iykyk π
π«Ά Author π«Ά
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole squad showed up for this one π
Definition at line118of filesorhr_col01.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code. (she's not hand-written, she was born this way π§)
and that's the page, bestie!! πΈπβ¨
LAPACK β Version 3.12.0 β /home/abui...hr_col01.f(3) π
kisses, go test your SLATSQR and SGEMQRT first, mwah ππ¦
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms