XLPack 7.0
XLPack Numerical Library (Excel VBA) Reference Manual
Loading...
Searching...
No Matches

◆ Dstein()

Sub Dstein ( N As  Long,
D() As  Double,
E() As  Double,
M As  Long,
W() As  Double,
Iblock() As  Long,
Isplit() As  Long,
Z() As  Double,
Ifail() As  Long,
Info As  Long 
)

Eigenvectors of a symmetric tridiagonal matrix (Inverse iteration method)

Purpose
This routine 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).
Parameters
[in]NOrder of the tridiagonal matrix. (N >= 0) (If N = 0, returns without computation)
[in]D()Array D(LD - 1) (LD >= N)
The N diagonal elements of the tridiagonal matrix T.
[in]E()Array E(LE - 1) (LE >= N - 1)
The (N - 1) off-diagonal elements of the tridiagonal matrix T.
[in]MThe number of eigenvectors to be found. (0 <= M <= N)
[in]W()Array W(LW - 1) (LW >= 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.)
[in]Iblock()Array Iblock(LIblock - 1) (LIblock >= 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.)
[in]Isplit()Array Isplit(LIsplit - 1) (LIsplit >= N)
The splitting points, at which T breaks up into submatrices. The first submatrix consists of rows/columns 1 to Isplit(0), the second of rows/columns Isplit(0) + 1 through Isplit(1), etc. (The output array Isplit() from Dstebz is expected here.)
[out]Z()Array Z(LZ1 - 1, LZ2 - 1) (LZ1 >= N, LZ2 >= 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.
[out]Ifail()Array Ifail(LIfail - 1) (LIfail >= 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().
[out]Info= 0: Successful exit.
= -1: The argument N had an illegal value. (N < 0)
= -2: The argument D() is invalid.
= -3: The argument E() is invalid.
= -4: The argument M had an illegal value. (M < 0 or M > N)
= -5: The argument W() is invalid.
= -6: The argument Iblock() is invalid.
= -7: The argument Isplit() is invalid.
= -8: The argument Z() is invalid.
= -9: The argument Ifail() is invalid.
= i > 0: Eigenvectors failed to converge in Maxits iterations. Their indices are stored in array ifail().
Reference
LAPACK
Example Program
See example of Dstebz.