IETL Documentation - rayleigh.h

IETL library: rayleigh.h

This header implements the Rayleigh quotients method, discussed, e.g. in Reference [2]. Similar to inverse iteration, Rayleigh quotients iteration relies on a fast way to solve a linear equation with the matrix A-rho*I, where I is the identity matrix, A the matrix of which an eigenvalue is desired, and rho is the latest guess for the eigenvalue. Inverse iteration often, but not always, converges to the eigenvalue closest to the initial guess given by the starting vector.


The Rayleigh quotients iteration function rayleigh

namespace ietl {

template <class MATRIX, class GEN, class IT, class VS>
std::pair<typename vectorspace_traits<VS>::magnitude_type,
typename vectorspace_traits<VS>::vector_type>
rayleigh(const MATRIX& matrix, GEN& gen, const SOLVER& solver, ITER& iter, const VS& vec);

The rayleigh function takes five arguments:
It returns a pair consisting of the last estimate for an eigenvalue and the corresponding eigenvector.

The linear solver

Inverse iteration relies on the user to provide a fast solver for the system of linear equations given by

(matrix - rho * I) y = v

Given the matrix of which an eigenvalue is desired, the latest guess for the eigenvalue rho, and a right hand side v, the solution y needs to be calculated in a fast way. This part of the code is time-critical as it is called at each iteration. To solve above equation, a function object solver needs to be passed, which is called as
The matrix stays the same throughout the iteration and is the same as passed to inverse. This can (and should) be used by the solver to optimize the calculation.

If  (matrix - rho * I)  is singular an exception should be thrown which will terminate the iterations.

copyright 2002-2004 by Matthias Troyer and Prakash Dayal