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