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

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

πŸ’œ zpoequb.f β€” LAPACK's Library Functions Manual πŸ’œ

okay so bestie, buckle up, because this is /home/abui.../zpoequb.f(3) and it's literally the glow-up era of matrix equilibration ✨


🌸 NAME 🌸

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zpoequb.f

like, that's the whole name. it's a path. it's giving "my parents named me after the street they lived on" but honestly? iconic. πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

subroutine ZPOEQUB (n, a, lda, s, scond, amax, info)
    ZPOEQUB

πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

subroutine ZPOEQUB (integer n, complex*16, dimension( lda, * ) a, integer
    lda, double precision, dimension( * ) s, double precision scond, double
    precision amax, integer info)

ZPOEQUB

πŸ’… Purpose:

!>
!> ZPOEQUB computes row and column scalings intended to equilibrate a
!> Hermitian positive definite matrix A and reduce its condition number
!> (with respect to the two-norm).  S contains the scale factors,
!> S(i) = 1/sqrt(A(i,i)), chosen so that the scaled matrix B with
!> elements B(i,j) = S(i)*A(i,j)*S(j) has ones on the diagonal.  This
!> choice of S puts the condition number of B within a factor N of the
!> smallest possible condition number over all possible diagonal
!> scalings.
!>
!> This routine differs from ZPOEQU by restricting the scaling factors
!> to a power of the radix.  Barring over- and underflow, scaling by
!> these factors introduces no additional rounding errors.  However, the
!> scaled diagonal entries are no longer approximately 1 but lie
!> between sqrt(radix) and 1/sqrt(radix).
!>

so real talk 🫢 β€” ZPOEQUB takes your Hermitian positive definite matrix A and figures out scale factors to equilibrate it, i.e. chill out its condition number (two-norm vibes only). S holds the scale factors, S(i) = 1/sqrt(A(i,i)), picked so that the scaled matrix B β€” with elements B(i,j) = S(i)*A(i,j)*S(j) β€” has ones on the diagonal. periodt. πŸ’―

and the way this choice of S works? it puts the condition number of B within a factor N of the smallest possible condition number over all possible diagonal scalings. lowkey genius.

the plot twist πŸŒ€: this routine differs from ZPOEQU by restricting the scaling factors to a power of the radix. barring over- and underflow, scaling by these factors introduces no additional rounding errors. the trade-off? the scaled diagonal entries are no longer approximately 1 β€” they lie between sqrt(radix) and 1/sqrt(radix). iykyk. 🌈


πŸŽ€ Parameters πŸŽ€

  • N β€” N is INTEGER. the order of the matrix A. N >= 0. no negatives, bestie, that's the rule. πŸ™ˆ
!>          N is INTEGER
!>          The order of the matrix A.  N >= 0.
!>
  • A β€” A is COMPLEX*16 array, dimension (LDA,N). the N-by-N Hermitian positive definite matrix whose scaling factors are to be computed. only the diagonal elements of A are referenced β€” the rest of A is just there looking pretty. πŸ’…
!>          A is COMPLEX*16 array, dimension (LDA,N)
!>          The N-by-N Hermitian positive definite matrix whose scaling
!>          factors are to be computed.  Only the diagonal elements of A
!>          are referenced.
!>
  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,N). respect the leading dimension, she's main character energy. πŸ‘‘
!>          LDA is INTEGER
!>          The leading dimension of the array A.  LDA >= max(1,N).
!>
  • S β€” S is DOUBLE PRECISION array, dimension (N). if INFO = 0, S contains the scale factors for A. slay. πŸ“
!>          S is DOUBLE PRECISION array, dimension (N)
!>          If INFO = 0, S contains the scale factors for A.
!>
  • SCOND β€” SCOND is DOUBLE PRECISION. if INFO = 0, S contains the ratio of the smallest S(i) to the largest S(i). if SCOND >= 0.1 and AMAX is neither too large nor too small, it is not worth scaling by S. no cap, sometimes the vibe check says "leave it alone". πŸ’€
!>          SCOND is DOUBLE PRECISION
!>          If INFO = 0, S contains the ratio of the smallest S(i) to
!>          the largest S(i).  If SCOND >= 0.1 and AMAX is neither too
!>          large nor too small, it is not worth scaling by S.
!>
  • AMAX β€” AMAX is DOUBLE PRECISION. absolute value of largest matrix element. if AMAX is very close to overflow or very close to underflow, the matrix should be scaled. like, urgently. 🚨
!>          AMAX is DOUBLE PRECISION
!>          Absolute value of largest matrix element.  If AMAX is very
!>          close to overflow or very close to underflow, the matrix
!>          should be scaled.
!>
  • INFO β€” INFO is INTEGER. the receipts: πŸ“‹
!>          INFO is INTEGER
!>          = 0:  successful exit
!>          < 0:  if INFO = -i, the i-th argument had an illegal value
!>          > 0:  if INFO = i, the i-th diagonal element is nonpositive.
!>
ngl, INFO > 0 means the i-th diagonal element is nonpositive, and since this is a positive definite matrix routine... that's a whole situation. 😭

πŸ‘‘ Author πŸ‘‘

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

the whole squad collaborated, we love a group project that actually worked 🫢

Definition at line 118 of file zpoequb.f.


πŸ’– Author (again, yes, two author sections, don't @ me) πŸ’–

Generated automatically by Doxygen for LAPACK from the source code. so meta. so machine-made. so ✨ authentic ✨


LAPACK Β· Version 3.12.0 Β· /home/abui.../zpoequb.f(3)

and that's the page bestie!! πŸŽ€πŸ’œ go forth and equilibrate responsibly β€” mwah πŸ’‹βœ¨πŸ¦‹

πŸ“¦ where this page comes from