DSBGVX - compute selected eigenvalues, and optionally,
eigenvectors of a real generalized symmetric-definite
banded eigenproblem, of the form A*x=(lambda)*B*x
SYNOPSIS
SUBROUTINE DSBGVX( 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
DOUBLE PRECISION ABSTOL, VL, VU
INTEGER IFAIL( * ), IWORK( * )
DOUBLE PRECISION AB( LDAB, * ), BB( LDBB, * ),
Q( LDQ, * ), W( * ), WORK( * ), Z( LDZ,
* )
PURPOSE
DSBGVX 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.
The number of superdiagonals of the matrix A if
UPLO = 'U', or the number of subdiagonals if UPLO
= '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) DOUBLE PRECISION 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) DOUBLE PRECISION 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 DPBSTF.
LDBB (input) INTEGER
The leading dimension of the array BB. LDBB >=
KB+1.
Q (output) DOUBLE PRECISION 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).
VU (input) DOUBLE PRECISION If RANGE='V', the
lower and upper bounds of the interval to be
searched for eigenvalues. VL < VU. Not referenced
if RANGE = 'A' or 'I'.
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) DOUBLE PRECISION
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*DLAMCH('S'), not zero. If this routine returns
with INFO>0, indicating that some eigenvectors did
not converge, try setting ABSTOL to 2*DLAMCH('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) DOUBLE PRECISION array, dimension (N)
If INFO = 0, the eigenvalues in ascending order.
Z (output) DOUBLE PRECISION 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).
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 ele
ments of IFAIL are zero. If INFO > 0, then 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
: DPBSTF 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