ZTREVC(l) LAPACK routine (version 1.1) ZTREVC(l)
NAME
ZTREVC - compute all or some right and/or left eigenvectors of a complex
upper triangular matrix T
SYNOPSIS
SUBROUTINE ZTREVC( 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( * )
DOUBLE PRECISION RWORK( * )
COMPLEX*16 T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), WORK( * )
PURPOSE
ZTREVC 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 uni-
tary 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 unitary) 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*16 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*16 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 ZHSEQR). 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*16 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 ZHSEQR). 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*16 array, dimension (2*N)
RWORK (workspace) DOUBLE PRECISION 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) substi-
tution, with scaling to make the the code robust against possible overflow.
Each eigenvector is normalized so that the element of largest magnitude has
magnitude 1; here the magnitude of a complex number (x,y) is taken to be
|x| + |y|.
Back to the listing of computational routines for eigenvalue problems