1ZTREVC(1) LAPACK routine (version 3.1) ZTREVC(1)
2
3
4
6 ZTREVC - some or all of the right and/or left eigenvectors of a complex
7 upper triangular matrix T
8
10 SUBROUTINE ZTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, LDVR,
11 MM, M, WORK, RWORK, INFO )
12
13 CHARACTER HOWMNY, SIDE
14
15 INTEGER INFO, LDT, LDVL, LDVR, M, MM, N
16
17 LOGICAL SELECT( * )
18
19 DOUBLE PRECISION RWORK( * )
20
21 COMPLEX*16 T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), WORK( * )
22
24 ZTREVC computes some or all of the right and/or left eigenvectors of a
25 complex upper triangular matrix T. Matrices of this type are produced
26 by the Schur factorization of a complex general matrix: A = Q*T*Q**H,
27 as computed by ZHSEQR.
28
29 The right eigenvector x and the left eigenvector y of T corresponding
30 to an eigenvalue w are defined by:
31
32 T*x = w*x, (y**H)*T = w*(y**H)
33
34 where y**H denotes the conjugate transpose of the vector y. The eigen‐
35 values are not input to this routine, but are read directly from the
36 diagonal of T.
37
38 This routine returns the matrices X and/or Y of right and left eigen‐
39 vectors of T, or the products Q*X and/or Q*Y, where Q is an input
40 matrix. If Q is the unitary factor that reduces a matrix A to Schur
41 form T, then Q*X and Q*Y are the matrices of right and left eigenvec‐
42 tors of A.
43
44
46 SIDE (input) CHARACTER*1
47 = 'R': compute right eigenvectors only;
48 = 'L': compute left eigenvectors only;
49 = 'B': compute both right and left eigenvectors.
50
51 HOWMNY (input) CHARACTER*1
52 = 'A': compute all right and/or left eigenvectors;
53 = 'B': compute all right and/or left eigenvectors, backtrans‐
54 formed using the matrices supplied in VR and/or VL; = 'S':
55 compute selected right and/or left eigenvectors, as indicated
56 by the logical array SELECT.
57
58 SELECT (input) LOGICAL array, dimension (N)
59 If HOWMNY = 'S', SELECT specifies the eigenvectors to be com‐
60 puted. The eigenvector corresponding to the j-th eigenvalue is
61 computed if SELECT(j) = .TRUE.. Not referenced if HOWMNY = 'A'
62 or 'B'.
63
64 N (input) INTEGER
65 The order of the matrix T. N >= 0.
66
67 T (input/output) COMPLEX*16 array, dimension (LDT,N)
68 The upper triangular matrix T. T is modified, but restored on
69 exit.
70
71 LDT (input) INTEGER
72 The leading dimension of the array T. LDT >= max(1,N).
73
74 VL (input/output) COMPLEX*16 array, dimension (LDVL,MM)
75 On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must con‐
76 tain an N-by-N matrix Q (usually the unitary matrix Q of Schur
77 vectors returned by ZHSEQR). On exit, if SIDE = 'L' or 'B', VL
78 contains: if HOWMNY = 'A', the matrix Y of left eigenvectors of
79 T; if HOWMNY = 'B', the matrix Q*Y; if HOWMNY = 'S', the left
80 eigenvectors of T specified by SELECT, stored consecutively in
81 the columns of VL, in the same order as their eigenvalues. Not
82 referenced if SIDE = 'R'.
83
84 LDVL (input) INTEGER
85 The leading dimension of the array VL. LDVL >= 1, and if SIDE
86 = 'L' or 'B', LDVL >= N.
87
88 VR (input/output) COMPLEX*16 array, dimension (LDVR,MM)
89 On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must con‐
90 tain an N-by-N matrix Q (usually the unitary matrix Q of Schur
91 vectors returned by ZHSEQR). On exit, if SIDE = 'R' or 'B', VR
92 contains: if HOWMNY = 'A', the matrix X of right eigenvectors
93 of T; if HOWMNY = 'B', the matrix Q*X; if HOWMNY = 'S', the
94 right eigenvectors of T specified by SELECT, stored consecu‐
95 tively in the columns of VR, in the same order as their eigen‐
96 values. Not referenced if SIDE = 'L'.
97
98 LDVR (input) INTEGER
99 The leading dimension of the array VR. LDVR >= 1, and if SIDE
100 = 'R' or 'B'; LDVR >= N.
101
102 MM (input) INTEGER
103 The number of columns in the arrays VL and/or VR. MM >= M.
104
105 M (output) INTEGER
106 The number of columns in the arrays VL and/or VR actually used
107 to store the eigenvectors. If HOWMNY = 'A' or 'B', M is set to
108 N. Each selected eigenvector occupies one column.
109
110 WORK (workspace) COMPLEX*16 array, dimension (2*N)
111
112 RWORK (workspace) DOUBLE PRECISION array, dimension (N)
113
114 INFO (output) INTEGER
115 = 0: successful exit
116 < 0: if INFO = -i, the i-th argument had an illegal value
117
119 The algorithm used in this program is basically backward (forward) sub‐
120 stitution, with scaling to make the the code robust against possible
121 overflow.
122
123 Each eigenvector is normalized so that the element of largest magnitude
124 has magnitude 1; here the magnitude of a complex number (x,y) is taken
125 to be |x| + |y|.
126
127
128
129
130 LAPACK routine (version 3.1) November 2006 ZTREVC(1)