1CHSEIN(1) LAPACK routine (version 3.2) CHSEIN(1)
2
3
4
6 CHSEIN - uses inverse iteration to find specified right and/or left
7 eigenvectors of a complex upper Hessenberg matrix H
8
10 SUBROUTINE CHSEIN( SIDE, EIGSRC, INITV, SELECT, N, H, LDH, W, VL, LDVL,
11 VR, LDVR, MM, M, WORK, RWORK, IFAILL, IFAILR, INFO )
12
13 CHARACTER EIGSRC, INITV, SIDE
14
15 INTEGER INFO, LDH, LDVL, LDVR, M, MM, N
16
17 LOGICAL SELECT( * )
18
19 INTEGER IFAILL( * ), IFAILR( * )
20
21 REAL RWORK( * )
22
23 COMPLEX H( LDH, * ), VL( LDVL, * ), VR( LDVR, * ), W( * ),
24 WORK( * )
25
27 CHSEIN uses inverse iteration to find specified right and/or left
28 eigenvectors of a complex upper Hessenberg matrix H. The right eigen‐
29 vector x and the left eigenvector y of the matrix H corresponding to an
30 eigenvalue w are defined by:
31 H * x = w * x, y**h * H = w * y**h
32 where y**h denotes the conjugate transpose of the vector y.
33
35 SIDE (input) CHARACTER*1
36 = 'R': compute right eigenvectors only;
37 = 'L': compute left eigenvectors only;
38 = 'B': compute both right and left eigenvectors.
39
40 EIGSRC (input) CHARACTER*1
41 Specifies the source of eigenvalues supplied in W:
42 = 'Q': the eigenvalues were found using CHSEQR; thus, if H has
43 zero subdiagonal elements, and so is block-triangular, then the
44 j-th eigenvalue can be assumed to be an eigenvalue of the block
45 containing the j-th row/column. This property allows CHSEIN to
46 perform inverse iteration on just one diagonal block. = 'N':
47 no assumptions are made on the correspondence between eigenval‐
48 ues and diagonal blocks. In this case, CHSEIN must always per‐
49 form inverse iteration using the whole matrix H.
50
51 INITV (input) CHARACTER*1
52 = 'N': no initial vectors are supplied;
53 = 'U': user-supplied initial vectors are stored in the arrays
54 VL and/or VR.
55
56 SELECT (input) LOGICAL array, dimension (N)
57 Specifies the eigenvectors to be computed. To select the eigen‐
58 vector corresponding to the eigenvalue W(j), SELECT(j) must be
59 set to .TRUE..
60
61 N (input) INTEGER
62 The order of the matrix H. N >= 0.
63
64 H (input) COMPLEX array, dimension (LDH,N)
65 The upper Hessenberg matrix H.
66
67 LDH (input) INTEGER
68 The leading dimension of the array H. LDH >= max(1,N).
69
70 W (input/output) COMPLEX array, dimension (N)
71 On entry, the eigenvalues of H. On exit, the real parts of W
72 may have been altered since close eigenvalues are perturbed
73 slightly in searching for independent eigenvectors.
74
75 VL (input/output) COMPLEX array, dimension (LDVL,MM)
76 On entry, if INITV = 'U' and SIDE = 'L' or 'B', VL must contain
77 starting vectors for the inverse iteration for the left eigen‐
78 vectors; the starting vector for each eigenvector must be in
79 the same column in which the eigenvector will be stored. On
80 exit, if SIDE = 'L' or 'B', the left eigenvectors specified by
81 SELECT will be stored consecutively in the columns of VL, in
82 the same order as their eigenvalues. If SIDE = 'R', VL is not
83 referenced.
84
85 LDVL (input) INTEGER
86 The leading dimension of the array VL. LDVL >= max(1,N) if
87 SIDE = 'L' or 'B'; LDVL >= 1 otherwise.
88
89 VR (input/output) COMPLEX array, dimension (LDVR,MM)
90 On entry, if INITV = 'U' and SIDE = 'R' or 'B', VR must contain
91 starting vectors for the inverse iteration for the right eigen‐
92 vectors; the starting vector for each eigenvector must be in
93 the same column in which the eigenvector will be stored. On
94 exit, if SIDE = 'R' or 'B', the right eigenvectors specified by
95 SELECT will be stored consecutively in the columns of VR, in
96 the same order as their eigenvalues. If SIDE = 'L', VR is not
97 referenced.
98
99 LDVR (input) INTEGER
100 The leading dimension of the array VR. LDVR >= max(1,N) if
101 SIDE = 'R' or 'B'; LDVR >= 1 otherwise.
102
103 MM (input) INTEGER
104 The number of columns in the arrays VL and/or VR. MM >= M.
105
106 M (output) INTEGER
107 The number of columns in the arrays VL and/or VR required to
108 store the eigenvectors (= the number of .TRUE. elements in
109 SELECT).
110
111 WORK (workspace) COMPLEX array, dimension (N*N)
112
113 RWORK (workspace) REAL array, dimension (N)
114
115 IFAILL (output) INTEGER array, dimension (MM)
116 If SIDE = 'L' or 'B', IFAILL(i) = j > 0 if the left eigenvector
117 in the i-th column of VL (corresponding to the eigenvalue w(j))
118 failed to converge; IFAILL(i) = 0 if the eigenvector converged
119 satisfactorily. If SIDE = 'R', IFAILL is not referenced.
120
121 IFAILR (output) INTEGER array, dimension (MM)
122 If SIDE = 'R' or 'B', IFAILR(i) = j > 0 if the right eigenvec‐
123 tor in the i-th column of VR (corresponding to the eigenvalue
124 w(j)) failed to converge; IFAILR(i) = 0 if the eigenvector con‐
125 verged satisfactorily. If SIDE = 'L', IFAILR is not refer‐
126 enced.
127
128 INFO (output) INTEGER
129 = 0: successful exit
130 < 0: if INFO = -i, the i-th argument had an illegal value
131 > 0: if INFO = i, i is the number of eigenvectors which failed
132 to converge; see IFAILL and IFAILR for further details.
133
135 Each eigenvector is normalized so that the element of largest magnitude
136 has magnitude 1; here the magnitude of a complex number (x,y) is taken
137 to be |x|+|y|.
138
139
140
141 LAPACK routine (version 3.2) November 2008 CHSEIN(1)