1SSPGVX(1) LAPACK driver routine (version 3.1) SSPGVX(1)
2
3
4
6 SSPGVX - selected eigenvalues, and optionally, eigenvectors of a real
7 generalized symmetric-definite eigenproblem, of the form
8 A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x
9
11 SUBROUTINE SSPGVX( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU, IL, IU,
12 ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO )
13
14 CHARACTER JOBZ, RANGE, UPLO
15
16 INTEGER IL, INFO, ITYPE, IU, LDZ, M, N
17
18 REAL ABSTOL, VL, VU
19
20 INTEGER IFAIL( * ), IWORK( * )
21
22 REAL AP( * ), BP( * ), W( * ), WORK( * ), Z( LDZ, * )
23
25 SSPGVX computes selected eigenvalues, and optionally, eigenvectors of a
26 real generalized symmetric-definite eigenproblem, of the form
27 A*x=(lambda)*B*x, A*Bx=(lambda)*x, or B*A*x=(lambda)*x. Here A and B
28 are assumed to be symmetric, stored in packed storage, and B is also
29 positive definite. Eigenvalues and eigenvectors can be selected by
30 specifying either a range of values or a range of indices for the
31 desired eigenvalues.
32
33
35 ITYPE (input) INTEGER
36 Specifies the problem type to be solved:
37 = 1: A*x = (lambda)*B*x
38 = 2: A*B*x = (lambda)*x
39 = 3: B*A*x = (lambda)*x
40
41 JOBZ (input) CHARACTER*1
42 = 'N': Compute eigenvalues only;
43 = 'V': Compute eigenvalues and eigenvectors.
44
45 RANGE (input) CHARACTER*1
46 = 'A': all eigenvalues will be found.
47 = 'V': all eigenvalues in the half-open interval (VL,VU] will
48 be found. = 'I': the IL-th through IU-th eigenvalues will be
49 found.
50
51 UPLO (input) CHARACTER*1
52 = 'U': Upper triangle of A and B are stored;
53 = 'L': Lower triangle of A and B are stored.
54
55 N (input) INTEGER
56 The order of the matrix pencil (A,B). N >= 0.
57
58 AP (input/output) REAL array, dimension (N*(N+1)/2)
59 On entry, the upper or lower triangle of the symmetric matrix
60 A, packed columnwise in a linear array. The j-th column of A
61 is stored in the array AP as follows: if UPLO = 'U', AP(i +
62 (j-1)*j/2) = A(i,j) for 1<=i<=j; if UPLO = 'L', AP(i +
63 (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.
64
65 On exit, the contents of AP are destroyed.
66
67 BP (input/output) REAL array, dimension (N*(N+1)/2)
68 On entry, the upper or lower triangle of the symmetric matrix
69 B, packed columnwise in a linear array. The j-th column of B
70 is stored in the array BP as follows: if UPLO = 'U', BP(i +
71 (j-1)*j/2) = B(i,j) for 1<=i<=j; if UPLO = 'L', BP(i +
72 (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.
73
74 On exit, the triangular factor U or L from the Cholesky factor‐
75 ization B = U**T*U or B = L*L**T, in the same storage format as
76 B.
77
78 VL (input) REAL
79 VU (input) REAL If RANGE='V', the lower and upper bounds
80 of the interval to be searched for eigenvalues. VL < VU. Not
81 referenced if RANGE = 'A' or 'I'.
82
83 IL (input) INTEGER
84 IU (input) INTEGER If RANGE='I', the indices (in ascending
85 order) of the smallest and largest eigenvalues to be returned.
86 1 <= IL <= IU <= N, if N > 0; IL = 1 and IU = 0 if N = 0. Not
87 referenced if RANGE = 'A' or 'V'.
88
89 ABSTOL (input) REAL
90 The absolute error tolerance for the eigenvalues. An approxi‐
91 mate eigenvalue is accepted as converged when it is determined
92 to lie in an interval [a,b] of width less than or equal to
93
94 ABSTOL + EPS * max( |a|,|b| ) ,
95
96 where EPS is the machine precision. If ABSTOL is less than or
97 equal to zero, then EPS*|T| will be used in its place, where
98 |T| is the 1-norm of the tridiagonal matrix obtained by reduc‐
99 ing A to tridiagonal form.
100
101 Eigenvalues will be computed most accurately when ABSTOL is set
102 to twice the underflow threshold 2*SLAMCH('S'), not zero. If
103 this routine returns with INFO>0, indicating that some eigen‐
104 vectors did not converge, try setting ABSTOL to 2*SLAMCH('S').
105
106 M (output) INTEGER
107 The total number of eigenvalues found. 0 <= M <= N. If RANGE
108 = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
109
110 W (output) REAL array, dimension (N)
111 On normal exit, the first M elements contain the selected ei‐
112 genvalues in ascending order.
113
114 Z (output) REAL array, dimension (LDZ, max(1,M))
115 If JOBZ = 'N', then Z is not referenced. If JOBZ = 'V', then
116 if INFO = 0, the first M columns of Z contain the orthonormal
117 eigenvectors of the matrix A corresponding to the selected ei‐
118 genvalues, with the i-th column of Z holding the eigenvector
119 associated with W(i). The eigenvectors are normalized as fol‐
120 lows: if ITYPE = 1 or 2, Z**T*B*Z = I; if ITYPE = 3,
121 Z**T*inv(B)*Z = I.
122
123 If an eigenvector fails to converge, then that column of Z con‐
124 tains the latest approximation to the eigenvector, and the
125 index of the eigenvector is returned in IFAIL. Note: the user
126 must ensure that at least max(1,M) columns are supplied in the
127 array Z; if RANGE = 'V', the exact value of M is not known in
128 advance and an upper bound must be used.
129
130 LDZ (input) INTEGER
131 The leading dimension of the array Z. LDZ >= 1, and if JOBZ =
132 'V', LDZ >= max(1,N).
133
134 WORK (workspace) REAL array, dimension (8*N)
135
136 IWORK (workspace) INTEGER array, dimension (5*N)
137
138 IFAIL (output) INTEGER array, dimension (N)
139 If JOBZ = 'V', then if INFO = 0, the first M elements of IFAIL
140 are zero. If INFO > 0, then IFAIL contains the indices of the
141 eigenvectors that failed to converge. If JOBZ = 'N', then
142 IFAIL is not referenced.
143
144 INFO (output) INTEGER
145 = 0: successful exit
146 < 0: if INFO = -i, the i-th argument had an illegal value
147 > 0: SPPTRF or SSPEVX returned an error code:
148 <= N: if INFO = i, SSPEVX failed to converge; i eigenvectors
149 failed to converge. Their indices are stored in array IFAIL.
150 > N: if INFO = N + i, for 1 <= i <= N, then the leading minor
151 of order i of B is not positive definite. The factorization of
152 B could not be completed and no eigenvalues or eigenvectors
153 were computed.
154
156 Based on contributions by
157 Mark Fahey, Department of Mathematics, Univ. of Kentucky, USA
158
159
160
161
162 LAPACK driver routine (version 3.N1o)vember 2006 SSPGVX(1)