ZSTEIN(3)

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

πŸ’… ZSTEIN(3) β€” like, the inverse-iteration eigenvector girlie ✨

okay so bestie, welcome to zstein.f(3) from the Library Functions Manual πŸŽ€ this is the page, this is the moment, and honestly the vibes are immaculate.


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine ZSTEIN (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info) β€” the one, the only, ZSTEIN 🫢

🌸 Function/Subroutine Documentation 🌸

subroutine ZSTEIN (integer n, double precision, dimension( * ) d, double precision, dimension( * ) e, integer m, double precision, dimension( * ) w, integer, dimension( * ) iblock, integer, dimension( * ) isplit, complex*16, dimension( ldz, * ) z, integer ldz, double precision, dimension( * ) work, integer, dimension( * ) iwork, integer, dimension( * ) ifail, integer info)

ZSTEIN πŸ”₯ (yes, that's the whole name, she's not doing a whole long thing)

πŸ’– Purpose πŸ’–

!> !> ZSTEIN computes the eigenvectors of a real symmetric tridiagonal !> matrix T corresponding to specified eigenvalues, using inverse !> iteration. !> !> The maximum number of iterations allowed for each eigenvector is !> specified by an internal parameter MAXITS (currently set to 5). !> !> Although the eigenvectors are real, they are stored in a complex !> array, which may be passed to ZUNMTR or ZUPMTR for back !> transformation to the eigenvectors of a complex Hermitian matrix > which was reduced to tridiagonal form. !> !>

So like β€” you hand her a real symmetric tridiagonal matrix T and a list of eigenvalues, and she literally finds the eigenvectors for you using inverse iteration. Iconic behavior. 🧚 The cap on iterations per eigenvector? That's MAXITS, and rn it's 5. The eigenvectors come out real, but she stores them in a complex array anyway, because they might get passed along to ZUNMTR or ZUPMTR for back transformation into the eigenvectors of a complex Hermitian matrix that had been reduced to tridiagonal form. It's giving teamwork, it's giving pipeline. 🌈


πŸŽ€ Parameters πŸŽ€

bestie there are a LOT of them, but we're gonna go through every single one, no skipping, periodt:

  • N
!> N is INTEGER !> The order of the matrix. N >= 0. !>

The order of the matrix. N >= 0. that's it, that's her.

  • D
!> D is DOUBLE PRECISION array, dimension (N) !> The n diagonal elements of the tridiagonal matrix T. !>

The n diagonal elements of the tridiagonal matrix T. the main character diagonal πŸ’…

  • E
!> E is DOUBLE PRECISION array, dimension (N-1) !> The (n-1) subdiagonal elements of the tridiagonal matrix !> T, stored in elements 1 to N-1. !>

The (n-1) subdiagonal elements of T, chilling in elements 1 to N-1. slightly fewer of them, she's lowkey humble like that.

  • M
!> M is INTEGER !> The number of eigenvectors to be found. 0 <= M <= N. !>

How many eigenvectors we're hunting for. 0 <= M <= N, no exceptions bestie.

  • W
!> W is DOUBLE PRECISION array, dimension (N) !> The first M elements of W contain the eigenvalues for !> which eigenvectors are to be computed. The eigenvalues !> should be grouped by split-off block and ordered from !> smallest to largest within the block. ( The output array !> W from DSTEBZ with ORDER = 'B' is expected here. ) !>

The first M elements of W hold the eigenvalues you want eigenvectors for. ⚠️ But listen β€” they should be grouped by split-off block and sorted smallest to largest within the block. What she expects here is the output array W from DSTEBZ with ORDER = 'B'. Don't come at her with unsorted chaos. 😭

  • IBLOCK
!> IBLOCK is INTEGER array, dimension (N) !> The submatrix indices associated with the corresponding !> eigenvalues in W; IBLOCK(i)=1 if eigenvalue W(i) belongs to !> the first submatrix from the top, =2 if W(i) belongs to !> the second submatrix, etc. ( The output array IBLOCK !> from DSTEBZ is expected here. ) !>

Which submatrix each eigenvalue in W belongs to. IBLOCK(i)=1 if eigenvalue W(i) is in the first submatrix from the top, =2 if W(i) is in the second, etc. Again: the IBLOCK output array from DSTEBZ is what she wants. iykyk πŸ¦‹

  • ISPLIT
!> ISPLIT is INTEGER array, dimension (N) !> The splitting points, at which T breaks up into submatrices. !> The first submatrix consists of rows/columns 1 to !> ISPLIT( 1 ), the second of rows/columns ISPLIT( 1 )+1 !> through ISPLIT( 2 ), etc. !> ( The output array ISPLIT from DSTEBZ is expected here. ) !>

The splitting points where T breaks up into submatrices, mmkay. First submatrix = rows/columns 1 to ISPLIT( 1 ), second = rows/columns ISPLIT( 1 )+1 through ISPLIT( 2 ), etc. And yes β€” the ISPLIT output array from DSTEBZ is expected here too. she's consistent πŸ’œ

  • Z
!> Z is COMPLEX*16 array, dimension (LDZ, M) !> The computed eigenvectors. The eigenvector associated !> with the eigenvalue W(i) is stored in the i-th column of !> Z. Any vector which fails to converge is set to its current !> iterate after MAXITS iterations. !> The imaginary parts of the eigenvectors are set to zero. !>

The computed eigenvectors! πŸ’– The eigenvector for eigenvalue W(i) goes in the i-th column of Z. And here's the tea: any vector that fails to converge gets set to its current iterate after MAXITS iterations. also, the imaginary parts of the eigenvectors are set to zero. like yes, they're complex-typed, but the imaginary bits are literally zero. vibes only, real numbers underneath. ✨

  • LDZ
!> LDZ is INTEGER !> The leading dimension of the array Z. LDZ >= max(1,N). !>

Leading dimension of Z. LDZ >= max(1,N). no cap.

  • WORK
!> WORK is DOUBLE PRECISION array, dimension (5*N) !>

Scratch space, DOUBLE PRECISION, dimension (5*N). she's just gonna live in there for a sec, don't worry about it. πŸ“

  • IWORK
!> IWORK is INTEGER array, dimension (N) !>

Integer scratch space, dimension (N).

  • IFAIL
!> IFAIL is INTEGER array, dimension (M) !> On normal exit, all elements of IFAIL are zero. !> If one or more eigenvectors fail to converge after !> MAXITS iterations, then their indices are stored in !> array IFAIL. !>

On a normal exit, every element of IFAIL is zero πŸŽ‰ If one or more eigenvectors fail to converge after MAXITS iterations, their indices get stashed in IFAIL. it's giving receipts. πŸ’€

  • INFO
!> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, then i eigenvectors failed to converge !> in MAXITS iterations. Their indices are stored in !> array IFAIL. !>

The status report, bestie:

  • = 0: successful exit 🫢 slay
  • < 0: if INFO = -i, the i-th argument had an illegal value πŸ™ˆ
  • > 0: if INFO = i, then i eigenvectors failed to converge in MAXITS iterations β€” their indices are in IFAIL 😭

🌟 Internal Parameters 🌟

these are the behind-the-scenes girlies, the stage crew, the ones you don't pass in but they're doing the work:

!> MAXITS INTEGER, default = 5 !> The maximum number of iterations performed. !> !> EXTRA INTEGER, default = 2 !> The number of iterations performed after norm growth !> criterion is satisfied, should be at least 1. !>
  • MAXITS β€” INTEGER, default = 5. The maximum number of iterations performed. πŸ’…
  • EXTRA β€” INTEGER, default = 2. The number of iterations performed after the norm growth criterion is satisfied. should be at least 1, okay? don't go below 1.

πŸ‘‘ Author πŸ‘‘

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

a whole committee of legends, we love to see it 🌸

Definition at line 180 of file zstein.f. πŸ“


πŸ’– Sign-off πŸ’–

okay so the byline of this whole page is that it was generated automatically by Doxygen for LAPACK from the source code β€” so don't come for the formatting, she was born this way πŸŽ€ and the library itself is LAPACK, Version 3.12.0, filed up top under /home/abui...RC/zstein.f(3).

go forth and compute those eigenvectors, bestie. inverse-iterate responsibly. πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from