SLAGTF(3)

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

πŸ’… NAME

okay so bestie, this page is all about SLAGTF β€” and the actual file it lives in is literally /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/slagtf.f (yes that's the whole path, she's long, she's iconic, she's giving deep-nested-build-directory energy πŸ—‚οΈβœ¨).


✨ SYNOPSIS ✨

Functions/Subroutines πŸŽ€

subroutine SLAGTF (n, a, lambda, b, c, tol, d, in, info)

so what does she do? SLAGTF computes an LU factorization of a matrix T-Ξ»I, where T is a general tridiagonal matrix, and Ξ» a scalar, using partial pivoting with row interchanges. no cap, that's the whole vibe πŸ’…


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

subroutine SLAGTF (integer n, real, dimension( * ) a, real lambda, real,
    dimension( * ) b, real, dimension( * ) c, real tol, real, dimension( * )
    d, integer, dimension( * ) in, integer info)

okay this one's the same deal as above, but let me say it all proper: SLAGTF computes an LU factorization of a matrix T-Ξ»I, where T is a general tridiagonal matrix, and Ξ» a scalar, using partial pivoting with row interchanges. slay πŸ”₯

🌸 Purpose 🌸

okay so here's the tea, straight from the source (the !> comments are literally living in the file, I'm just hyping them up):

SLAGTF factorizes the matrix (T - lambda*I), where T is an n by n tridiagonal matrix and lambda is a scalar, as
T - lambda*I = PLU,

where P is a permutation matrix, L is a unit lower tridiagonal matrix with at most one non-zero sub-diagonal elements per column and U is an upper triangular matrix with at most two non-zero super-diagonal elements per column. 🫢

The factorization is obtained by Gaussian elimination with partial pivoting and implicit row scaling. (yes she's doing the most, and yes it works πŸ’…)

The parameter LAMBDA is included in the routine so that SLAGTF may be used, in conjunction with SLAGTS, to obtain eigenvectors of T by inverse iteration. bestie duo!! πŸ‘‘βœ¨


πŸ“ Parameters πŸ“

N

N is INTEGER The order of the matrix T.

translation: how big is T, that's it, that's the whole job ✨

A

A is REAL array, dimension (N) On entry, A must contain the diagonal elements of T. On exit, A is overwritten by the n diagonal elements of the upper triangular matrix U of the factorization of T.

heads up: she gets overwritten, so don't come crying when your original diagonal is gone 😭

LAMBDA

LAMBDA is REAL On entry, the scalar lambda.

just the scalar, living her best scalar life πŸ’œ

B

B is REAL array, dimension (N-1) On entry, B must contain the (n-1) super-diagonal elements of T. On exit, B is overwritten by the (n-1) super-diagonal elements of the matrix U of the factorization of T.

again β€” overwritten on exit, ngl keep a copy if you're attached πŸ™ˆ

C

C is REAL array, dimension (N-1) On entry, C must contain the (n-1) sub-diagonal elements of T. On exit, C is overwritten by the (n-1) sub-diagonal elements of the matrix L of the factorization of T.

yep, overwritten too. L this time, not U. different girl πŸ’…

TOL

TOL is REAL On entry, a relative tolerance used to indicate whether or not the matrix (T - lambda*I) is nearly singular. TOL should normally be chose as approximately the largest relative error in the elements of T. For example, if the elements of T are correct to about 4 significant figures, then TOL should be set to about 5*10**(-4). If TOL is supplied as less than eps, where eps is the relative machine precision, then the value eps is used in place of TOL.

(and yes, the original really does say "chose" and not "chosen" β€” I'm not fixing it, I'm not a snitch 🫢)

lowkey the most important knob here: too tiny and eps takes over, so pick TOL like it's the largest relative error in T. periodt.

D

D is REAL array, dimension (N-2) On exit, D is overwritten by the (n-2) second super-diagonal elements of the matrix U of the factorization of T.

note the dimension bestie: (N-2). second super-diagonal. she's an overachiever ⭐

IN

IN is INTEGER array, dimension (N) On exit, IN contains details of the permutation matrix P. If an interchange occurred at the kth step of the elimination, then IN(k) = 1, otherwise IN(k) = 0. The element IN(n) returns the smallest positive integer j such that
abs( u(j,j) ) <= norm( (T - lambda*I)(j) )*TOL,
where norm( A(j) ) denotes the sum of the absolute values of the jth row of the matrix A. If no such j exists then IN(n) is returned as zero. If IN(n) is returned as positive, then a diagonal element of U is small, indicating that (T - lambda*I) is singular or nearly singular,

so IN(n) is literally the vibe check for singularity πŸ‘€ if it comes back positive, something's tiny on the diagonal and your matrix is singular or nearly singular. be aware!!

INFO

INFO is INTEGER = 0: successful exit < 0: if INFO = -k, the kth argument had an illegal value

zero means we ate and left no crumbs πŸ”₯ negative means someone handed over a bad argument and INFO is pointing fingers at argument number k πŸ’€


🌈 Author 🌈

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

the whole squad contributed, we love a collab πŸ’–

Definition at line 155 of file slagtf.f. (iykyk πŸ“)


⭐ Author (the meta one) ⭐

Generated automatically by Doxygen for LAPACK from the source code. not a human, a whole robot wrote this page, and honestly? she did that πŸ€–βœ¨


LAPACK Β· Version 3.12.0 β€” and that's the whole page bestie, mwah, go factorize something tridiagonal πŸ’œπŸ¦‹πŸŽ€

πŸ“¦ where this page comes from