1ZGEEVX(1) LAPACK driver routine (version 3.1) ZGEEVX(1)
2
3
4
6 ZGEEVX - for an N-by-N complex nonsymmetric matrix A, the eigenvalues
7 and, optionally, the left and/or right eigenvectors
8
10 SUBROUTINE ZGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL, LDVL,
11 VR, LDVR, ILO, IHI, SCALE, ABNRM, RCONDE, RCONDV,
12 WORK, LWORK, RWORK, INFO )
13
14 CHARACTER BALANC, JOBVL, JOBVR, SENSE
15
16 INTEGER IHI, ILO, INFO, LDA, LDVL, LDVR, LWORK, N
17
18 DOUBLE PRECISION ABNRM
19
20 DOUBLE PRECISION RCONDE( * ), RCONDV( * ), RWORK( * ),
21 SCALE( * )
22
23 COMPLEX*16 A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), W( * ),
24 WORK( * )
25
27 ZGEEVX computes for an N-by-N complex nonsymmetric matrix A, the eigen‐
28 values and, optionally, the left and/or right eigenvectors.
29
30 Optionally also, it computes a balancing transformation to improve the
31 conditioning of the eigenvalues and eigenvectors (ILO, IHI, SCALE, and
32 ABNRM), reciprocal condition numbers for the eigenvalues (RCONDE), and
33 reciprocal condition numbers for the right
34 eigenvectors (RCONDV).
35
36 The right eigenvector v(j) of A satisfies
37 A * v(j) = lambda(j) * v(j)
38 where lambda(j) is its eigenvalue.
39 The left eigenvector u(j) of A satisfies
40 u(j)**H * A = lambda(j) * u(j)**H
41 where u(j)**H denotes the conjugate transpose of u(j).
42
43 The computed eigenvectors are normalized to have Euclidean norm equal
44 to 1 and largest component real.
45
46 Balancing a matrix means permuting the rows and columns to make it more
47 nearly upper triangular, and applying a diagonal similarity transforma‐
48 tion D * A * D**(-1), where D is a diagonal matrix, to make its rows
49 and columns closer in norm and the condition numbers of its eigenvalues
50 and eigenvectors smaller. The computed reciprocal condition numbers
51 correspond to the balanced matrix. Permuting rows and columns will not
52 change the condition numbers (in exact arithmetic) but diagonal scaling
53 will. For further explanation of balancing, see section 4.10.2 of the
54 LAPACK Users' Guide.
55
56
58 BALANC (input) CHARACTER*1
59 Indicates how the input matrix should be diagonally scaled
60 and/or permuted to improve the conditioning of its eigenvalues.
61 = 'N': Do not diagonally scale or permute;
62 = 'P': Perform permutations to make the matrix more nearly
63 upper triangular. Do not diagonally scale; = 'S': Diagonally
64 scale the matrix, ie. replace A by D*A*D**(-1), where D is a
65 diagonal matrix chosen to make the rows and columns of A more
66 equal in norm. Do not permute; = 'B': Both diagonally scale and
67 permute A.
68
69 Computed reciprocal condition numbers will be for the matrix
70 after balancing and/or permuting. Permuting does not change
71 condition numbers (in exact arithmetic), but balancing does.
72
73 JOBVL (input) CHARACTER*1
74 = 'N': left eigenvectors of A are not computed;
75 = 'V': left eigenvectors of A are computed. If SENSE = 'E' or
76 'B', JOBVL must = 'V'.
77
78 JOBVR (input) CHARACTER*1
79 = 'N': right eigenvectors of A are not computed;
80 = 'V': right eigenvectors of A are computed. If SENSE = 'E' or
81 'B', JOBVR must = 'V'.
82
83 SENSE (input) CHARACTER*1
84 Determines which reciprocal condition numbers are computed. =
85 'N': None are computed;
86 = 'E': Computed for eigenvalues only;
87 = 'V': Computed for right eigenvectors only;
88 = 'B': Computed for eigenvalues and right eigenvectors.
89
90 If SENSE = 'E' or 'B', both left and right eigenvectors must
91 also be computed (JOBVL = 'V' and JOBVR = 'V').
92
93 N (input) INTEGER
94 The order of the matrix A. N >= 0.
95
96 A (input/output) COMPLEX*16 array, dimension (LDA,N)
97 On entry, the N-by-N matrix A. On exit, A has been overwrit‐
98 ten. If JOBVL = 'V' or JOBVR = 'V', A contains the Schur form
99 of the balanced version of the matrix A.
100
101 LDA (input) INTEGER
102 The leading dimension of the array A. LDA >= max(1,N).
103
104 W (output) COMPLEX*16 array, dimension (N)
105 W contains the computed eigenvalues.
106
107 VL (output) COMPLEX*16 array, dimension (LDVL,N)
108 If JOBVL = 'V', the left eigenvectors u(j) are stored one after
109 another in the columns of VL, in the same order as their eigen‐
110 values. If JOBVL = 'N', VL is not referenced. u(j) = VL(:,j),
111 the j-th column of VL.
112
113 LDVL (input) INTEGER
114 The leading dimension of the array VL. LDVL >= 1; if JOBVL =
115 'V', LDVL >= N.
116
117 VR (output) COMPLEX*16 array, dimension (LDVR,N)
118 If JOBVR = 'V', the right eigenvectors v(j) are stored one
119 after another in the columns of VR, in the same order as their
120 eigenvalues. If JOBVR = 'N', VR is not referenced. v(j) =
121 VR(:,j), the j-th column of VR.
122
123 LDVR (input) INTEGER
124 The leading dimension of the array VR. LDVR >= 1; if JOBVR =
125 'V', LDVR >= N.
126
127 ILO (output) INTEGER
128 IHI (output) INTEGER ILO and IHI are integer values deter‐
129 mined when A was balanced. The balanced A(i,j) = 0 if I > J
130 and J = 1,...,ILO-1 or I = IHI+1,...,N.
131
132 SCALE (output) DOUBLE PRECISION array, dimension (N)
133 Details of the permutations and scaling factors applied when
134 balancing A. If P(j) is the index of the row and column inter‐
135 changed with row and column j, and D(j) is the scaling factor
136 applied to row and column j, then SCALE(J) = P(J), for J =
137 1,...,ILO-1 = D(J), for J = ILO,...,IHI = P(J) for J =
138 IHI+1,...,N. The order in which the interchanges are made is N
139 to IHI+1, then 1 to ILO-1.
140
141 ABNRM (output) DOUBLE PRECISION
142 The one-norm of the balanced matrix (the maximum of the sum of
143 absolute values of elements of any column).
144
145 RCONDE (output) DOUBLE PRECISION array, dimension (N)
146 RCONDE(j) is the reciprocal condition number of the j-th eigen‐
147 value.
148
149 RCONDV (output) DOUBLE PRECISION array, dimension (N)
150 RCONDV(j) is the reciprocal condition number of the j-th right
151 eigenvector.
152
153 WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK))
154 On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
155
156 LWORK (input) INTEGER
157 The dimension of the array WORK. If SENSE = 'N' or 'E', LWORK
158 >= max(1,2*N), and if SENSE = 'V' or 'B', LWORK >= N*N+2*N.
159 For good performance, LWORK must generally be larger.
160
161 If LWORK = -1, then a workspace query is assumed; the routine
162 only calculates the optimal size of the WORK array, returns
163 this value as the first entry of the WORK array, and no error
164 message related to LWORK is issued by XERBLA.
165
166 RWORK (workspace) DOUBLE PRECISION array, dimension (2*N)
167
168 INFO (output) INTEGER
169 = 0: successful exit
170 < 0: if INFO = -i, the i-th argument had an illegal value.
171 > 0: if INFO = i, the QR algorithm failed to compute all the
172 eigenvalues, and no eigenvectors or condition numbers have been
173 computed; elements 1:ILO-1 and i+1:N of W contain eigenvalues
174 which have converged.
175
176
177
178 LAPACK driver routine (version 3.N1o)vember 2006 ZGEEVX(1)