dtrevc(3)
NAME
- DTREVC - compute some or all of the right and/or left
- eigenvectors of a real upper quasi-triangular matrix T
SYNOPSIS
SUBROUTINE DTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL,
LDVL, VR, LDVR, MM, M, WORK, INFO )
CHARACTER HOWMNY, SIDE
INTEGER INFO, LDT, LDVL, LDVR, M, MM, N
LOGICAL SELECT( * )
DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ),
VR( LDVR, * ), WORK( * )
PURPOSE
- DTREVC computes some or all of the 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'*T = w*y'
- where y' denotes the conjugate transpose of the vector y.
- If all eigenvectors are requested, 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 factoriza
- tion of an original matrix A = Q*T*Q', then Q*X and 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 diagonal block has its diagonal elements
- equal and its off-diagonal elements of opposite sign. Corre
- sponding to each 2-by-2 diagonal block is a complex conjugate
- pair of eigenvalues and eigenvectors; only one eigenvector of the
- pair is computed, namely the one corresponding to the eigenvalue
- with positive imaginary part.
ARGUMENTS
- SIDE (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 eigenvec
- tors;
= 'B': compute all right and/or left eigenvec
- tors, and backtransform them using the input matrices supplied in
- VR and/or VL; = 'S': compute selected right and/or left eigen
- vectors, specified by the logical array SELECT.
- SELECT (input/output) LOGICAL array, dimension (N)
- If HOWMNY = 'S', SELECT specifies the eigenvectors
- to be computed. If HOWMNY = 'A' or 'B', SELECT is not refer
- enced. To select the real eigenvector corresponding to a real
- eigenvalue w(j), SELECT(j) must be set to .TRUE.. To select the
- complex eigenvector 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 .TRUE. and SELECT(j+1) is
- .FALSE..
- 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 SIDE = 'L' or 'B' and HOWMNY = 'B',
- VL must contain an N-by-N matrix Q (usually the orthogonal matrix
- Q of Schur vectors returned by DHSEQR). On exit, if SIDE = 'L'
- or 'B', VL contains: if HOWMNY = 'A', the matrix Y of left eigen
- vectors of T; VL has the same quasi-lower triangular form as T'.
- If T(i,i) is a real eigenvalue, then the i-th column VL(i) of VL
- is its corresponding eigenvector. If T(i:i+1,i:i+1) is a 2-by-2
- block whose eigenvalues are complex-conjugate eigenvalues of T,
- then VL(i)+sqrt(-1)*VL(i+1) is the complex eigenvector corre
- sponding to the eigenvalue with positive real part. if HOWMNY =
- 'B', 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 consecu
- tive columns, the first holding the real part, and the second the
- imaginary part. If SIDE = 'R', VL is not referenced.
- LDVL (input) INTEGER
- The leading dimension of the array VL. LDVL >=
- max(1,N) if SIDE = 'L' or 'B'; LDVL >= 1 otherwise.
- VR (input/output) DOUBLE PRECISION array, dimension
- (LDVR,MM)
- On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B',
- VR must contain an N-by-N matrix Q (usually the orthogonal matrix
- Q of Schur vectors returned by DHSEQR). On exit, if SIDE = 'R'
- or 'B', VR contains: if HOWMNY = 'A', the matrix X of right
- eigenvectors of T; VR has the same quasi-upper triangular form as
- T. If T(i,i) is a real eigenvalue, then the i-th column VR(i) of
- VR is its corresponding eigenvector. If T(i:i+1,i:i+1) is a
- 2-by-2 block whose eigenvalues are complex-conjugate eigenvalues
- of T, then VR(i)+sqrt(-1)*VR(i+1) is the complex eigenvector cor
- responding to the eigenvalue with positive real part. if HOWMNY
- = 'B', 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 consecu
- tive columns, the first holding the real part and the second the
- imaginary part. If SIDE = 'L', VR is not referenced.
- LDVR (input) INTEGER
- The leading dimension of the array VR. LDVR >=
- max(1,N) if SIDE = 'R' or 'B'; LDVR >= 1 otherwise.
- 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
- actually used to store the eigenvectors. If HOWMNY = 'A' or 'B',
- M is set to N. Each selected real eigenvector occupies one col
- umn and each selected complex eigenvector occupies two columns.
- WORK (workspace) DOUBLE PRECISION array, dimension
- (3*N)
- INFO (output) INTEGER
- = 0: successful exit
< 0: if INFO = -i, the i-th argument had an ille
- gal value
FURTHER DETAILS
- The algorithm used in this program is basically backward
- (forward) substitution, 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 com
- plex number (x,y) is taken to be |x| + |y|.
- LAPACK version 3.0 15 June 2000