##### stevr

###### Prototype

There is one prototype of `stevr` available, please see below.

    stevr( const char jobz, const char range, const int_t n,
            VectorD& d, VectorE& e, const Scalar >, const Scalar >,
            const int_t il, const int_t iu,
            const Scalar >, int_t& m, VectorW& w, MatrixZ& z,
            VectorISUPPZ& isuppz );

###### Description

`stevr` (short for $FRIENDLY_NAME) provides a C++ interface to LAPACK routines SSTEVR and DSTEVR. `stevr` computes selected eigenvalues and, optionally, eigenvectors of a real symmetric tridiagonal matrix T. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.

Whenever possible, `stevr` calls DSTEMR to compute the eigenspectrum using Relatively Robust Representations. DSTEMR computes eigenvalues by the dqds algorithm, while orthogonal eigenvectors are computed from various "good" L D L^T representations (also known as Relatively Robust Representations). Gram-Schmidt orthogonalization is avoided as far as possible. More specifically, the various steps of the algorithm are as follows. For the i-th unreduced block of T, (a) Compute T - sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation, (b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm, (c) If there is a cluster of close eigenvalues, "choose" sigma_i close to the cluster, and go to step (a), (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T, compute the corresponding eigenvector by forming a rank-revealing twisted factorization. The desired accuracy of the output can be specified by the input parameter ABSTOL.

For more details, see "A new O(n^2) algorithm for the symmetric tridiagonal eigenvalueeigenvector problem", by Inderjit Dhillon, Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997.

Note 1 : `stevr` calls DSTEMR when the full spectrum is requested on machines which conform to the ieee-754 floating point standard. `stevr` calls DSTEBZ and DSTEIN on non-ieee machines and when partial spectrum requests are made.

Normal execution of DSTEMR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not handle NaNs and infinities in the ieee standard default manner.

The selection of the LAPACK routine is done during compile-time, and is determined by the type of values contained in type `VectorD`. The type of values is obtained through the `value_type` meta-function `typename value_type<VectorD>::type`. The dispatching table below illustrates to which specific routine the code path will be generated.

Table 1.175. Dispatching of stevr

Value type of VectorD | LAPACK routine
--- | ---
`float` | SSTEVR
`double` | DSTEVR

###### Definition

Defined in header `boost/numeric/bindings/lapack/driver/stevr.hpp`.

###### Parameters or Requirements on Types

Parameters

MatrixA

  The definition of term 1

MatrixB

  The definition of term 2

MatrixC

  The definition of term 3.

  Definitions may contain paragraphs.

###### Complexity

###### Example

    #include <boost/numeric/bindings/lapack/driver/stevr.hpp>
    using namespace boost::numeric::bindings;

    lapack::stevr( x, y, z );

this will output

    [5] 0 1 2 3 4 5

###### Notes

###### See Also

- Originating Fortran source files sstevr.f and dstevr.f at Netlib.