Class lanczos (o2scl_linalg)¶
- 
template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
 class lanczos¶
- Lanczos diagonalization. - 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- std::hypot()instead of- pythag.f).- Idea for Future:
- The function eigen_tdiag() automatically sorts the eigenvalues, which may not be necessary. 
 - Idea for Future:
- Do something better than the simple matrix-vector product. For example, use dgemm() and allow user to specify column or row-major. 
 - Idea for Future:
- Rework memory allocation to perform as needed. 
 - Public Functions - 
inline lanczos()¶
 - 
inline 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 - matusing the Lanczos method.- Given a square matrix - matwith size- size, this function applies- n_iteriterations of the Lanczos algorithm to produce- n_iterapproximate eigenvalues stored in- eigen. As a by-product, this function also partially tridiagonalizes the matrix placing the result in- diagand- 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_iterelements.- Choosing /c n_iter = - sizewill produce all of the exact eigenvalues and the corresponding tridiagonal matrix, but this may be slower than diagonalizing the matrix directly.
 - 
inline int eigen_tdiag(size_t n, vec_t &diag, vec_t &off_diag)¶
- In-place diagonalization of a tridiagonal matrix. - On input, the vectors - diagand- off_diagshould both be vectors of size- n. The diagonal entries stored in- diag, and the \( n-1 \) 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_diagis destroyed by the computation.- This uses an implict QL method from the EISPACK routine - imtql1. The value of- ierrfrom the original Fortran routine is stored in td_lasteval.