ssbevx.f −

**Functions/Subroutines**

subroutine **ssbevx** (JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO)

SSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices

**subroutine ssbevx (characterJOBZ, characterRANGE, characterUPLO, integerN, integerKD, real, dimension( ldab, * )AB, integerLDAB, real, dimension( ldq, * )Q, integerLDQ, realVL, realVU, integerIL, integerIU, realABSTOL, integerM, real, dimension( * )W, real, dimension( ldz, * )Z, integerLDZ, real, dimension( * )WORK, integer, dimension( * )IWORK, integer, dimension( * )IFAIL, integerINFO)
SSBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices**

**Purpose:**

SSBEVX computes selected eigenvalues and, optionally, eigenvectors

of a real symmetric band matrix A. Eigenvalues and eigenvectors can

be selected by specifying either a range of values or a range of

indices for the desired eigenvalues.

**Parameters:**

*JOBZ*

JOBZ is CHARACTER*1

= ’N’: Compute eigenvalues only;

= ’V’: Compute eigenvalues and eigenvectors.

*RANGE*

RANGE is 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*

UPLO is CHARACTER*1

= ’U’: Upper triangle of A is stored;

= ’L’: Lower triangle of A is stored.

*N*

N is INTEGER

The order of the matrix A. N >= 0.

*KD*

KD is INTEGER

The number of superdiagonals of the matrix A if UPLO = ’U’,

or the number of subdiagonals if UPLO = ’L’. KD >= 0.

*AB*

AB is REAL array, dimension (LDAB, N)

On entry, the upper or lower triangle of the symmetric band

matrix A, stored in the first KD+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(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j;

if UPLO = ’L’, AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd).

On exit, AB is overwritten by values generated during the

reduction to tridiagonal form. If UPLO = ’U’, the first

superdiagonal and the diagonal of the tridiagonal matrix T

are returned in rows KD and KD+1 of AB, and if UPLO = ’L’,

the diagonal and first subdiagonal of T are returned in the

first two rows of AB.

*LDAB*

LDAB is INTEGER

The leading dimension of the array AB. LDAB >= KD + 1.

*Q*

Q is REAL array, dimension (LDQ, N)

If JOBZ = ’V’, the N-by-N orthogonal matrix used in the

reduction to tridiagonal form.

If JOBZ = ’N’, the array Q is not referenced.

*LDQ*

LDQ is INTEGER

The leading dimension of the array Q. If JOBZ = ’V’, then

LDQ >= max(1,N).

*VL*

VL is REAL

*VU*

VU is REAL

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*

IL is INTEGER

*IU*

IU is 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 referenced if RANGE = ’A’ or ’V’.

*ABSTOL*

ABSTOL is 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 AB 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’).

See "Computing Small Singular Values of Bidiagonal Matrices

with Guaranteed High Relative Accuracy," by Demmel and

Kahan, LAPACK Working Note #3.

*M*

M is INTEGER

The total number of eigenvalues found. 0 <= M <= N.

If RANGE = ’A’, M = N, and if RANGE = ’I’, M = IU-IL+1.

*W*

W is REAL array, dimension (N)

The first M elements contain the selected eigenvalues in

ascending order.

*Z*

Z is REAL array, dimension (LDZ, max(1,M))

If JOBZ = ’V’, then if INFO = 0, the first M columns of Z

contain the orthonormal eigenvectors of the matrix A

corresponding to the selected eigenvalues, with the i-th

column of Z holding the eigenvector associated with W(i).

If an eigenvector fails to converge, then that column of Z

contains the latest approximation to the eigenvector, and the

index of the eigenvector is returned in IFAIL.

If JOBZ = ’N’, then Z is not referenced.

Note: the user must ensure that at least max(1,M) columns are

supplied in the array Z; if RANGE = ’V’, the exact value of M

is not known in advance and an upper bound must be used.

*LDZ*

LDZ is INTEGER

The leading dimension of the array Z. LDZ >= 1, and if

JOBZ = ’V’, LDZ >= max(1,N).

*WORK*

WORK is REAL array, dimension (7*N)

*IWORK*

IWORK is INTEGER array, dimension (5*N)

*IFAIL*

IFAIL is INTEGER array, dimension (N)

If JOBZ = ’V’, then if INFO = 0, the first M elements of

IFAIL are zero. If INFO > 0, then IFAIL contains the

indices of the eigenvectors that failed to converge.

If JOBZ = ’N’, then IFAIL is not referenced.

*INFO*

INFO is INTEGER

= 0: successful exit.

< 0: if INFO = -i, the i-th argument had an illegal value.

> 0: if INFO = i, then i eigenvectors failed to converge.

Their indices are stored in array IFAIL.

**Author:**

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

**Date:**

November 2011

Definition at line 257 of file ssbevx.f.

Generated automatically by Doxygen for LAPACK from the source code.