F08JJF (DSTEBZ) computes some (or all) of the eigenvalues of a real symmetric tridiagonal matrix, by bisection.
SUBROUTINE F08JJF ( |
RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO) |
INTEGER |
N, IL, IU, M, NSPLIT, IBLOCK(N), ISPLIT(N), IWORK(3*N), INFO |
REAL (KIND=nag_wp) |
VL, VU, ABSTOL, D(*), E(*), W(N), WORK(4*N) |
CHARACTER(1) |
RANGE, ORDER |
|
F08JJF (DSTEBZ) uses bisection to compute some or all of the eigenvalues of a real symmetric tridiagonal matrix T.
It searches for zero or negligible off-diagonal elements of
T to see if the matrix splits into block diagonal form:
It performs bisection on each of the blocks
Ti and returns the block index of each computed eigenvalue, so that a subsequent call to
F08JKF (DSTEIN) to compute eigenvectors can also take advantage of the block structure.
Kahan W (1966) Accurate eigenvalues of a symmetric tridiagonal matrix
Report CS41 Stanford University
- 1: RANGE – CHARACTER(1)Input
On entry: indicates which eigenvalues are required.
- RANGE='A'
- All the eigenvalues are required.
- RANGE='V'
- All the eigenvalues in the half-open interval (VL,VU] are required.
- RANGE='I'
- Eigenvalues with indices IL to IU are required.
Constraint:
RANGE='A', 'V' or 'I'.
- 2: ORDER – CHARACTER(1)Input
On entry: indicates the order in which the eigenvalues and their block numbers are to be stored.
- ORDER='B'
- The eigenvalues are to be grouped by split-off block and ordered from smallest to largest within each block.
- ORDER='E'
- The eigenvalues for the entire matrix are to be ordered from smallest to largest.
Constraint:
ORDER='B' or 'E'.
- 3: N – INTEGERInput
On entry: n, the order of the matrix T.
Constraint:
N≥0.
- 4: VL – REAL (KIND=nag_wp)Input
- 5: VU – REAL (KIND=nag_wp)Input
On entry: if
RANGE='V', the lower and upper bounds, respectively, of the half-open interval
(
VL,
VU] within which the required eigenvalues lie.
If
RANGE='A' or
'I',
VL is not referenced.
Constraint:
if RANGE='V', VL<VU.
- 6: IL – INTEGERInput
- 7: IU – INTEGERInput
On entry: if
RANGE='I', the indices of the first and last eigenvalues, respectively, to be computed (assuming that the eigenvalues are in ascending order).
If
RANGE='A' or
'V',
IL is not referenced.
Constraint:
if RANGE='I', 1≤ IL≤ IU≤ N .
- 8: ABSTOL – REAL (KIND=nag_wp)Input
On entry: the absolute tolerance to which each eigenvalue is required. An eigenvalue (or cluster) is considered to have converged if it lies in an interval of width ≤ABSTOL. If ABSTOL≤0.0, then the tolerance is taken as machine precision×T1.
- 9: 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.
- 10: 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.
- 11: M – INTEGEROutput
On exit: m, the actual number of eigenvalues found.
- 12: NSPLIT – INTEGEROutput
On exit: the number of diagonal blocks which constitute the tridiagonal matrix T.
- 13: W(N) – REAL (KIND=nag_wp) arrayOutput
On exit: the required eigenvalues of the tridiagonal matrix T stored in W1 to Wm.
- 14: IBLOCK(N) – INTEGER arrayOutput
On exit: at each row/column
j where
Ej is zero or negligible,
T is considered to split into a block diagonal matrix and
IBLOCKi contains the block number of the eigenvalue stored in
Wi, for
i=1,2,…,m. Note that
IBLOCKi<0 for some
i whenever
INFO=1 or
3 (see
Section 6) and
RANGE='A' or
'V'.
- 15: ISPLIT(N) – INTEGER arrayOutput
On exit: the leading
NSPLIT elements contain the points at which
T splits up into sub-matrices as follows. The first sub-matrix consists of rows/columns
1 to
ISPLIT1, the second sub-matrix consists of rows/columns
ISPLIT1+1 to
ISPLIT2,
…, and the
NSPLIT(th) sub-matrix consists of rows/columns
ISPLITNSPLIT-1+1 to
ISPLITNSPLIT (
=n).
- 16: WORK(4×N) – REAL (KIND=nag_wp) arrayWorkspace
- 17: IWORK(3×N) – INTEGER arrayWorkspace
- 18: INFO – INTEGEROutput
On exit:
INFO=0 unless the routine detects an error (see
Section 6).
If failures with
INFO≥1 are causing persistent trouble and you have checked that the routine is being called correctly, please contact
NAG.
There is no complex analogue of this routine.