---
name: "stein"
section: "3"
platform: "linux"
package: "lapack-doc"
version: "3.12.1-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/stein"
---

# stein(3)

stein: eig, inverse iteration

## NAME

stein - stein: eig, inverse iteration

## SYNOPSIS

### Functions

subroutine **cstein** (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)\
 **CSTEIN**  subroutine **dstein** (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)\
 **DSTEIN**  subroutine **sstein** (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)\
 **SSTEIN**  subroutine **zstein** (n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)\
 **ZSTEIN**

## Detailed Description

## Function Documentation

### subroutine cstein (integer n, real, dimension( \* ) d, real, dimension( \* ) e, integer m, real, dimension( \* ) w, integer, dimension( \* ) iblock, integer, dimension( \* ) isplit, complex, dimension( ldz, \* ) z, integer ldz, real, dimension( \* ) work, integer, dimension( \* ) iwork, integer, dimension( \* ) ifail, integer info)

**CSTEIN**

**Purpose:**

```
!>
!> CSTEIN 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).
!>
!> Although the eigenvectors are real, they are stored in a complex
!> array, which may be passed to CUNMTR or CUPMTR for back
!> transformation to the eigenvectors of a complex Hermitian matrix
!> which was reduced to tridiagonal form.
!>
!>
```

**Parameters**

*N*

```
!>          N is INTEGER
!>          The order of the matrix.  N >= 0.
!>
```

*D*

```
!>          D is REAL array, dimension (N)
!>          The n diagonal elements of the tridiagonal matrix T.
!>
```

*E*

```
!>          E is REAL array, dimension (N-1)
!>          The (n-1) subdiagonal elements of the tridiagonal matrix
!>          T, stored in elements 1 to N-1.
!>
```

*M*

```
!>          M is INTEGER
!>          The number of eigenvectors to be found.  0 <= M <= N.
!>
```

*W*

```
!>          W is REAL array, dimension (N)
!>          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*

```
!>          IBLOCK is INTEGER array, dimension (N)
!>          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*

```
!>          ISPLIT is INTEGER array, dimension (N)
!>          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*

```
!>          Z is COMPLEX array, dimension (LDZ, M)
!>          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.
!>          The imaginary parts of the eigenvectors are set to zero.
!>
```

*LDZ*

```
!>          LDZ is INTEGER
!>          The leading dimension of the array Z.  LDZ >= max(1,N).
!>
```

*WORK*

```
!>          WORK is REAL array, dimension (5*N)
!>
```

*IWORK*

```
!>          IWORK is INTEGER array, dimension (N)
!>
```

*IFAIL*

```
!>          IFAIL is INTEGER array, dimension (M)
!>          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*

```
!>          INFO is INTEGER
!>          = 0: successful exit
!>          < 0: if INFO = -i, the i-th argument had an illegal value
!>          > 0: if INFO = i, then i eigenvectors failed to converge
!>               in MAXITS iterations.  Their indices are stored in
!>               array IFAIL.
!>
```

**Internal Parameters:**

```
!>  MAXITS  INTEGER, default = 5
!>          The maximum number of iterations performed.
!>
!>  EXTRA   INTEGER, default = 2
!>          The number of iterations performed after norm growth
!>          criterion is satisfied, should be at least 1.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **180** of file **cstein.f**.

### subroutine dstein (integer n, double precision, dimension( \* ) d, double precision, dimension( \* ) e, integer m, double precision, dimension( \* ) w, integer, dimension( \* ) iblock, integer, dimension( \* ) isplit, double precision, dimension( ldz, \* ) z, integer ldz, double precision, dimension( \* ) work, integer, dimension( \* ) iwork, integer, dimension( \* ) ifail, integer info)

**DSTEIN**

**Purpose:**

```
!>
!> 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).
!>
```

**Parameters**

*N*

```
!>          N is INTEGER
!>          The order of the matrix.  N >= 0.
!>
```

*D*

```
!>          D is DOUBLE PRECISION array, dimension (N)
!>          The n diagonal elements of the tridiagonal matrix T.
!>
```

*E*

```
!>          E is DOUBLE PRECISION array, dimension (N-1)
!>          The (n-1) subdiagonal elements of the tridiagonal matrix
!>          T, in elements 1 to N-1.
!>
```

*M*

```
!>          M is INTEGER
!>          The number of eigenvectors to be found.  0 <= M <= N.
!>
```

*W*

```
!>          W is DOUBLE PRECISION array, dimension (N)
!>          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 DSTEBZ with ORDER = 'B' is expected here. )
!>
```

*IBLOCK*

```
!>          IBLOCK is INTEGER array, dimension (N)
!>          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 DSTEBZ is expected here. )
!>
```

*ISPLIT*

```
!>          ISPLIT is INTEGER array, dimension (N)
!>          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 DSTEBZ is expected here. )
!>
```

*Z*

```
!>          Z is DOUBLE PRECISION array, dimension (LDZ, M)
!>          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*

```
!>          LDZ is INTEGER
!>          The leading dimension of the array Z.  LDZ >= max(1,N).
!>
```

*WORK*

```
!>          WORK is DOUBLE PRECISION array, dimension (5*N)
!>
```

*IWORK*

```
!>          IWORK is INTEGER array, dimension (N)
!>
```

*IFAIL*

```
!>          IFAIL is INTEGER array, dimension (M)
!>          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*

```
!>          INFO is INTEGER
!>          = 0: successful exit.
!>          < 0: if INFO = -i, the i-th argument had an illegal value
!>          > 0: if INFO = i, then i eigenvectors failed to converge
!>               in MAXITS iterations.  Their indices are stored in
!>               array IFAIL.
!>
```

**Internal Parameters:**

```
!>  MAXITS  INTEGER, default = 5
!>          The maximum number of iterations performed.
!>
!>  EXTRA   INTEGER, default = 2
!>          The number of iterations performed after norm growth
!>          criterion is satisfied, should be at least 1.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **172** of file **dstein.f**.

### subroutine sstein (integer n, real, dimension( \* ) d, real, dimension( \* ) e, integer m, real, dimension( \* ) w, integer, dimension( \* ) iblock, integer, dimension( \* ) isplit, real, dimension( ldz, \* ) z, integer ldz, real, dimension( \* ) work, integer, dimension( \* ) iwork, integer, dimension( \* ) ifail, integer info)

**SSTEIN**

**Purpose:**

```
!>
!> SSTEIN 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).
!>
```

**Parameters**

*N*

```
!>          N is INTEGER
!>          The order of the matrix.  N >= 0.
!>
```

*D*

```
!>          D is REAL array, dimension (N)
!>          The n diagonal elements of the tridiagonal matrix T.
!>
```

*E*

```
!>          E is REAL array, dimension (N-1)
!>          The (n-1) subdiagonal elements of the tridiagonal matrix
!>          T, in elements 1 to N-1.
!>
```

*M*

```
!>          M is INTEGER
!>          The number of eigenvectors to be found.  0 <= M <= N.
!>
```

*W*

```
!>          W is REAL array, dimension (N)
!>          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*

```
!>          IBLOCK is INTEGER array, dimension (N)
!>          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*

```
!>          ISPLIT is INTEGER array, dimension (N)
!>          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*

```
!>          Z is REAL array, dimension (LDZ, M)
!>          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*

```
!>          LDZ is INTEGER
!>          The leading dimension of the array Z.  LDZ >= max(1,N).
!>
```

*WORK*

```
!>          WORK is REAL array, dimension (5*N)
!>
```

*IWORK*

```
!>          IWORK is INTEGER array, dimension (N)
!>
```

*IFAIL*

```
!>          IFAIL is INTEGER array, dimension (M)
!>          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*

```
!>          INFO is INTEGER
!>          = 0: successful exit.
!>          < 0: if INFO = -i, the i-th argument had an illegal value
!>          > 0: if INFO = i, then i eigenvectors failed to converge
!>               in MAXITS iterations.  Their indices are stored in
!>               array IFAIL.
!>
```

**Internal Parameters:**

```
!>  MAXITS  INTEGER, default = 5
!>          The maximum number of iterations performed.
!>
!>  EXTRA   INTEGER, default = 2
!>          The number of iterations performed after norm growth
!>          criterion is satisfied, should be at least 1.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **172** of file **sstein.f**.

### subroutine zstein (integer n, double precision, dimension( \* ) d, double precision, dimension( \* ) e, integer m, double precision, dimension( \* ) w, integer, dimension( \* ) iblock, integer, dimension( \* ) isplit, complex\*16, dimension( ldz, \* ) z, integer ldz, double precision, dimension( \* ) work, integer, dimension( \* ) iwork, integer, dimension( \* ) ifail, integer info)

**ZSTEIN**

**Purpose:**

```
!>
!> ZSTEIN 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).
!>
!> Although the eigenvectors are real, they are stored in a complex
!> array, which may be passed to ZUNMTR or ZUPMTR for back
!> transformation to the eigenvectors of a complex Hermitian matrix
!> which was reduced to tridiagonal form.
!>
!>
```

**Parameters**

*N*

```
!>          N is INTEGER
!>          The order of the matrix.  N >= 0.
!>
```

*D*

```
!>          D is DOUBLE PRECISION array, dimension (N)
!>          The n diagonal elements of the tridiagonal matrix T.
!>
```

*E*

```
!>          E is DOUBLE PRECISION array, dimension (N-1)
!>          The (n-1) subdiagonal elements of the tridiagonal matrix
!>          T, stored in elements 1 to N-1.
!>
```

*M*

```
!>          M is INTEGER
!>          The number of eigenvectors to be found.  0 <= M <= N.
!>
```

*W*

```
!>          W is DOUBLE PRECISION array, dimension (N)
!>          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 DSTEBZ with ORDER = 'B' is expected here. )
!>
```

*IBLOCK*

```
!>          IBLOCK is INTEGER array, dimension (N)
!>          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 DSTEBZ is expected here. )
!>
```

*ISPLIT*

```
!>          ISPLIT is INTEGER array, dimension (N)
!>          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 DSTEBZ is expected here. )
!>
```

*Z*

```
!>          Z is COMPLEX*16 array, dimension (LDZ, M)
!>          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.
!>          The imaginary parts of the eigenvectors are set to zero.
!>
```

*LDZ*

```
!>          LDZ is INTEGER
!>          The leading dimension of the array Z.  LDZ >= max(1,N).
!>
```

*WORK*

```
!>          WORK is DOUBLE PRECISION array, dimension (5*N)
!>
```

*IWORK*

```
!>          IWORK is INTEGER array, dimension (N)
!>
```

*IFAIL*

```
!>          IFAIL is INTEGER array, dimension (M)
!>          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*

```
!>          INFO is INTEGER
!>          = 0: successful exit
!>          < 0: if INFO = -i, the i-th argument had an illegal value
!>          > 0: if INFO = i, then i eigenvectors failed to converge
!>               in MAXITS iterations.  Their indices are stored in
!>               array IFAIL.
!>
```

**Internal Parameters:**

```
!>  MAXITS  INTEGER, default = 5
!>          The maximum number of iterations performed.
!>
!>  EXTRA   INTEGER, default = 2
!>          The number of iterations performed after norm growth
!>          criterion is satisfied, should be at least 1.
!>
```

**Author**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line **180** of file **zstein.f**.

## Author

Generated automatically by Doxygen for LAPACK from the source code.
