# ?laein

Computes a specified right or left eigenvector of an upper Hessenberg matrix by inverse iteration.

## Syntax

call slaein( rightv, noinit, n, h, ldh, wr, wi, vr, vi, b, ldb, work, eps3, smlnum, bignum, info )

call dlaein( rightv, noinit, n, h, ldh, wr, wi, vr, vi, b, ldb, work, eps3, smlnum, bignum, info )

call claein( rightv, noinit, n, h, ldh, w, v, b, ldb, rwork, eps3, smlnum, info )

call zlaein( rightv, noinit, n, h, ldh, w, v, b, ldb, rwork, eps3, smlnum, info )

• mkl.fi

## Description

The routine ?laein uses inverse iteration to find a right or left eigenvector corresponding to the eigenvalue (wr,wi) of a real upper Hessenberg matrix H (for real flavors slaein/dlaein) or to the eigenvalue w of a complex upper Hessenberg matrix H (for complex flavors claein/zlaein).

## Input Parameters

rightv

LOGICAL.

If `rightv = .TRUE.`, compute right eigenvector;

if `rightv = .FALSE.`, compute left eigenvector.

noinit

LOGICAL.

If `noinit = .TRUE.`, no initial vector is supplied in (vr,vi) or in v (for complex flavors);

if `noinit = .FALSE.`, initial vector is supplied in (vr,vi) or in v (for complex flavors).

n

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

h

REAL for slaein

DOUBLE PRECISION for dlaein

COMPLEX for claein

DOUBLE COMPLEX for zlaein.

Array h(ldh, *).

The second dimension of h must be at least `max(1, n)`. Contains the upper Hessenberg matrix H.

ldh

INTEGER. The leading dimension of the array h; `ldh ≥ max(1, n)`.

wr, wi

REAL for slaein

DOUBLE PRECISION for dlaein.

The real and imaginary parts of the eigenvalue of H whose corresponding right or left eigenvector is to be computed (for real flavors of the routine).

w

COMPLEX for claein

DOUBLE COMPLEX for zlaein.

The eigenvalue of H whose corresponding right or left eigenvector is to be computed (for complex flavors of the routine).

vr, vi

REAL for slaein

DOUBLE PRECISION for dlaein.

Arrays, dimension (n) each. Used for real flavors only. On entry, if `noinit = .FALSE.` and wi = 0.0, vr must contain a real starting vector for inverse iteration using the real eigenvalue wr;

if `noinit = .FALSE.` and `wi ≠ 0.0`, vr and vi must contain the real and imaginary parts of a complex starting vector for inverse iteration using the complex eigenvalue (wr,wi);otherwise vr and vi need not be set.

v

COMPLEX for claein

DOUBLE COMPLEX for zlaein.

Array, dimension (n). Used for complex flavors only. On entry, if `noinit = .FALSE.`, v must contain a starting vector for inverse iteration; otherwise v need not be set.

b

REAL for slaein

DOUBLE PRECISION for dlaein

COMPLEX for claein

DOUBLE COMPLEX for zlaein.

Workspace array b(ldb, *). The second dimension of b must be at least `max(1, n)`.

ldb

INTEGER. The leading dimension of the array b;

`ldb ≥ n+1` for real flavors;

`ldb ≥ max(1, n)` for complex flavors.

work

REAL for slaein

DOUBLE PRECISION for dlaein.

Workspace array, dimension (n).

Used for real flavors only.

rwork

REAL for claein

DOUBLE PRECISION for zlaein.

Workspace array, dimension (n).

Used for complex flavors only.

eps3, smlnum

REAL for slaein/claein

DOUBLE PRECISION for dlaein/zlaein.

eps3 is a small machine-dependent value which is used to perturb close eigenvalues, and to replace zero pivots.

smlnum is a machine-dependent value close to underflow threshold. A suggested value for smlnum is `slamch('s') * (n/slamch('p')` for slaein/claein or `dlamch('s') * (n/dlamch('p')` for dlaein/zlaein. See lamch.

bignum

REAL for slaein

DOUBLE PRECISION for dlaein.

bignum is a machine-dependent value close to overflow threshold. Used for real flavors only. A suggested value for bignum is `1 / slamch('s')` for slaein/claein or `1 / dlamch('s')` for dlaein/zlaein.

## Output Parameters

vr, vi

On exit, if `wi = 0.0` (real eigenvalue), vr contains the computed real eigenvector; if `wi ≠ 0.0` (complex eigenvalue), vr and vi contain the real and imaginary parts of the computed complex eigenvector. The eigenvector is normalized so that the component of largest magnitude has magnitude 1; here the magnitude of a complex number (x,y) is taken to be `|x| + |y|`.

vi is not referenced if `wi = 0.0`.

v

On exit, v contains the computed eigenvector, normalized so that the component of largest magnitude has magnitude 1; here the magnitude of a complex number (x,y) is taken to be `|x| + |y|`.

info

INTEGER.

If `info = 0`, the execution is successful.

If `info = 1`, inverse iteration did not converge. For real flavors, vr is set to the last iterate, and so is vi, if `wi ≠ 0.0`. For complex flavors, v is set to the last iterate.

For more complete information about compiler optimizations, see our Optimization Notice.