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