# ?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 )

## 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

  COMPLEX*16 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 first 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

  COMPLEX*16 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

  COMPLEX*16 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

  COMPLEX*16 for zlaein.

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

ldb

  INTEGER. The first 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.

bignum

  REAL for slaein

  DOUBLE PRECISION for dlaein.

  bignum is a machine-dependent value close to overflow threshold. Used for real flavors only.

## 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.

Parent topic: Auxiliary Routines