?sbgvx
?sbgvx
Computes selected eigenvalues and, optionally, eigenvectors of a real generalized symmetric definite eigenproblem with banded matrices.
Syntax
lapack_int
LAPACKE_ssbgvx
(
int
matrix_layout
,
char
jobz
,
char
range
,
char
uplo
,
lapack_int
n
,
lapack_int
ka
,
lapack_int
kb
,
float
*
ab
,
lapack_int
ldab
,
float
*
bb
,
lapack_int
ldbb
,
float
*
q
,
lapack_int
ldq
,
float
vl
,
float
vu
,
lapack_int
il
,
lapack_int
iu
,
float
abstol
,
lapack_int
*
m
,
float
*
w
,
float
*
z
,
lapack_int
ldz
,
lapack_int
*
ifail
);
lapack_int
LAPACKE_dsbgvx
(
int
matrix_layout
,
char
jobz
,
char
range
,
char
uplo
,
lapack_int
n
,
lapack_int
ka
,
lapack_int
kb
,
double
*
ab
,
lapack_int
ldab
,
double
*
bb
,
lapack_int
ldbb
,
double
*
q
,
lapack_int
ldq
,
double
vl
,
double
vu
,
lapack_int
il
,
lapack_int
iu
,
double
abstol
,
lapack_int
*
m
,
double
*
w
,
double
*
z
,
lapack_int
ldz
,
lapack_int
*
ifail
);
Include Files
- mkl.h
Description
The routine computes selected eigenvalues, and optionally, the eigenvectors of a real generalized symmetric-definite banded eigenproblem, of the form . Here
A
*x
= λ
*B
*x
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 eigenvalues. Input Parameters
- matrix_layout
- Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- jobz
- Must be'N'or'V'.If, then compute eigenvalues only.jobz='N'If, then compute eigenvalues and eigenvectors.jobz='V'
- range
- Must be'A'or'V'or'I'.If, the routine computes all eigenvalues.range='A'If, the routine computes eigenvaluesrange='V'in the half-open interval:w[i]vl<w[i].≤vuIf, the routine computes eigenvalues in rangerange='I'iltoiu.
- uplo
- Must be'U'or'L'.If, arraysuplo='U'abandbbstore the upper triangles ofAandB;If, arraysuplo='L'abandbbstore the lower triangles ofAandB.
- n
- The order of the matricesAandB().n≥0
- ka
- The number of super- or sub-diagonals inA().ka≥0
- kb
- The number of super- or sub-diagonals inB(kb≥0).
- ab,bb
- Arrays:ab(size at least max(1,is an array containing either upper or lower triangular part of the symmetric matrixldab*n) for column major layout and max(1,ldab*(ka+ 1)) for row major layout)A(as specified byuplo) in band storage format.bb(size at least max(1,is an array containing either upper or lower triangular part of the symmetric matrixldbb*n) for column major layout and max(1,ldbb*(kb+ 1)) for row major layout)B(as specified byuplo) in band storage format.
- ldab
- The leading dimension of the arrayab; must be at leastka+1for column major layout and at least max(1,.n) for row major layout
- ldbb
- The leading dimension of the arraybb; must be at leastkb+1for column major layout and at least max(1,.n) for row major layout
- vl,vu
- If, the lower and upper bounds of the interval to be searched for eigenvalues.range='V'Constraint:.vl<vuIforrange='A''I',vlandvuare not referenced.
- il,iu
- If, the indices in ascending order of the smallest and largest eigenvalues to be returned.range='I'Constraint:1, if≤il≤iu≤n;n> 0andil=1iu=0if.n= 0Iforrange='A''V',ilandiuare not referenced.
- abstol
- The absolute error tolerance for the eigenvalues.SeeApplication Notesfor more information.
- ldz
- The leading dimension of the output arrayz;. Ifldz≥1,jobz='V'.ldz≥max(1,n)
- ldq
- The leading dimension of the output arrayq;.ldq< 1If,jobz='V'.ldq< max(1,n)
Output Parameters
- ab
- On exit, the contents ofabare overwritten.
- bb
- m
- The total number of eigenvalues found,0. If≤m≤n,range='A', and ifm=n,range='I'.m=iu-il+1
- w,z,q
- Arrays:w, size at least max(1,n) .If, contains the eigenvalues in ascending order.info= 0z(size max(1,.ldz*m) for column major layout and max(1,ldz*n) for row major layout)If, then ifjobz='V',info= 0zcontains the matrixZof eigenvectors, with thei-th column ofzholding the eigenvector associated withw(i). The eigenvectors are normalized so that.ZT*B*Z= IIf, thenjobz='N'zis not referenced.q(size max(1,.ldq*n))If, thenjobz='V'qcontains then-by-nmatrix used in the reduction ofto standard form, that is,A*x=lambda*B*xC*x=lambda*xand consequentlyCto tridiagonal form.If, thenjobz='N'qis not referenced.
- ifail
- Array,size.mIf, then ifjobz='V', the firstinfo= 0melements ofifailare zero; if, theinfo> 0ifailcontains the indices of the eigenvectors that failed to converge.If, thenjobz='N'ifailis not referenced.
Return Values
This function returns a value
info
.If , the execution is successful.
info
=0If , the
info
= -i
i
-th parameter had an illegal value.If , and
info
> 0if , the algorithm failed to converge, and
i
≤
n
i
off-diagonal elements of an intermediate tridiagonal did not converge to zero; Application Notes
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 , where
abstol
+ε
*max(|a|,|b|)ε
is the machine precision. If is used as tolerance, where
abstol
is less than or equal to zero, then ε
*||T
||1
T
is 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*?lamch
('S'), not zero. If this routine returns with , indicating that some eigenvectors did not converge, try setting
info
> 0abstol
to 2*?lamch
('S').