Visible to Intel only — GUID: GUID-0262B467-B5BB-48DF-96AA-3D03B2A48577
Visible to Intel only — GUID: GUID-0262B467-B5BB-48DF-96AA-3D03B2A48577
?stein
Computes the eigenvectors corresponding to specified eigenvalues of a real symmetric tridiagonal matrix.
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 );
- mkl.h
The routine computes the eigenvectors of a real symmetric tridiagonal matrix 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', but may also be used when the eigenvalues have been computed by other routines.
If you use this routine after ?stebz, it can take advantage of the block structure by performing inverse iteration on each block Ti separately, which is more efficient than using the whole matrix 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).
- matrix_layout
-
Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- n
-
The order of the matrix T (n≥ 0).
- m
-
The number of eigenvectors to be returned.
- d, e, w
-
Arrays:
d contains the diagonal elements of T.
The size of d must be at least max(1, n).
e contains the sub-diagonal elements of T stored in elements 1 to n-1
The size of e must be at least max(1, n-1).
w contains the eigenvalues of T, stored in w[0] to w[m - 1] (as returned by stebz). Eigenvalues of T1 must be supplied first, in non-decreasing order; then those of T2, again in non-decreasing order, and so on. Constraint:
if iblock[i] = iblock[i+1], w[i] ≤w[i+1].
The size of w must be at least max(1, n).
- iblock, isplit
-
Arrays, size at least max(1, n). The arrays iblock and isplit, as returned by ?stebz with order = 'B'.
If you did not call ?stebz with order = 'B', set all elements of iblock to 1, and isplit[0] to n.)
- ldz
-
The leading dimension of the output array z; ldz≥ max(1, n) for column major layout and ldz>=max(1,m) for row major layout.
- z
-
Array, size at least max(1,ldz*m) for column major layout and max(1,ldz*n) for row major layout.
If info = 0, z contains an n-by-n matrix the columns of which are orthonormal eigenvectors. (The i-th column corresponds to the ith eigenvalue.)
- ifailv
-
Array, size at least max(1, m).
If info = i > 0, the first i elements of ifailv contain the indices of any eigenvectors that failed to converge.
This function returns a value info.
If info=0, the execution is successful.
If info = i, then 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 info = -i, the i-th parameter had an illegal value.
Each computed eigenvector zi is an exact eigenvector of a matrix T+Ei, where ||Ei||2 = O(ε)*||T||2. However, a set of eigenvectors computed by this routine may not be orthogonal to so high a degree of accuracy as those computed by ?steqr.