SRC/slasq2.f(3)

πŸ’– slasq2.f β€” qd array realness πŸ’–

Okay bestie, you're on the Library Functions Manual page for SRC/slasq2.f, and it's literally all about one subroutine: slasq2. It's giving high-relative-accuracy eigenvalue main character energy, no cap. ✨


🌸 NAME 🌸

SRC/slasq2.f β€” that's the file, that's the name, and honestly? Iconic. 🫢

πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine slasq2 (n, z, info)

SLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd Array Z to high relative accuracy. Used by sbdsqr and sstegr. πŸ’…

πŸŽ€ Function/Subroutine Documentation πŸŽ€

Here's the full signature, typed out exactly so nobody comes for us in the comments:

subroutine slasq2 (integer n, real, dimension( * ) z, integer info)

SLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd Array Z to high relative accuracy. Used by sbdsqr and sstegr.

🎯 Purpose

Okay so the source comment says SLASQ2 computes all the eigenvalues of the symmetric positive definite tridiagonal matrix associated with the qd array Z to high relative accuracy. Those eigenvalues are computed to high relative accuracy in the absence of denormalization, underflow and overflow. Yes, the source says high relative accuracy twice β€” we're honoring the repetition, bestie. πŸ’…

To see the relation of Z to the tridiagonal matrix, let L be a unit lower bidiagonal matrix with subdiagonals Z(2,4,6,,..) and let U be an upper bidiagonal matrix with 1's above and diagonal Z(1,3,5,,..). The tridiagonal is L*U or, if you prefer, the symmetric tridiagonal to which it is similar.

Note : SLASQ2 defines a logical variable, IEEE, which is true on machines which follow ieee-754 floating-point standard in their handling of infinities and NaNs, and false otherwise. This variable is passed to SLASQ3.

πŸ“ Parameters

πŸ’œ N

N is INTEGER

The number of rows and columns in the matrix. N >= 0.

πŸ’œ Z

Z is REAL array, dimension ( 4*N )

On entry Z holds the qd array. On exit, entries 1 to N hold the eigenvalues in decreasing order, Z( 2*N+1 ) holds the trace, and Z( 2*N+2 ) holds the sum of the eigenvalues. If N > 2, then Z( 2*N+3 ) holds the iteration count, Z( 2*N+4 ) holds NDIVS/NIN^2, and Z( 2*N+5 ) holds the percentage of shifts that failed.

πŸ’œ INFO

INFO is INTEGER

  • = 0: successful exit
  • < 0: if the i-th argument is a scalar and had an illegal value, then INFO = -i; if the i-th argument is an array and the j-entry had an illegal value, then INFO = -(i*100+j)
  • > 0: the algorithm failed
    • = 1, a split was marked by a positive value in E
    • = 2, current block of Z not diagonalized after 100*N iterations (in inner while loop). On exit Z holds a qd array with the same eigenvalues as the given Z.
    • = 3, termination criterion of outer while loop not met (program created more than N unreduced blocks)

πŸ‘‘ Author

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

πŸ”₯ Further Details

Local Variables: I0:N0 defines a current unreduced segment of Z. The shifts are accumulated in SIGMA. Iteration count is in ITER. Ping-pong is controlled by PP (alternates between 0 and 1).

Definition at line 111 of file slasq2.f.

🧚 Author

Generated automatically by Doxygen for LAPACK from the source code.


mwah πŸ’‹ β€” this page is brought to you by LAPACK Version 3.12.0 and SRC/slasq2.f(3). Bye bestie, go diagonalize something pretty! πŸŽ€βœ¨

πŸ“¦ where this page comes from