Previous: ctrcon Up: ../lapack-c.html Next: ctrexc

# ctrevc

```
NAME
CTREVC - compute all or some right and/or left eigenvectors
of a complex upper triangular matrix T

SYNOPSIS
SUBROUTINE CTREVC( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL,
VR, LDVR, MM, M, WORK, RWORK, INFO )

CHARACTER      HOWMNY, JOB

INTEGER        INFO, LDT, LDVL, LDVR, M, MM, N

LOGICAL        SELECT( * )

REAL           RWORK( * )

COMPLEX        T( LDT, * ), VL( LDVL, * ), VR( LDVR, *
), WORK( * )

PURPOSE
CTREVC computes all or some right and/or left eigenvectors
of a complex upper triangular matrix T.

The right eigenvector x and the left eigenvector y of T
corresponding to an eigenvalue w are defined by:

T*x = w*x,     y**H*T = w*y**H.

The routine may either return the matrices X and/or Y of
right or left eigenvectors of T, or the products Q*X and/or
Q*Y, where Q is an input unitary matrix. If T was obtained
from the Schur factorization of an original matrix A =
Q*T*Q**H, then Q*X and/or Q*Y are the matrices of right or
left eigenvectors of A.

ARGUMENTS
JOB     (input) CHARACTER*1
= 'R':  compute right eigenvectors only;
= 'L':  compute left eigenvectors only;
= 'B':  compute both right and left eigenvectors.

HOWMNY  (input) CHARACTER*1
= 'A':  compute all right and/or left eigenvectors;
= 'O':  compute all right and/or left eigenvectors,
multiplied on the left by an input (generally uni-
tary) matrix; = 'S':  compute some right and/or left
eigenvectors, specified by the logical array SELECT.

SELECT  (input) LOGICAL array, dimension (N)
If HOWMNY = 'S', SELECT specifies the eigenvectors
to be computed.  To select the eigenvector

corresponding to the j-th eigenvalue, SELECT(j) must
be set to .TRUE..  If HOWMNY = 'A' or 'O', SELECT is
not referenced.

N       (input) INTEGER
The order of the matrix T. N >= 0.

T       (input/output) COMPLEX array, dimension (LDT,N)
The upper triangular matrix T.  T is modified, but
restored on exit.

LDT     (input) INTEGER
The leading dimension of the array T. LDT >=
max(1,N).

VL      (input/output) COMPLEX array, dimension (LDVL,MM)
On entry, if JOB = 'L' or 'B' and HOWMNY = 'O', VL
must contain an N-by-N matrix Q (usually the unitary
matrix Q of Schur vectors returned by CHSEQR).  On
exit, if JOB = 'L' or 'B', VL contains: if HOWMNY =
'A', the matrix Y of left eigenvectors of T; if
HOWMNY = 'O', the matrix Q*Y; if HOWMNY = 'S', the
left eigenvectors of T specified by SELECT, stored
consecutively in the columns of VL, in the same
order as their eigenvalues.  If JOB = 'R', VL is not
referenced.

LDVL    (input) INTEGER
The leading dimension of the array VL.  LDVL >=
max(1,N).

VR      (input/output) COMPLEX array, dimension (LDVR,MM)
On entry, if JOB = 'R' or 'B' and HOWMNY = 'O', VR
must contain an N-by-N matrix Q (usually the unitary
matrix Q of Schur vectors returned by CHSEQR).  On
exit, if JOB = 'R' or 'B', VR contains: if HOWMNY =
'A', the matrix X of right eigenvectors of T; if
HOWMNY = 'O', the matrix Q*X; if HOWMNY = 'S', the
right eigenvectors of T specified by SELECT, stored
consecutively in the columns of VR, in the same
order as their eigenvalues.  If JOB = 'L', VR is not
referenced.

LDVR    (input) INTEGER
The leading dimension of the array VR.  LDVR >=
max(1,N).

MM      (input) INTEGER
The number of columns in the arrays VL and/or VR. MM
>= M.

M       (output) INTEGER

The number of columns in the arrays VL and/or VR
required to store the eigenvectors. If HOWMNY = 'A'
or 'O', M is set to N.

WORK    (workspace) COMPLEX array, dimension (2*N)

RWORK   (workspace) REAL array, dimension (N)

INFO    (output) INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal
value

FURTHER DETAILS
The algorithm used in this program is basically backward
(forward) substitution, with scaling to make the code robust
against possible overflow.

Each eigenvector is normalized so that the element of larg-
est magnitude has magnitude 1; here the magnitude of a com-
plex number (x,y) is taken to be |x| + |y|.
```