PrevUpHomeNext
laebz
Prototype

There is one prototype of laebz available, please see below.

laebz( const int_t ijob, const int_t nitmax,
        const int_t n, const int_t minp,
        const int_t nbmin, const Scalar >, const Scalar >,
        const Scalar >, const VectorD& d, const VectorE& e,
        const VectorE2& e2, VectorNVAL& nval, MatrixAB& ab, VectorC& c,
        int_t& mout, MatrixNAB& nab );

Description

laebz (short for $FRIENDLY_NAME) provides a C++ interface to LAPACK routines SLAEBZ and DLAEBZ. laebz contains the iteration loops which compute and use the function N(w), which is the count of eigenvalues of a symmetric tridiagonal matrix T less than or equal to its argument w. It performs a choice of two types of loops:

IJOB=1, followed by IJOB=2: It takes as input a list of intervals and returns a list of sufficiently small intervals whose union contains the same eigenvalues as the union of the original intervals. The input intervals are (AB(j,1),AB(j,2)], j=1,...,MINP. The output interval (AB(j,1),AB(j,2)] will contain eigenvalues NAB(j,1)+1,...,NAB(j,2), where 1 <= j <= MOUT.

IJOB=3: It performs a binary search in each input interval (AB(j,1),AB(j,2)] for a point w(j) such that N(w(j))=NVAL(j), and uses C(j) as the starting point of the search. If such a w(j) is found, then on output AB(j,1)=AB(j,2)=w. If no such w(j) is found, then on output (AB(j,1),AB(j,2)] will be a small interval containing the point where N(w) jumps through NVAL(j), unless that point lies outside the initial interval.

Note that the intervals are in all cases half-open intervals, i.e., of the form (a,b] , which includes b but not a .

To avoid underflow, the matrix should be scaled so that its largest element is no greater than overflow*(1/2) * underflow*(1/4) in absolute value. To assure the most accurate computation of small eigenvalues, the matrix should be scaled to be not much smaller than that, either.

See W. Kahan "Accurate Eigenvalues of a Symmetric Tridiagonal Matrix", Report CS41, Computer Science Dept., Stanford University, July 21, 1966

Note: the arguments are, in general, not checked for unreasonable values.

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.364. Dispatching of laebz

Value type of VectorD

LAPACK routine

float

SLAEBZ

double

DLAEBZ


Definition

Defined in header boost/numeric/bindings/lapack/auxiliary/laebz.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/auxiliary/laebz.hpp>
using namespace boost::numeric::bindings;

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

this will output

[5] 0 1 2 3 4 5

Notes
See Also

PrevUpHomeNext