laneg(3)

πŸ’… laneg(3) β€” Sturm count, but make it a whole moment

Okay bestie, welcome to laneg(3) β€” yes, the whole manual page, and no, it's not boring, like at all, it's giving linear algebra legend energy 🫢


✨ NAME ✨

laneg β€” laneg: Sturm count. That's the whole vibe. Short, sweet, iconic. Periodt.


🌸 SYNOPSIS 🌸

Two functions, both living their best life in here:

integer function dlaneg (n, d, lld, sigma, pivmin, r)
    DLANEG computes the Sturm count.
integer function slaneg (n, d, lld, sigma, pivmin, r)
    SLANEG computes the Sturm count.

πŸ¦‹ Detailed Description πŸ¦‹

Spoiler: there isn't a big prose paragraph here, the details live down in the function docs. Scroll, bestie πŸ“œ


πŸŽ€ Function Documentation πŸŽ€

πŸ’œ integer function dlaneg (integer n, double precision, dimension( * ) d, double precision, dimension( * ) lld, double precision sigma, double precision pivmin, integer r)

DLANEG computes the Sturm count. Double precision edition, fancy πŸ’…

⭐ Purpose:

!>
!> DLANEG computes the Sturm count, the number of negative pivots
!> encountered while factoring tridiagonal T - sigma I = L D L^T.
!> This implementation works directly on the factors without forming
!> the tridiagonal matrix T.  The Sturm count is also the number of
!> eigenvalues of T less than sigma.
!>
!> This routine is called from DLARRB.
!>
!> The current routine does not use the PIVMIN parameter but rather
!> requires IEEE-754 propagation of Infinities and NaNs.  This
!> routine also has no input range restrictions but does require
!> default exception handling such that x/0 produces Inf when x is
!> non-zero, and Inf/Inf produces NaN.  For more information, see:
!>
!>   Marques, Riedy, and Voemel,  SIAM Journal on
!>   Scientific Computing, v28, n5, 2006.  DOI 10.1137/050641624
!>   (Tech report version in LAWN 172 with the same title.)
!>

So real talk: it counts negative pivots while factoring tridiagonal T - sigma I = L D L^T, straight off the factors, without ever forming T. And that count doubles as the number of eigenvalues of T less than sigma. Also it's called from DLARRB. And heads up β€” it does not use the PIVMIN parameter, it needs IEEE-754 propagation of Infinities and NaNs, and it has no input range restrictions but does need default exception handling like x/0 giving Inf when x is non-zero, and Inf/Inf giving NaN. iykyk πŸ”₯

πŸ“ Parameters

  • N β€” N is INTEGER. The order of the matrix. That's it, that's the girl.
  • D β€” D is DOUBLE PRECISION array, dimension (N). The N diagonal elements of the diagonal matrix D.
  • LLD β€” LLD is DOUBLE PRECISION array, dimension (N-1). The (N-1) elements L(i)*L(i)*D(i). Not L(i)*L(i)*something else, don't play 😭
  • SIGMA β€” SIGMA is DOUBLE PRECISION. Shift amount in T - sigma I = L D L^T.
  • PIVMIN β€” PIVMIN is DOUBLE PRECISION. The minimum pivot in the Sturm sequence. May be used when zero pivots are encountered on non-IEEE-754 architectures. (Remember: this routine doesn't actually use it β€” it's just sitting there being cute.)
  • R β€” R is INTEGER. The twist index for the twisted factorization that is used for the negcount. "Twisted factorization" is such a main character phrase ngl πŸ‘‘

πŸ‘‘ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

🌈 Contributors:

  • Osni Marques, LBNL/NERSC, USA
  • Christof Voemel, University of California, Berkeley, USA
  • Jason Riedy, University of California, Berkeley, USA

Definition at line 117 of file dlaneg.f.


πŸ’– integer function slaneg (integer n, real, dimension( * ) d, real, dimension( * ) lld, real sigma, real pivmin, integer r)

SLANEG computes the Sturm count. Same queen, REAL era ✨

⭐ Purpose:

!>
!> SLANEG computes the Sturm count, the number of negative pivots
!> encountered while factoring tridiagonal T - sigma I = L D L^T.
!> This implementation works directly on the factors without forming
!> the tridiagonal matrix T.  The Sturm count is also the number of
!> eigenvalues of T less than sigma.
!>
!> This routine is called from SLARRB.
!>
!> The current routine does not use the PIVMIN parameter but rather
!> requires IEEE-754 propagation of Infinities and NaNs.  This
!> routine also has no input range restrictions but does require
!> default exception handling such that x/0 produces Inf when x is
!> non-zero, and Inf/Inf produces NaN.  For more information, see:
!>
!>   Marques, Riedy, and Voemel,  SIAM Journal on
!>   Scientific Computing, v28, n5, 2006.  DOI 10.1137/050641624
!>   (Tech report version in LAWN 172 with the same title.)
!>

Same deal as above but this one's called from SLARRB. Same IEEE-754 requirement (Inf and NaN propagation, x/0 β†’ Inf for non-zero x, Inf/Inf β†’ NaN), same "no input range restrictions", same "does not use PIVMIN" warning. Lowkey twins πŸ‘―β€β™€οΈ

πŸ“ Parameters

  • N β€” N is INTEGER. The order of the matrix.
  • D β€” D is REAL array, dimension (N). The N diagonal elements of the diagonal matrix D.
  • LLD β€” LLD is REAL array, dimension (N-1). The (N-1) elements L(i)*L(i)*D(i).
  • SIGMA β€” SIGMA is REAL. Shift amount in T - sigma I = L D L^T.
  • PIVMIN β€” PIVMIN is REAL. The minimum pivot in the Sturm sequence. May be used when zero pivots are encountered on non-IEEE-754 architectures.
  • R β€” R is INTEGER. The twist index for the twisted factorization that is used for the negcount.

πŸ‘‘ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

🌈 Contributors:

  • Osni Marques, LBNL/NERSC, USA
  • Christof Voemel, University of California, Berkeley, USA
  • Jason Riedy, University of California, Berkeley, USA

Definition at line 117 of file slaneg.f.


🧚 Author 🧚

Generated automatically by Doxygen for LAPACK from the source code.

So no, a human did not handcraft this one, a robot did, and honestly? It ate πŸ€–πŸ’…


LAPACK β€” Version 3.12.0 πŸŽ€ and that's the whole page bestie, mwah, go read your eigenvalues, you've got this πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from