SRC/cgbequ.f(3)
β¨ SRC/cgbequ.f β¨
okay so bestie, welcome to the glow-up era of SRC/cgbequ.f β this is the LAPACK page for cgbequ, and it's genuinely one of those little routines that quietly does the most. π
π SYNOPSIS π
Functions/Subroutines
subroutine cgbequ (m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, info)β the vibe check of the whole page, this isCGBEQUherself π
π Function/Subroutine Documentation π
π¦ subroutine cgbequ (integer m, integer n, integer kl, integer ku, complex, dimension( ldab, * ) ab, integer ldab, real, dimension( * ) r, real, dimension( * ) c, real rowcnd, real colcnd, real amax, integer info)
CGBEQU
πΈ Purpose
!>
!> CGBEQU computes row and column scalings intended to equilibrate an
!> M-by-N band matrix A and reduce its condition number. R returns the
!> row scale factors and C the column scale factors, chosen to try to
!> make the largest element in each row and column of the matrix B with
!> elements B(i,j)=R(i)*A(i,j)*C(j) have absolute value 1.
!>
!> R(i) and C(j) are restricted to be between SMLNUM = smallest safe
!> number and BIGNUM = largest safe number. Use of these scaling
!> factors is not guaranteed to reduce the condition number of A but
!> works well in practice.
!>
so like, CGBEQU is out here computing row and column scalings to equilibrate an M-by-N band matrix A and bring its condition number down. R comes back with the row scale factors, C with the column scale factors β picked so the biggest element in each row and column of the matrix B (that's the one where B(i,j)=R(i)*A(i,j)*C(j), keep up bestie) has absolute value 1. iconic behaviour tbh. π«Ά
R(i) and C(j) are locked between SMLNUM = smallest safe number and BIGNUM = largest safe number. and real talk, using these scaling factors is not guaranteed to reduce the condition number of A, but it works well in practice β no cap, that's straight from the page. π―
π Parameters
Mβ isINTEGER. The number of rows of the matrixA.M >= 0. πNβ isINTEGER. The number of columns of the matrixA.N >= 0.KLβ isINTEGER. The number of subdiagonals within the band ofA.KL >= 0. (the down-bad diagonals β¨)KUβ isINTEGER. The number of superdiagonals within the band ofA.KU >= 0. (the up-and-over diagonals π¦)ABβ isCOMPLEX array, dimension (LDAB,N). The band matrixA, stored in rows1toKL+KU+1. The j-th column ofAis stored in the j-th column of the arrayABlike this:
AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(m,j+kl).
LDABβ isINTEGER. The leading dimension of the arrayAB.LDAB >= KL+KU+1. πRβ isREAL array, dimension (M). IfINFO = 0, orINFO > M,Rcontains the row scale factors forA. πCβ isREAL array, dimension (N). IfINFO = 0,Ccontains the column scale factors forA. βROWCNDβ isREAL. IfINFO = 0orINFO > M,ROWCNDcontains the ratio of the smallestR(i)to the largestR(i). IfROWCND >= 0.1andAMAXis neither too large nor too small, it is not worth scaling byR. πCOLCNDβ isREAL. IfINFO = 0,COLCNDcontains the ratio of the smallestC(i)to the largestC(i). IfCOLCND >= 0.1, it is not worth scaling byC.AMAXβ isREAL. Absolute value of largest matrix element. IfAMAXis very close to overflow or very close to underflow, the matrix should be scaled. π₯INFOβ isINTEGER:= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, andiis<= M: the i-th row ofAis exactly zero> M: the(i-M)-th column ofAis exactly zero
lowkey important: those zero row / zero column situations are real and they come back to you in INFO, so don't sleep on checking it. π
π§ Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 152 of file cgbequ.f. π
π Author
Generated automatically by Doxygen for LAPACK from the source code. (yes bestie, the robots wrote the page, the humans wrote the Fortran π«)
LAPACK Version 3.12.0 β that's the whole mood, mwah, ily, go equilibrate something πππ¦β¨
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms