ZSTEIN(3)
π 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: ifINFO = -i, thei-th argument had an illegal value π> 0: ifINFO = i, thenieigenvectors failed to converge inMAXITSiterations β their indices are inIFAILπ
π 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 least1, okay? don't go below1.
π 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
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms