# ?stein

Computes the eigenvectors corresponding to specified eigenvalues of a real symmetric tridiagonal matrix.

## Syntax

FORTRAN 77:

call sstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info)

call dstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info)

call cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info)

call zstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info)

Fortran 95:

call stein(d, e, w, iblock, isplit, z [,ifailv] [,info])

## Description

This 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).

## Input Parameters

n

  INTEGER. The order of the matrix T (`n ≥ 0`).

m

  INTEGER. The number of eigenvectors to be returned.

d, e, w

  REAL for single-precision flavors

  DOUBLE PRECISION for double-precision flavors.

  Arrays:

  d(*) contains the diagonal elements of T.

  The dimension 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 dimension of e must be at least max(1, n-1).

  w(*) contains the eigenvalues of T, stored in `w(1)` to w(m) (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 dimension of w must be at least max(1, n).

iblock, isplit

  INTEGER.

  Arrays, DIMENSION 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(1)` to n.)

ldz

  INTEGER. The first dimension of the output array z; `ldz ≥ max(1, n)`.

work

  REAL for single-precision flavors

  DOUBLE PRECISION for double-precision flavors.

  Workspace array, DIMENSION at least max(1, 5n).

iwork

  INTEGER.

  Workspace array, DIMENSION at least max(1, n).

## Output Parameters

z

  REAL for sstein

  DOUBLE PRECISION for dstein

  COMPLEX for cstein

  DOUBLE COMPLEX for zstein.

  Array, DIMENSION (ldz, *).

  If `info = 0`, z contains the m orthonormal eigenvectors, stored by columns. (The ith column corresponds to the i-th specified eigenvalue.)

ifailv

  INTEGER.

  Array, DIMENSION 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.

info

  INTEGER.

  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 of the array z.

  If `info = -i`, the i-th parameter had an illegal value.

## Fortran 95 Interface Notes

Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.

Specific details for the routine stein interface are the following:

d

  Holds the vector of length (n).

e

  Holds the vector of length (n).

w

  Holds the vector of length (n).

iblock

  Holds the vector of length (n).

isplit

  Holds the vector of length (n).

z

  Holds the matrix Z of size (n,m).

ifailv

  Holds the vector of length (m).

## Application Notes

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.

Parent topic: Symmetric Eigenvalue Problems