?stebz
?stebz
Computes selected eigenvalues of a real symmetric tridiagonal matrix by bisection.
Syntax
lapack_int
LAPACKE_sstebz
(
char
range
,
char
order
,
lapack_int
n
,
float
vl
,
float
vu
,
lapack_int
il
,
lapack_int
iu
,
float
abstol
,
const
float
*
d
,
const
float
*
e
,
lapack_int
*
m
,
lapack_int
*
nsplit
,
float
*
w
,
lapack_int
*
iblock
,
lapack_int
*
isplit
);
lapack_int
LAPACKE_dstebz
(
char
range
,
char
order
,
lapack_int
n
,
double
vl
,
double
vu
,
lapack_int
il
,
lapack_int
iu
,
double
abstol
,
const
double
*
d
,
const
double
*
e
,
lapack_int
*
m
,
lapack_int
*
nsplit
,
double
*
w
,
lapack_int
*
iblock
,
lapack_int
*
isplit
);
Include Files
- mkl.h
Description
The routine computes some (or all) of the eigenvalues of a real symmetric tridiagonal matrix , , ...). Then it performs bisection on each of the blocks and returns the block index of each computed eigenvalue, so that a subsequent call to stein can also take advantage of the block structure.
T
by bisection. The routine searches for zero or negligible off-diagonal elements to see if T
splits into block-diagonal form T
= diag(T
1
T
2
T
i
Input Parameters
- range
- Must be'A'or'V'or'I'.If, the routine computes all eigenvalues.range='A'If, the routine computes eigenvaluesrange='V'w[in the half-open interval:i].vl<w[i]≤vuIf, the routine computes eigenvalues with indicesrange='I'iltoiu.
- order
- Must be'B'or'E'.If, the eigenvalues are to be ordered from smallest to largest within each split-off block.order='B'If, the eigenvalues for the entire matrix are to be ordered from smallest to largest.order='E'
- n
- The order of the matrixT().n≥0
- vl,vu
- If, the routine computes eigenvaluesrange='V'w[in the half-open interval:i].vl<w[)i]≤vuIforrange='A''I',vlandvuare not referenced.
- il,iu
- Constraint:1.≤il≤iu≤nIf, the routine computes eigenvaluesrange='I'w[such thati](assuming that the eigenvaluesil≤i≤iuw[are in ascending order).i]Iforrange='A''V',ilandiuare not referenced.
- abstol
- The absolute tolerance to which each eigenvalue is required. An eigenvalue (or cluster) is considered to have converged if it lies in an interval of widthabstol.If, then the tolerance is taken asabstol≤0.0eps*|, whereT|epsis the machine precision, and|is the 1-norm of the matrixT|T.
- d,e
- Arrays:dcontains the diagonal elements ofT.The size ofdmust be at least max(1,n).econtains the off-diagonal elements ofT.The size ofemust be at least max(1,n-1).
Output Parameters
- m
- The actual number of eigenvalues found.
- nsplit
- The number of diagonal blocks detected inT.
- w
- Array, size at least max(1,n). The computed eigenvalues, stored in.tow[0]w[m- 1]
- iblock,isplit
- Arrays, size at least max(1,n).A positive valueiblock[i]is the block number of the eigenvalue stored inw[i](see alsoinfo).The leadingnsplitelements ofisplitcontain points at whichTsplits into blocksTas follows: the blockiTcontains rows/columns 1 to1; the blockisplit[0]Tcontains rows/columns2toisplit[0]+1, and so on.isplit[1]
Return Values
This function returns a value
info
.If , the execution is successful.
info
=0If , for or
info
= 1range
= 'A'
'V'
, the algorithm failed to compute some of the required eigenvalues to the desired accuracy; iblock
[i
] < 0 indicates that the eigenvalue stored in w
[i
] failed to converge. If , for , the algorithm failed to compute some of the required eigenvalues. Try calling the routine again with .
info
= 2range
= 'I'
range
= 'A'
If :
info
= 3for or ;
range
= 'A'
'V'
, same as info
= 1for , same as .
range
= 'I'
info
= 2If , no eigenvalues have been computed. The floating-point arithmetic on the computer is not behaving as expected.
info
= 4If , the
info
= -i
i
-th parameter had an illegal value.Application Notes
The eigenvalues of
T
are computed to high relative accuracy which means that if they vary widely in magnitude, then any small eigenvalues will be computed more accurately than, for example, with the standard QR
method. However, the reduction to tridiagonal form (prior to calling the routine) may exclude the possibility of obtaining high relative accuracy in the small eigenvalues of the original matrix if its eigenvalues vary widely in magnitude.