?stein
?stein
Computes the eigenvectors corresponding to specified eigenvalues of a real symmetric tridiagonal matrix.
Syntax
lapack_int LAPACKE_sstein
(
int
matrix_layout
,
lapack_int
n
,
const float*
d
,
const float*
e
,
lapack_int
m
,
const float*
w
,
const lapack_int*
iblock
,
const lapack_int*
isplit
,
float*
z
,
lapack_int
ldz
,
lapack_int*
ifailv
);
lapack_int LAPACKE_dstein
(
int
matrix_layout
,
lapack_int
n
,
const double*
d
,
const double*
e
,
lapack_int
m
,
const double*
w
,
const lapack_int*
iblock
,
const lapack_int*
isplit
,
double*
z
,
lapack_int
ldz
,
lapack_int*
ifailv
);
lapack_int LAPACKE_cstein
(
int
matrix_layout
,
lapack_int
n
,
const float*
d
,
const float*
e
,
lapack_int
m
,
const float*
w
,
const lapack_int*
iblock
,
const lapack_int*
isplit
,
lapack_complex_float*
z
,
lapack_int
ldz
,
lapack_int*
ifailv
);
lapack_int LAPACKE_zstein
(
int
matrix_layout
,
lapack_int
n
,
const double*
d
,
const double*
e
,
lapack_int
m
,
const double*
w
,
const lapack_int*
iblock
,
const lapack_int*
isplit
,
lapack_complex_double*
z
,
lapack_int
ldz
,
lapack_int*
ifailv
);
Include Files
- mkl.h
Description
The routine computes the eigenvectors of a real symmetric tridiagonal matrix , but may also be used when the eigenvalues have been computed by other routines.
T
corresponding to specified eigenvalues, by inverse iteration. It is designed to be used in particular after the specified eigenvalues have been computed by ?stebz
with order
= 'B'
If you use this routine after separately, which is more efficient than using the whole matrix
?stebz
, it can take advantage of the block structure by performing inverse iteration on each block T
i
T
.If
T
has been formed by reduction of a full symmetric or Hermitian matrix A
to tridiagonal form, you can transform eigenvectors of T
to eigenvectors of A
by calling ?ormtr
or ?opmtr
(for real flavors) or by calling ?unmtr
or ?upmtr
(for complex flavors).Input Parameters
- matrix_layout
- Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- n
- The order of the matrixT().n≥0
- m
- The number of eigenvectors to be returned.
- d,e,w
- Arrays:dcontains the diagonal elements ofT.The size ofdmust be at least max(1,n).econtains the sub-diagonal elements ofTstored in elements 1 ton-1The size ofemust be at least max(1,n-1).wcontains the eigenvalues ofT, stored in(as returned by stebz). Eigenvalues oftow[0]w[m- 1]Tmust be supplied first, in non-decreasing order; then those of1T, again in non-decreasing order, and so on. Constraint:2if,iblock[i] =iblock[i+1].w[i]≤w[i+1]The size ofwmust be at least max(1,n).
- iblock,isplit
- Arrays, size at least max(1,n). The arraysiblockandisplit, as returned by?stebzwith.order='B'If you did not call?stebzwith, set all elements oforder='B'iblockto 1, andtoisplit[0]n.)
- ldz
- The leading dimension of the output arrayz;ldz≥max(1,n)for column major layout and.for row major layoutldz>=max(1,m)
Output Parameters
- z
- Array, sizeat least max(1,.ldz*m) for column major layout and max(1,ldz*n) for row major layoutIf,info= 0zcontains ann-by-nmatrix the columns of which are orthonormal eigenvectors. (Thei-th column corresponds to theith eigenvalue.)
- ifailv
- Array, size at least max(1,m).If> 0, the firstinfo=iielements ofifailvcontain the indices of any eigenvectors that failed to converge.
Return Values
This function returns a value
info
.If , the execution is successful.
info
=0If , then
info
= i
i
eigenvectors (as indicated by the parameter ifailv
) each failed to converge in 5 iterations. The current iterates are stored in the corresponding columns/rows of the array z
. If , the
info
= -i
i
-th parameter had an illegal value.Application Notes
Each computed eigenvector is an exact eigenvector of a matrix , where
z
i
T
+E
i
||||
. However, a set of eigenvectors computed by this routine may not be orthogonal to so high a degree of accuracy as those computed by E
i
2
= O
(ε
)*||T
||2
?steqr
.