Lanczos diagonalization. More...
#include <lanczos_base.h>
This class approximates the largest eigenvalues of a symmetric matrix.
The vector and matrix types can be any type which provides access via operator[] or operator(), given a suitable vector allocation type.
The tridiagonalization routine was rewritten from the EISPACK routines imtql1.f (but uses gsl_hypot() instead of pythag.f).
Definition at line 59 of file lanczos_base.h.
Public Member Functions | |
| int | eigenvalues (size_t size, mat_t &mat, size_t n_iter, vec_t &eigen, vec_t &diag, vec_t &off_diag) |
Approximate the largest eigenvalues of a symmetric matrix mat using the Lanczos method. More... | |
| int | eigen_tdiag (size_t n, vec_t &diag, vec_t &off_diag) |
| In-place diagonalization of a tridiagonal matrix. More... | |
Public Attributes | |
| size_t | td_iter |
| Number of iterations for finding the eigenvalues of the tridiagonal matrix (default 30) | |
| size_t | td_lasteval |
| The index for the last eigenvalue not determined if tridiagonalization fails. | |
Protected Member Functions | |
| void | product (size_t n, mat_t &a, vec_t &w, vec_t &prod) |
| Simple matrix-vector product. More... | |
|
inline |
On input, the vectors diag and off_diag should both be vectors of size n. The diagonal entries stored in diag, and the
off-diagonal entries should be stored in off_diag, starting with off_diag[1]. The value in off_diag[0] is unused. The vector off_diag is destroyed by the computation.
This uses an implict QL method from the EISPACK routine imtql1. The value of ierr from the original Fortran routine is stored in td_lasteval.
Definition at line 168 of file lanczos_base.h.
|
inline |
Given a square matrix mat with size size, this function applies n_iter iterations of the Lanczos algorithm to produce n_iter approximate eigenvalues stored in eigen. As a by-product, this function also partially tridiagonalizes the matrix placing the result in diag and off_diag. Before calling this function, space must have already been allocated for eigen, diag, and off_diag. All three of these arrays must have at least enough space for n_iter elements.
Choosing /c n_iter = size will produce all of the exact eigenvalues and the corresponding tridiagonal matrix, but this may be slower than diagonalizing the matrix directly.
Definition at line 95 of file lanczos_base.h.
|
inlineprotected |
It is assumed that memory is already allocated for prod.
Definition at line 305 of file lanczos_base.h.
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).