SSBGVX - compute selected eigenvalues, and optionally,
eigenvectors of a real generalized symmetric-definite
banded eigenproblem, of the form A*x=(lambda)*B*x
SYNOPSIS
SUBROUTINE SSBGVX( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB,
BB, LDBB, Q, LDQ, VL, VU, IL, IU,
ABSTOL, M, W, Z, LDZ, WORK, IWORK,
IFAIL, INFO )
CHARACTER JOBZ, RANGE, UPLO
INTEGER IL, INFO, IU, KA, KB, LDAB, LDBB, LDQ,
LDZ, M, N
REAL ABSTOL, VL, VU
INTEGER IFAIL( * ), IWORK( * )
REAL AB( LDAB, * ), BB( LDBB, * ), Q( LDQ, *
), W( * ), WORK( * ), Z( LDZ, * )
PURPOSE
SSBGVX computes selected eigenvalues, and optionally,
eigenvectors of a real generalized symmetric-definite
banded eigenproblem, of the form A*x=(lambda)*B*x. Here A
and B are assumed to be symmetric and banded, and B is
also positive definite. Eigenvalues and eigenvectors can
be selected by specifying either all eigenvalues, a range
of values or a range of indices for the desired eigenval
ues.
ARGUMENTS
JOBZ (input) CHARACTER*1
= 'N': Compute eigenvalues only;
= 'V': Compute eigenvalues and eigenvectors.
RANGE (input) CHARACTER*1
= 'A': all eigenvalues will be found.
= 'V': all eigenvalues in the half-open interval
(VL,VU] will be found. = 'I': the IL-th through
IU-th eigenvalues will be found.
UPLO (input) CHARACTER*1
= 'U': Upper triangles of A and B are stored;
= 'L': Lower triangles of A and B are stored.
N (input) INTEGER
The order of the matrices A and B. N >= 0.
KA (input) INTEGER
The number of superdiagonals of the matrix A if
= 'L'. KA >= 0.
KB (input) INTEGER
The number of superdiagonals of the matrix B if
UPLO = 'U', or the number of subdiagonals if UPLO
= 'L'. KB >= 0.
AB (input/output) REAL array, dimension (LDAB, N)
On entry, the upper or lower triangle of the sym
metric band matrix A, stored in the first ka+1
rows of the array. The j-th column of A is stored
in the j-th column of the array AB as follows: if
UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for max(1,j-
ka)<=i<=j; if UPLO = 'L', AB(1+i-j,j) = A(i,j)
for j<=i<=min(n,j+ka).
On exit, the contents of AB are destroyed.
LDAB (input) INTEGER
The leading dimension of the array AB. LDAB >=
KA+1.
BB (input/output) REAL array, dimension (LDBB, N)
On entry, the upper or lower triangle of the sym
metric band matrix B, stored in the first kb+1
rows of the array. The j-th column of B is stored
in the j-th column of the array BB as follows: if
UPLO = 'U', BB(ka+1+i-j,j) = B(i,j) for max(1,j-
kb)<=i<=j; if UPLO = 'L', BB(1+i-j,j) = B(i,j)
for j<=i<=min(n,j+kb).
On exit, the factor S from the split Cholesky fac
torization B = S**T*S, as returned by SPBSTF.
LDBB (input) INTEGER
The leading dimension of the array BB. LDBB >=
KB+1.
Q (output) REAL array, dimension (LDQ, N)
If JOBZ = 'V', the n-by-n matrix used in the
reduction of A*x = (lambda)*B*x to standard form,
i.e. C*x = (lambda)*x, and consequently C to
tridiagonal form. If JOBZ = 'N', the array Q is
not referenced.
LDQ (input) INTEGER
The leading dimension of the array Q. If JOBZ =
'N', LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N).
VL (input) REAL
VU (input) REAL If RANGE='V', the lower and
upper bounds of the interval to be searched for
eigenvalues. VL < VU. Not referenced if RANGE =
IL (input) INTEGER
IU (input) INTEGER If RANGE='I', the indices
(in ascending order) of the smallest and largest
eigenvalues to be returned. 1 <= IL <= IU <= N,
if N > 0; IL = 1 and IU = 0 if N = 0. Not refer
enced if RANGE = 'A' or 'V'.
ABSTOL (input) REAL
The absolute error tolerance for the eigenvalues.
An approximate eigenvalue is accepted as converged
when it is determined to lie in an interval [a,b]
of width less than or equal to
ABSTOL + EPS * max( |a|,|b| ) ,
where EPS is the machine precision. If ABSTOL is
less than or equal to zero, then EPS*|T| will be
used in its place, where |T| is the 1-norm of the
tridiagonal matrix obtained by reducing A to
tridiagonal form.
Eigenvalues will be computed most accurately when
ABSTOL is set to twice the underflow threshold
2*SLAMCH('S'), not zero. If this routine returns
with INFO>0, indicating that some eigenvectors did
not converge, try setting ABSTOL to 2*SLAMCH('S').
M (output) INTEGER
The total number of eigenvalues found. 0 <= M <=
N. If RANGE = 'A', M = N, and if RANGE = 'I', M =
IU-IL+1.
W (output) REAL array, dimension (N)
If INFO = 0, the eigenvalues in ascending order.
Z (output) REAL array, dimension (LDZ, N)
If JOBZ = 'V', then if INFO = 0, Z contains the
matrix Z of eigenvectors, with the i-th column of
Z holding the eigenvector associated with W(i).
The eigenvectors are normalized so Z**T*B*Z = I.
If JOBZ = 'N', then Z is not referenced.
LDZ (input) INTEGER
The leading dimension of the array Z. LDZ >= 1,
and if JOBZ = 'V', LDZ >= max(1,N).
WORK (workspace/output) REAL array, dimension (7N)
IWORK (workspace/output) INTEGER array, dimension (5N)
IFAIL (input) INTEGER array, dimension (M)
If JOBZ = 'V', then if INFO = 0, the first M
IFAIL contains the indices of the eigenvalues that
failed to converge. If JOBZ = 'N', then IFAIL is
not referenced.
INFO (output) INTEGER
= 0 : successful exit
< 0 : if INFO = -i, the i-th argument had an ille
gal value
<= N: if INFO = i, then i eigenvectors failed to
converge. Their indices are stored in IFAIL. > N
: SPBSTF returned an error code; i.e., if INFO = N
+ i, for 1 <= i <= N, then the leading minor of
order i of B is not positive definite. The fac
torization of B could not be completed and no
eigenvalues or eigenvectors were computed.
FURTHER DETAILS
Based on contributions by
Mark Fahey, Department of Mathematics, Univ. of Ken
tucky, USA
Man(1) output converted with
man2html