Let `A` be a square `n`-by-`n` matrix. A scalar is called
an **eigenvalue** and a non-zero column vector `v` the corresponding
**right eigenvector** if . A nonzero column vector `u`
satisfying
is called the **left eigenvector** .
The first basic task
of the routines described in this section
is to compute, for a given matrix `A`, all `n` values of and,
if desired, their associated right eigenvectors `v` and/or
left eigenvectors `u`.

A second basic task is to compute the **Schur factorization** of a matrix `A`.
If `A` is complex, then its Schur factorization is , where
`Z` is unitary and `T` is upper triangular. If `A` is real, its
Schur factorization is , where `Z` is orthogonal.
and `T` is upper quasi-triangular (1-by-1 and 2-by-2 blocks on
its diagonal).
The columns of `Z` are called the **Schur vectors ** of `A`.
The eigenvalues of `A` appear on the diagonal of `T`; complex conjugate
eigenvalues of a real `A` correspond to 2-by-2 blocks on the diagonal of `T`.

These two basic tasks can be performed in the following stages:

- A general matrix
`A`is reduced to**upper Hessenberg form**`H`which is zero below the first subdiagonal. The reduction may be written with`Q`orthogonal if`A`is real, or with`Q`unitary if`A`is complex. The reduction is performed by subroutine xGEHRD, which represents`Q`in a factored form, as described in section 5.4. The routine xORGHR (or in the complex case xUNGHR) is provided to form`Q`explicitly. The routine xORMHR (or in the complex case xUNMHR) is provided to multiply another matrix by`Q`without forming`Q`explicitly. - The upper Hessenberg matrix
`H`is reduced to Schur form`T`, giving the Schur factorization (for`H`real) or (for`H`complex). The matrix`A`(the Schur vectors of`H`) may optionally be computed as well. Alternatively`S`may be postmultiplied into the matrix`Q`determined in stage 1, to give the matrix`Z`=`QS`, the Schur vectors of`A`. The eigenvalues are obtained from the diagonal of`T`. All this is done by subroutine xHSEQR. - Given the eigenvalues, the eigenvectors may be computed in
two different ways. xHSEIN performs inverse iteration on
`H`to compute the eigenvectors of`H`; xORMHR can then be used to multiply the eigenvectors by the matrix`Q`in order to transform them to eigenvectors of`A`. xTREVC computes the eigenvectors of`T`, and optionally transforms them to those of`H`or`A`if the matrix`S`or`Z`is supplied. Both xHSEIN and xTREVC allow selected left and/or right eigenvectors to be computed.

Other subsidiary tasks may be performed before or after those just described.

Tue Nov 29 14:03:33 EST 1994