This class implements a wrapper to the Spectra generalized eigen solver for square real symmetric matrices, i.e. to solve \( Ax = \lambda Bx\), where A is symmetric and B is positive definite. It calculates the full spectrum of eigenvalues. More...
#include <ikarus/solver/eigenvaluesolver/generalizedeigensolver.hh>
Public Types | |
using | ScalarType = typename MT::Scalar |
using | MatrixType = MT |
using | ProductType = std::conditional_t< isDense, Spectra::DenseSymMatProd< ScalarType >, Spectra::SparseSymMatProd< ScalarType > > |
using | CholeskyType = std::conditional_t< isDense, Spectra::DenseCholesky< ScalarType >, Spectra::SparseCholesky< ScalarType > > |
using | SolverType = Spectra::SymGEigsSolver< ProductType, CholeskyType, Spectra::GEigsMode::Cholesky > |
Public Member Functions | |
template<typename MATA , typename MATB > requires (Concepts::DenseOrSparseEigenMatrix<std::remove_cvref_t<MATA>>) | |
GeneralizedSymEigenSolver (MATA &&A, MATB &&B) | |
Construct a new GeneralizedSymEigenSolver object. More... | |
template<Concepts::FlatAssembler AssemblerA, Concepts::FlatAssembler AssemblerB> | |
GeneralizedSymEigenSolver (std::shared_ptr< AssemblerA > assemblerA, const std::shared_ptr< AssemblerB > &assemblerB) | |
Construct a new GeneralSymEigenSolver object. More... | |
bool | compute (Eigen::Index maxit=1000, ScalarType tolerance=1e-10) |
Starts the computation of the eigenvalue solver. More... | |
auto & | eigenvalues () const |
Returns the eigenvalues of the generalized eigenvalue problem. More... | |
auto & | eigenvectors () const |
Returns the eigenvectors of the generalized eigenvalue problem. More... | |
Eigen::Index | nev () const |
Returns the number of eigenvalues of the problem. More... | |
Static Public Attributes | |
static constexpr bool | isDense = Concepts::EigenMatrix<MT> |
Under the hood it uses the Spectra::SymGEigsSolver with Cholesky decomposition for B. As this class can only compute up to \( n-1 \) smallest or greatest eigenvalues, we use two different solvers for the n/2 smallest and n/2 greatest eigenvalues. The matrices are shared throughout the solvers so no extra copy is being made.
MT | the used Matrix Type, can be a sparse or dense Eigen::Matrix |
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::CholeskyType = std::conditional_t<isDense, Spectra::DenseCholesky<ScalarType>, Spectra::SparseCholesky<ScalarType> > |
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::MatrixType = MT |
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::ProductType = std::conditional_t<isDense, Spectra::DenseSymMatProd<ScalarType>, Spectra::SparseSymMatProd<ScalarType> > |
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::ScalarType = typename MT::Scalar |
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::SolverType = Spectra::SymGEigsSolver<ProductType, CholeskyType, Spectra::GEigsMode::Cholesky> |
|
inline |
MATA | the deduced type of the matrix A |
MATB | the deduced type of the matrix B |
A | the matrix A |
B | the matrix B |
|
inline |
AssemblerA | the type of the assembler for matrix A. |
AssemblerB | the type of the assembler for matrix B. |
assemblerA | assembler for matrix A. |
assemblerB | assembler for matrix B. |
|
inline |
tolerance | given tolerance for iterative eigenvalue solving (default: 1e-10) |
maxit | given maximum iterations for eigenvalue solving (default: 1000) |
|
inline |
|
inline |
|
inline |
|
staticconstexpr |