dstein
dstein - compute the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration
SUBROUTINE DSTEIN( N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK,
* IWORK, IFAIL, INFO)
INTEGER N, M, LDZ, INFO
INTEGER IBLOCK(*), ISPLIT(*), IWORK(*), IFAIL(*)
DOUBLE PRECISION D(*), E(*), W(*), Z(LDZ,*), WORK(*)
SUBROUTINE DSTEIN_64( N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK,
* IWORK, IFAIL, INFO)
INTEGER*8 N, M, LDZ, INFO
INTEGER*8 IBLOCK(*), ISPLIT(*), IWORK(*), IFAIL(*)
DOUBLE PRECISION D(*), E(*), W(*), Z(LDZ,*), WORK(*)
SUBROUTINE STEIN( N, D, E, M, W, IBLOCK, ISPLIT, Z, [LDZ], [WORK],
* [IWORK], IFAIL, [INFO])
INTEGER :: N, M, LDZ, INFO
INTEGER, DIMENSION(:) :: IBLOCK, ISPLIT, IWORK, IFAIL
REAL(8), DIMENSION(:) :: D, E, W, WORK
REAL(8), DIMENSION(:,:) :: Z
SUBROUTINE STEIN_64( N, D, E, M, W, IBLOCK, ISPLIT, Z, [LDZ], [WORK],
* [IWORK], IFAIL, [INFO])
INTEGER(8) :: N, M, LDZ, INFO
INTEGER(8), DIMENSION(:) :: IBLOCK, ISPLIT, IWORK, IFAIL
REAL(8), DIMENSION(:) :: D, E, W, WORK
REAL(8), DIMENSION(:,:) :: Z
#include <sunperf.h>
void dstein(int n, double *d, double *e, int m, double *w, int *iblock, int *isplit, double *z, int ldz, int *ifail, int *info);
void dstein_64(long n, double *d, double *e, long m, double *w, long *iblock, long *isplit, double *z, long ldz, long *ifail, long *info);
dstein 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).
-
* N (input)
-
The order of the matrix. N >= 0.
-
* D (input)
-
The n diagonal elements of the tridiagonal matrix T.
-
* E (input)
-
The (n-1) subdiagonal elements of the tridiagonal matrix
T, in elements 1 to N-1. E(N) need not be set.
-
* M (input)
-
The number of eigenvectors to be found. 0 <= M <= N.
-
* W (input)
-
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 SSTEBZ with ORDER = 'B' is expected here. )
-
* IBLOCK (input)
-
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 SSTEBZ is expected here. )
-
* ISPLIT (input)
-
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 SSTEBZ is expected here. )
-
* Z (output)
-
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.
-
* LDZ (input)
-
The leading dimension of the array Z. LDZ >= max(1,N).
-
* WORK (workspace)
-
dimension(5*N)
-
* IWORK (workspace)
-
dimension(N)
-
* IFAIL (output)
-
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.
-
* INFO (output)
-