|
|
◆ 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] | N | Order 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] | M | The 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.
|