larrd#
Functions
-
void slarrd(const char *range, const char *order, const INT n, const f32 vl, const f32 vu, const INT il, const INT iu, const f32 *gers, const f32 reltol, const f32 *D, const f32 *E, const f32 *E2, const f32 pivmin, const INT nsplit, const INT *isplit, INT *m, f32 *W, f32 *werr, f32 *wl, f32 *wu, INT *iblock, INT *indexw, f32 *work, INT *iwork, INT *info)#
SLARRD computes the eigenvalues of a symmetric tridiagonal matrix T to suitable accuracy.
This is an auxiliary code to be called from SSTEMR. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues.
To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that.
See W. Kahan “Accurate Eigenvalues of a Symmetric Tridiagonal
Matrix”, Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
Parameters
inrange= ‘A’: all eigenvalues will be found. = ‘V’: all eigenvalues in (VL, VU] will be found. = ‘I’: the IL-th through IU-th eigenvalues will be found.
inorder= ‘B’: eigenvalues grouped by split-off block. = ‘E’: eigenvalues ordered smallest to largest.
innThe order of the tridiagonal matrix T. n >= 0.
invlLower bound of interval (if range=’V’).
invuUpper bound of interval (if range=’V’). vl < vu.
inilIndex (0-based) of smallest eigenvalue to return (if range=’I’).
iniuIndex (0-based) of largest eigenvalue to return (if range=’I’).
ingersDouble precision array, dimension (2*n). The N Gerschgorin intervals: (gers[2*i], gers[2*i+1]).
inreltolThe minimum relative width of an interval.
inDDouble precision array, dimension (n). The diagonal elements of the tridiagonal matrix T.
inEDouble precision array, dimension (n-1). The off-diagonal elements of T.
inE2Double precision array, dimension (n-1). The squared off-diagonal elements of T.
inpivminThe minimum pivot allowed in the Sturm sequence.
innsplitThe number of diagonal blocks in T.
inisplitInteger array, dimension (n). The splitting points (0-based block boundaries).
outmThe actual number of eigenvalues found.
outWDouble precision array, dimension (n). The eigenvalue approximations.
outwerrDouble precision array, dimension (n). The error bounds on eigenvalues.
outwlLower bound of interval containing wanted eigenvalues.
outwuUpper bound of interval containing wanted eigenvalues.
outiblockInteger array, dimension (n). Block number (0-based) for each eigenvalue.
outindexwInteger array, dimension (n). Local index (0-based) within block for each eigenvalue.
outworkDouble precision workspace, dimension (4*n).
outiworkInteger workspace, dimension (3*n).
outinfo= 0: successful exit.
< 0: if info = -i, the i-th argument had an illegal value.
> 0: some eigenvalues failed to converge or were not computed.
void slarrd(
const char* range,
const char* order,
const INT n,
const f32 vl,
const f32 vu,
const INT il,
const INT iu,
const f32* gers,
const f32 reltol,
const f32* D,
const f32* E,
const f32* E2,
const f32 pivmin,
const INT nsplit,
const INT* isplit,
INT* m,
f32* W,
f32* werr,
f32* wl,
f32* wu,
INT* iblock,
INT* indexw,
f32* work,
INT* iwork,
INT* info
);
Functions
-
void dlarrd(const char *range, const char *order, const INT n, const f64 vl, const f64 vu, const INT il, const INT iu, const f64 *gers, const f64 reltol, const f64 *D, const f64 *E, const f64 *E2, const f64 pivmin, const INT nsplit, const INT *isplit, INT *m, f64 *W, f64 *werr, f64 *wl, f64 *wu, INT *iblock, INT *indexw, f64 *work, INT *iwork, INT *info)#
DLARRD computes the eigenvalues of a symmetric tridiagonal matrix T to suitable accuracy.
This is an auxiliary code to be called from DSTEMR. The user may ask for all eigenvalues, all eigenvalues in the half-open interval (VL, VU], or the IL-th through IU-th eigenvalues.
To avoid overflow, the matrix must be scaled so that its largest element is no greater than overflow**(1/2) * underflow**(1/4) in absolute value, and for greatest accuracy, it should not be much smaller than that.
See W. Kahan “Accurate Eigenvalues of a Symmetric Tridiagonal
Matrix”, Report CS41, Computer Science Dept., Stanford University, July 21, 1966.
Parameters
inrange= ‘A’: all eigenvalues will be found. = ‘V’: all eigenvalues in (VL, VU] will be found. = ‘I’: the IL-th through IU-th eigenvalues will be found.
inorder= ‘B’: eigenvalues grouped by split-off block. = ‘E’: eigenvalues ordered smallest to largest.
innThe order of the tridiagonal matrix T. n >= 0.
invlLower bound of interval (if range=’V’).
invuUpper bound of interval (if range=’V’). vl < vu.
inilIndex (0-based) of smallest eigenvalue to return (if range=’I’).
iniuIndex (0-based) of largest eigenvalue to return (if range=’I’).
ingersDouble precision array, dimension (2*n). The N Gerschgorin intervals: (gers[2*i], gers[2*i+1]).
inreltolThe minimum relative width of an interval.
inDDouble precision array, dimension (n). The diagonal elements of the tridiagonal matrix T.
inEDouble precision array, dimension (n-1). The off-diagonal elements of T.
inE2Double precision array, dimension (n-1). The squared off-diagonal elements of T.
inpivminThe minimum pivot allowed in the Sturm sequence.
innsplitThe number of diagonal blocks in T.
inisplitInteger array, dimension (n). The splitting points (0-based block boundaries).
outmThe actual number of eigenvalues found.
outWDouble precision array, dimension (n). The eigenvalue approximations.
outwerrDouble precision array, dimension (n). The error bounds on eigenvalues.
outwlLower bound of interval containing wanted eigenvalues.
outwuUpper bound of interval containing wanted eigenvalues.
outiblockInteger array, dimension (n). Block number (0-based) for each eigenvalue.
outindexwInteger array, dimension (n). Local index (0-based) within block for each eigenvalue.
outworkDouble precision workspace, dimension (4*n).
outiworkInteger workspace, dimension (3*n).
outinfo= 0: successful exit.
< 0: if info = -i, the i-th argument had an illegal value.
> 0: some eigenvalues failed to converge or were not computed.
void dlarrd(
const char* range,
const char* order,
const INT n,
const f64 vl,
const f64 vu,
const INT il,
const INT iu,
const f64* gers,
const f64 reltol,
const f64* D,
const f64* E,
const f64* E2,
const f64 pivmin,
const INT nsplit,
const INT* isplit,
INT* m,
f64* W,
f64* werr,
f64* wl,
f64* wu,
INT* iblock,
INT* indexw,
f64* work,
INT* iwork,
INT* info
);