1DSYEVR(1) LAPACK driver routine (version 3.2) DSYEVR(1)
2
3
4
6 DSYEVR - computes selected eigenvalues and, optionally, eigenvectors of
7 a real symmetric matrix A
8
10 SUBROUTINE DSYEVR( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU,
11 ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK,
12 LIWORK, INFO )
13
14 CHARACTER JOBZ, RANGE, UPLO
15
16 INTEGER IL, INFO, IU, LDA, LDZ, LIWORK, LWORK, M, N
17
18 DOUBLE PRECISION ABSTOL, VL, VU
19
20 INTEGER ISUPPZ( * ), IWORK( * )
21
22 DOUBLE PRECISION A( LDA, * ), W( * ), WORK( * ), Z( LDZ, *
23 )
24
26 DSYEVR computes selected eigenvalues and, optionally, eigenvectors of a
27 real symmetric matrix A. Eigenvalues and eigenvectors can be selected
28 by specifying either a range of values or a range of indices for the
29 desired eigenvalues.
30 DSYEVR first reduces the matrix A to tridiagonal form T with a call to
31 DSYTRD. Then, whenever possible, DSYEVR calls DSTEMR to compute the
32 eigenspectrum using Relatively Robust Representations. DSTEMR computes
33 eigenvalues by the dqds algorithm, while orthogonal eigenvectors are
34 computed from various "good" L D L^T representations (also known as
35 Relatively Robust Representations). Gram-Schmidt orthogonalization is
36 avoided as far as possible. More specifically, the various steps of the
37 algorithm are as follows.
38 For each unreduced block (submatrix) of T,
39 (a) Compute T - sigma I = L D L^T, so that L and D
40 define all the wanted eigenvalues to high relative accuracy.
41 This means that small relative changes in the entries of D and L
42 cause only small relative changes in the eigenvalues and
43 eigenvectors. The standard (unfactored) representation of the
44 tridiagonal matrix T does not have this property in general.
45 (b) Compute the eigenvalues to suitable accuracy.
46 If the eigenvectors are desired, the algorithm attains full
47 accuracy of the computed eigenvalues only right before
48 the corresponding vectors have to be computed, see steps c) and
49 d).
50 (c) For each cluster of close eigenvalues, select a new
51 shift close to the cluster, find a new factorization, and refine
52 the shifted eigenvalues to suitable accuracy.
53 (d) For each eigenvalue with a large enough relative separation com‐
54 pute
55 the corresponding eigenvector by forming a rank revealing
56 twisted
57 factorization. Go back to (c) for any clusters that remain. The
58 desired accuracy of the output can be specified by the input parameter
59 ABSTOL.
60 For more details, see DSTEMR's documentation and:
61 - Inderjit S. Dhillon and Beresford N. Parlett: "Multiple representa‐
62 tions
63 to compute orthogonal eigenvectors of symmetric tridiagonal matri‐
64 ces,"
65 Linear Algebra and its Applications, 387(1), pp. 1-28, August 2004.
66 - Inderjit Dhillon and Beresford Parlett: "Orthogonal Eigenvectors and
67 Relative Gaps," SIAM Journal on Matrix Analysis and Applications,
68 Vol. 25,
69 2004. Also LAPACK Working Note 154.
70 - Inderjit Dhillon: "A new O(n^2) algorithm for the symmetric
71 tridiagonal eigenvalue/eigenvector problem",
72 Computer Science Division Technical Report No. UCB/CSD-97-971,
73 UC Berkeley, May 1997.
74 Note 1 : DSYEVR calls DSTEMR when the full spectrum is requested on
75 machines which conform to the ieee-754 floating point standard. DSYEVR
76 calls DSTEBZ and SSTEIN on non-ieee machines and
77 when partial spectrum requests are made.
78 Normal execution of DSTEMR may create NaNs and infinities and hence may
79 abort due to a floating point exception in environments which do not
80 handle NaNs and infinities in the ieee standard default manner.
81
83 JOBZ (input) CHARACTER*1
84 = 'N': Compute eigenvalues only;
85 = 'V': Compute eigenvalues and eigenvectors.
86
87 RANGE (input) CHARACTER*1
88 = 'A': all eigenvalues will be found.
89 = 'V': all eigenvalues in the half-open interval (VL,VU] will
90 be found. = 'I': the IL-th through IU-th eigenvalues will be
91 found.
92
93 UPLO (input) CHARACTER*1
94 = 'U': Upper triangle of A is stored;
95 = 'L': Lower triangle of A is stored.
96
97 N (input) INTEGER
98 The order of the matrix A. N >= 0.
99
100 A (input/output) DOUBLE PRECISION array, dimension (LDA, N)
101 On entry, the symmetric matrix A. If UPLO = 'U', the leading
102 N-by-N upper triangular part of A contains the upper triangular
103 part of the matrix A. If UPLO = 'L', the leading N-by-N lower
104 triangular part of A contains the lower triangular part of the
105 matrix A. On exit, the lower triangle (if UPLO='L') or the
106 upper triangle (if UPLO='U') of A, including the diagonal, is
107 destroyed.
108
109 LDA (input) INTEGER
110 The leading dimension of the array A. LDA >= max(1,N).
111
112 VL (input) DOUBLE PRECISION
113 VU (input) DOUBLE PRECISION If RANGE='V', the lower and
114 upper bounds of the interval to be searched for eigenvalues. VL
115 < VU. Not referenced if RANGE = 'A' or 'I'.
116
117 IL (input) INTEGER
118 IU (input) INTEGER If RANGE='I', the indices (in ascending
119 order) of the smallest and largest eigenvalues to be returned.
120 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not
121 referenced if RANGE = 'A' or 'V'.
122
123 ABSTOL (input) DOUBLE PRECISION
124 The absolute error tolerance for the eigenvalues. An approxi‐
125 mate eigenvalue is accepted as converged when it is determined
126 to lie in an interval [a,b] of width less than or equal to
127 ABSTOL + EPS * max( |a|,|b| ) , where EPS is the machine pre‐
128 cision. If ABSTOL is less than or equal to zero, then EPS*|T|
129 will be used in its place, where |T| is the 1-norm of the
130 tridiagonal matrix obtained by reducing A to tridiagonal form.
131 See "Computing Small Singular Values of Bidiagonal Matrices
132 with Guaranteed High Relative Accuracy," by Demmel and Kahan,
133 LAPACK Working Note #3. If high relative accuracy is impor‐
134 tant, set ABSTOL to DLAMCH( 'Safe minimum' ). Doing so will
135 guarantee that eigenvalues are computed to high relative accu‐
136 racy when possible in future releases. The current code does
137 not make any guarantees about high relative accuracy, but
138 future releases will. See J. Barlow and J. Demmel, "Computing
139 Accurate Eigensystems of Scaled Diagonally Dominant Matrices",
140 LAPACK Working Note #7, for a discussion of which matrices
141 define their eigenvalues to high relative accuracy.
142
143 M (output) INTEGER
144 The total number of eigenvalues found. 0 <= M <= N. If RANGE
145 = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
146
147 W (output) DOUBLE PRECISION array, dimension (N)
148 The first M elements contain the selected eigenvalues in
149 ascending order.
150
151 Z (output) DOUBLE PRECISION array, dimension (LDZ, max(1,M))
152 If JOBZ = 'V', then if INFO = 0, the first M columns of Z con‐
153 tain the orthonormal eigenvectors of the matrix A corresponding
154 to the selected eigenvalues, with the i-th column of Z holding
155 the eigenvector associated with W(i). If JOBZ = 'N', then Z is
156 not referenced. Note: the user must ensure that at least
157 max(1,M) columns are supplied in the array Z; if RANGE = 'V',
158 the exact value of M is not known in advance and an upper bound
159 must be used. Supplying N columns is always safe.
160
161 LDZ (input) INTEGER
162 The leading dimension of the array Z. LDZ >= 1, and if JOBZ =
163 'V', LDZ >= max(1,N).
164
165 ISUPPZ (output) INTEGER array, dimension ( 2*max(1,M) )
166 The support of the eigenvectors in Z, i.e., the indices indi‐
167 cating the nonzero elements in Z. The i-th eigenvector is
168 nonzero only in elements ISUPPZ( 2*i-1 ) through ISUPPZ( 2*i ).
169
170 WORK (workspace/output) DOUBLE PRECISION array, dimension
171 (MAX(1,LWORK))
172 On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
173
174 LWORK (input) INTEGER
175 The dimension of the array WORK. LWORK >= max(1,26*N). For
176 optimal efficiency, LWORK >= (NB+6)*N, where NB is the max of
177 the blocksize for DSYTRD and DORMTR returned by ILAENV. If
178 LWORK = -1, then a workspace query is assumed; the routine only
179 calculates the optimal size of the WORK array, returns this
180 value as the first entry of the WORK array, and no error mes‐
181 sage related to LWORK is issued by XERBLA.
182
183 IWORK (workspace/output) INTEGER array, dimension (MAX(1,LIWORK))
184 On exit, if INFO = 0, IWORK(1) returns the optimal LWORK.
185
186 LIWORK (input) INTEGER
187 The dimension of the array IWORK. LIWORK >= max(1,10*N). If
188 LIWORK = -1, then a workspace query is assumed; the routine
189 only calculates the optimal size of the IWORK array, returns
190 this value as the first entry of the IWORK array, and no error
191 message related to LIWORK is issued by XERBLA.
192
193 INFO (output) INTEGER
194 = 0: successful exit
195 < 0: if INFO = -i, the i-th argument had an illegal value
196 > 0: Internal error
197
199 Based on contributions by
200 Inderjit Dhillon, IBM Almaden, USA
201 Osni Marques, LBNL/NERSC, USA
202 Ken Stanley, Computer Science Division, University of
203 California at Berkeley, USA
204 Jason Riedy, Computer Science Division, University of
205 California at Berkeley, USA
206
207
208
209 LAPACK driver routine (version 3.N2o)vember 2008 DSYEVR(1)