Skip to content

pure python reference implementation of sparse eigen solvers

License

Notifications You must be signed in to change notification settings

cournape/arnoldi-py

Repository files navigation

Arnoldi

This is an attempt to write an eigensolver for sparse matrices that only relies on NumPy and BLAS/LAPACK, without depending on ARPACK. Ultimately, the hope is to be a viable replacement for scipy.sparse.eigen, and remove the fortran dependency.

It is not usable yet.

Why ?

ARPACK-NG is a fortran library for sparse eigen solvers. It has the following issues:

  • the fortran code is not thread-safe. In particular, it is not re-entrant
  • it does not incorporate some of the more recent improvements discovered for large problems, e.g. A Krylov-Schur Algorithm for Large Eigenproblems, G. W. Stewart, SIAM J. M ATRIX A NAL. A PPL ., Vol. 23, No. 3, pp. 601–614

TODO

For a first 1.0 release:

  • Fundamental support for arbitrary matrices, largest eigen values only
    • basic arnoldi decomp w/ tests
    • add a key set of test matrices, using sparse matrix suite + synthetic (Markov, Laplace, etc.)
    • convergence tracking on Ritz values
    • explicit restart support with deflation
    • Krylov-schur method + more robust convergence criterion
  • Compare performance w/ ARPACK in terms of #matvecs
  • add support for calculation in real space for real matrices
  • optimize for the case of Hermitian/symmetric matrices (Lanczos)
  • LinearOperator support

Post 1.0:

  • add support for shift-invert (arbitrary eigen values)
  • add support for general inverses problems
  • single precision support
  • optimization:
    • optimize orthonormalization
    • ensure memory space is mostly V and nothing else as function of input size
    • block Krylov-Schur ?

Existing alternative implementations

References

About

pure python reference implementation of sparse eigen solvers

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published