DTREVC(l) LAPACK routine (version 1.1) DTREVC(l)
NAME
DTREVC - compute all or some right and/or left eigenvectors of a real upper
quasi-triangular matrix T
SYNOPSIS
SUBROUTINE DTREVC( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, LDVR, MM,
M, WORK, INFO )
CHARACTER HOWMNY, JOB
INTEGER INFO, LDT, LDVL, LDVR, M, MM, N
LOGICAL SELECT( * )
DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ),
WORK( * )
PURPOSE
DTREVC computes all or some right and/or left eigenvectors of a real upper
quasi-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
orthogonal matrix. If T was obtained from the real Schur factorization of
an original matrix A = Q*T*Q**T, then Q*X and/or Q*Y are the matrices of
right or left eigenvectors of A.
T must be in Schur canonical form (as returned by DHSEQR), that is, block
upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diago-
nal block has its diagonal elements equal and its off-diagonal elements of
opposite sign.
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 orthogonal) matrix; = 'S': compute
some right and/or left eigenvectors, specified by the logical array
SELECT.
SELECT (input/output) LOGICAL array, dimension (N)
If HOWMNY = 'S', SELECT specifies the eigenvectors to be computed.
To select the real eigenvector corresponding to a real eigenvalue
w(j), SELECT(j) must be set to .TRUE.. To select the complex eigen-
vector corresponding to a complex conjugate pair w(j) and w(j+1),
either SELECT(j) or SELECT(j+1) must be set to .TRUE.; then on exit
SELECT(j) is If HOWMNY = 'A' or 'O', SELECT is not referenced.
N (input) INTEGER
The order of the matrix T. N >= 0.
T (input) DOUBLE PRECISION array, dimension (LDT,N)
The upper quasi-triangular matrix T in Schur canonical form.
LDT (input) INTEGER
The leading dimension of the array T. LDT >= max(1,N).
VL (input/output) DOUBLE PRECISION 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 orthogonal matrix Q of Schur vectors
returned by DHSEQR). 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. A complex eigenvector
corresponding to a complex eigenvalue is stored in two consecutive
columns, the first holding the real part, and the second the ima-
ginary part. If JOB = 'R', VL is not referenced.
LDVL (input) INTEGER
The leading dimension of the array VL. LDVL >= max(1,N).
VR (input/output) DOUBLE PRECISION 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 orthogonal matrix Q of Schur vectors
returned by DHSEQR). 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. A complex eigenvector
corresponding to a complex eigenvalue is stored in two consecutive
columns, the first holding the real part and the second the ima-
ginary part. 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; each selected real eigenvector occupies one
column and each selected complex eigenvector occupies two columns.
If HOWMNY = 'A' or 'O', M is set to N.
WORK (workspace) DOUBLE PRECISION array, dimension (3*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