F08JKF (DSTEIN) computes the eigenvectors of a real symmetric tridiagonal matrix corresponding to specified eigenvalues, by inverse iteration.
SUBROUTINE F08JKF ( |
N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAILV, INFO) |
INTEGER |
N, M, IBLOCK(*), ISPLIT(*), LDZ, IWORK(N), IFAILV(M), INFO |
REAL (KIND=nag_wp) |
D(*), E(*), W(*), Z(LDZ,*), WORK(5*N) |
|
F08JKF (DSTEIN) computes the eigenvectors of a real symmetric tridiagonal matrix
T corresponding to specified eigenvalues, by inverse iteration (see
Jessup and Ipsen (1992)). It is designed to be used in particular after the specified eigenvalues have been computed by
F08JJF (DSTEBZ) with
ORDER='B', but may also be used when the eigenvalues have been computed by other routines in
Chapters F02 or
F08.
If
T has been formed by reduction of a full real symmetric matrix
A to tridiagonal form, then eigenvectors of
T may be transformed to eigenvectors of
A by a call to
F08FGF (DORMTR) or
F08GGF (DOPMTR).
F08JJF (DSTEBZ) determines whether the matrix
T splits into block diagonal form:
and passes details of the block structure to this routine in the arrays
IBLOCK and
ISPLIT. This routine can then take advantage of the block structure by performing inverse iteration on each block
Ti separately, which is more efficient than using the whole matrix.
Golub G H and Van Loan C F (1996)
Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Jessup E and Ipsen I C F (1992) Improving the accuracy of inverse iteration
SIAM J. Sci. Statist. Comput. 13 550–572
- 1: N – INTEGERInput
On entry: n, the order of the matrix T.
Constraint:
N≥0.
- 2: D(*) – REAL (KIND=nag_wp) arrayInput
-
Note: the dimension of the array
D
must be at least
max1,N.
On entry: the diagonal elements of the tridiagonal matrix T.
- 3: E(*) – REAL (KIND=nag_wp) arrayInput
-
Note: the dimension of the array
E
must be at least
max1,N-1.
On entry: the off-diagonal elements of the tridiagonal matrix T.
- 4: M – INTEGERInput
On entry: m, the number of eigenvectors to be returned.
Constraint:
0≤M≤N.
- 5: W(*) – REAL (KIND=nag_wp) arrayInput
-
Note: the dimension of the array
W
must be at least
max1,N.
On entry: the eigenvalues of the tridiagonal matrix
T stored in
W1 to
Wm, as returned by
F08JJF (DSTEBZ) with
ORDER='B'. Eigenvalues associated with the first sub-matrix must be supplied first, in nondecreasing order; then those associated with the second sub-matrix, again in nondecreasing order; and so on.
Constraint:
if IBLOCKi=IBLOCKi+1, Wi≤Wi+1, for i=1,2,…,M-1.
- 6: IBLOCK(*) – INTEGER arrayInput
-
Note: the dimension of the array
IBLOCK
must be at least
max1,N.
On entry: the first
m elements must contain the sub-matrix indices associated with the specified eigenvalues, as returned by
F08JJF (DSTEBZ) with
ORDER='B'. If the eigenvalues were not computed by
F08JJF (DSTEBZ) with
ORDER='B', set
IBLOCKi to
1, for
i=1,2,…,m.
Constraint:
IBLOCKi≤IBLOCKi+1, for i=1,2,…,M-1.
- 7: ISPLIT(*) – INTEGER arrayInput
-
Note: the dimension of the array
ISPLIT
must be at least
max1,N.
On entry: the points at which
T breaks up into sub-matrices, as returned by
F08JJF (DSTEBZ) with
ORDER='B'. If the eigenvalues were not computed by
F08JJF (DSTEBZ) with
ORDER='B', set
ISPLIT1 to
N.
- 8: Z(LDZ,*) – REAL (KIND=nag_wp) arrayOutput
-
Note: the second dimension of the array
Z
must be at least
max1,M.
On exit: the
m eigenvectors, stored as columns of
Z; the
ith column corresponds to the
ith specified eigenvalue, unless
INFO>0 (in which case see
Section 6).
- 9: LDZ – INTEGERInput
On entry: the first dimension of the array
Z as declared in the (sub)program from which F08JKF (DSTEIN) is called.
Constraint:
LDZ≥ max1,N .
- 10: WORK(5×N) – REAL (KIND=nag_wp) arrayWorkspace
- 11: IWORK(N) – INTEGER arrayWorkspace
- 12: IFAILV(M) – INTEGER arrayOutput
On exit: if
INFO=i>0, the first
i elements of
IFAILV contain the indices of any eigenvectors which have failed to converge. The rest of the first
M elements of
IFAILV are set to
0.
- 13: INFO – INTEGEROutput
On exit:
INFO=0 unless the routine detects an error (see
Section 6).
Each computed eigenvector
zi is the exact eigenvector of a nearby matrix
A+Ei, such that
where
ε is the
machine precision. Hence the residual is small:
However, a set of eigenvectors computed by this routine may not be orthogonal to so high a degree of accuracy as those computed by
F08JEF (DSTEQR).
The complex analogue of this routine is
F08JXF (ZSTEIN).