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