- Added a directory
contribto include code contributed by users. It is not formally a part of the Spectra library, but it may contain useful solvers and applications based on Spectra. Code incontribmay not be fully tested, so please use with caution. Feedback and report of issues are always welcome - Added an eigen solver
LOBPCGSolverin thecontribdirectory using the LOBPCG algorithm, contributed by Anna Araslanova - Added a partial SVD solver
PartialSVDSolverin thecontribdirectory - Added two internal classes
ArnoldiandLanczosto compute the Arnoldi/Lanczos factorization in eigen solvers - Added a few other internal classes to refactor the eigen solver classes (see below)
- API change: Spectra now requires Eigen >= 3.3
- API change: The library header files are moved into a directory
named
Spectra. Hence the recommended include directive would look like#include <Spectra/SymEigsSolver.h> - All eigen solvers have been refactored using a cleaner class hierarchy. It may potentially make the implementation of new eigen solvers easier, especially for generalized eigen problems
- The matrix operation classes (e.g.
DenseSymMatProdandSparseSymMatProd) are now internally using an Eigen::Ref object to wrap the user matrices, thanks to Dario Mangoni who raised this issue in #16 - Fixed inappropriate range of random numbers in the tests
- Fixed regressions in v0.6.0 on some edge cases
- Improved the accuracy of restarting processes in
SymEigsSolverandGenEigsSolver - Updated the included Catch2 to v2.2.2
- Code and documentation cleanup
- Fixed a bug of uninitialized memory
- Updated the included Catch2 to v2.1.2
- Added virtual destructors to the
SymEigsSolverandUpperHessenbergQRclasses to fix compiler warnings, by Julian Kent - Added a
NUMERICAL_ISSUEentry to theCOMPUTATION_INFOenumeration to indicate the status of Cholesky decomposition - Added the
info()member function toDenseCholeskyandSparseCholeskyto report the status of the decomposition - Added a missing
#includeitem inSparseCholesky.h, thanks to Maxim Torgonsky - Added a
TypeTraitsclass to retrieve additional numeric limits of scalar value types
- Documentation updates
- Updated the project URL to https://spectralib.org
- Some internal improvements, such as pre-allocating vectors in loops, and changing return type to reference, thanks to Angelos Mantzaflaris
- Improved the accuracy of symmetric and general eigen solvers
- Reduced the memory use of
UpperHessenbergQRandTridiagQRdecompositions - Updated the included Catch2 to v2.0.1
- Updated the testing code using the new API of Catch2
- Updated Travis CI script
- Added the generalized eigen solver
SymGEigsSolverin the regular inverse mode - Added the wrapper class
SparseRegularInversethat can be used withSymGEigsSolverin the regular inverse mode - Added test code for generalized eigen solver in the regular inverse mode
- Improved the numerical precision and stability of some internal linear
algebra classes, including
TridiagEigen,UpperHessenbergEigen, andDoubleShiftQR - API change: The
x_inargument in matrix operation functions, e.g.perform_op(), is now labelled to be constant - Fixed a bug that
GenEigsComplexShiftSolvergave wrong results when transforming back the eigenvalues, discovered by @jdbancal - Updated included Catch to v1.7.0
- Documentation improvement
- Added an
Uplotemplate parameter to theDenseSymShiftSolveclass - Added the generalized eigen solver
SymGEigsSolverin the Cholesky mode - Added the wrapper classes
DenseCholeskyandSparseCholeskythat can be used withSymGEigsSolverin the Cholesky mode - Added test code for generalized eigen solver in the Cholesky mode
- Updated included Catch to v1.5.7
- Improved documentation
- Updated Travis CI script
- Allowing basic math functions such as
abs()andsqrt()to be overloaded (avoid usingstd::absandstd::sqrtdirectly), thanks to @jdbancal. This makes it possible to use user-defined float number types with Spectra - Replaced other
stdfunctions by their Eigen counterparts, for example usingEigen::NumTraits<Scalar>::epsilon()to substitutestd::numeric_limits<Scalar>::epsilon() - Improved the numerical stability of several operations, e.g. the function
hypot(x, y)is used to computesqrt(x^2 + y^2) - More careful use of "approximate zero" constants
- Fixed an out-of-bound bug detected by @jdbancal
- Added the wrapper classes
SparseSymMatProdandSparseSymShiftSolvefor sparse symmetric matrices - Added the wrapper class
SparseGenRealShiftSolvefor general sparse matrices - Added tests for sparse matrices
- Using Travis CI for automatic unit test
- Updated included Catch to v1.5.6
- API change: Each eigen solver was moved to its own header file.
For example to use
SymEigsShiftSolverone needs to include<SymEigsShiftSolver.h> - Header files for internal use were relocated
- Benchmark script now outputs number of matrix operations
- Added this change log
- Added a simple built-in random number generator, so that the algorithm was made to be deterministic
- Added the wrapper class
DenseSymMatProdfor symmetric matrices
- Improved Arnoldi factorization
- Iteratively corrects orthogonality
- Creates new residual vector when invariant subspace is found
- Stability for matrices with repeated eigenvalues is greatly improved
- Adjusted deflation tolerance in double shift QR
- Updated result analyzer
- Updated included Catch to v1.3.4
- Updated copyright information
- API change: Default operator of
SymEigsSolverwas changed fromDenseGenMatProdtoDenseSymMatProd
- Initial release of Spectra