#include <lanczos.h>
This is useful for approximating the largest eigenvalues of a symmetric matrix.
The vector and matrix types can be any type which provides access via operator[]
, given suitably constructed allocation types.
The tridiagonalization routine was rewritten from the EISPACK routines imtql1.f
(but uses gsl_hypot()
instead of pythag.f
).
Definition at line 52 of file lanczos.h.
Public Member Functions | |
lanczos () | |
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. | |
int | eigen_tdiag (size_t n, vec_t &diag, vec_t &off_diag) |
In-place diagonalization of a tri-diagonal matrix. | |
Data Fields | |
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) |
Naive matrix-vector product. |
int eigenvalues | ( | size_t | size, | |
mat_t & | mat, | |||
size_t | n_iter, | |||
vec_t & | eigen, | |||
vec_t & | diag, | |||
vec_t & | off_diag | |||
) | [inline] |
Approximate the largest eigenvalues of a symmetric matrix mat
using the Lanczos method.
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.
int eigen_tdiag | ( | size_t | n, | |
vec_t & | diag, | |||
vec_t & | off_diag | |||
) | [inline] |
In-place diagonalization of a tri-diagonal matrix.
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.
void product | ( | size_t | n, | |
mat_t & | a, | |||
vec_t & | w, | |||
vec_t & | prod | |||
) | [inline, protected] |
Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.
Project hosting provided by
,
O2scl Sourceforge Project Page