Class sparseEigen#
Defined in File sparseSolver.hpp
Class Documentation#
-
class sparseEigen#
Sparse matrix eigenvalue solver using Eigen + Spectra libraries.
Solves sparse eigenvalue problems efficiently for large systems. Uses Spectra library for sparse iterative eigensolvers with shift-invert method to find eigenvalues near a target shift point.
The solver finds the eigenvector with eigenvalue having minimum absolute value (ground state), normalized so components sum to 1.
Note
Uses Spectra shift-invert which is efficient for interior eigenvalues
Note
Memory-efficient for sparse matrices with O(nnz) storage
Note
Suitable for large systems N > 5000 with low density
Note
Requires matrix to be stored in COO (coordinate) format internally
Public Functions
-
inline explicit sparseEigen(size_t n = 0)#
Initialize sparse solver with matrix size.
- Parameters:
n – Dimension of square matrix (default: 0)
-
inline void set(size_t i, size_t j, double value)#
Add a matrix element (cumulative).
Elements are stored in triplet format until getMatrix() or solve() is called, at which point they’re compressed into CSR format.
Note
Accumulates: a(i,j) += value if element (i,j) added multiple times
- Parameters:
i – Row index
j – Column index
value – Value to add at (i,j)
-
inline auto getMatrix()#
Get the compressed sparse matrix.
Converts triplet format to compressed sparse row (CSR) format.
Note
Must be called before operations if matrix was modified
- Returns:
Reference to compressed Eigen sparse matrix
-
inline auto solve()#
Solve sparse eigenvalue problem and return ground state eigenvector.
Uses Spectra GenEigsRealShiftSolver with shift-invert transform. Finds 1 eigenvalue with magnitude closest to zero (ground state).
Note
Number of Lanczos vectors used: column/2
Note
Shift point: 0 (finds eigenvalue closest to 0)
Note
Tolerance: 1e-6 for eigenvalue convergence
- Throws:
std::runtime_error – If Spectra eigenvalue computation fails
- Returns:
Normalized ground state eigenvector (sum = 1.0)
-
inline auto vectorDot(const std::vector<double> &X)#
Compute sparse matrix-vector product y = H·x.
Manually iterates through sparse matrix structure for matrix-vector product.
Note
Uses manual iteration for maximum control and efficiency
Note
O(nnz) complexity where nnz is number of non-zeros
- Parameters:
X – Input vector of length column
- Returns:
Result vector containing H·X
-
inline explicit sparseEigen(size_t n = 0)#