A library to compute the spectrum of an infinite-dimensional operator, optimized for accuracy and speed, written in rust.
Some source codes are to be released later. See dependencies like ztensor
and type-generic-umfpack
in my profile page.
It is always tricky to find numerically the spectrum of an infinite matrix (which usually is the representation of an operator in $\ell^2(\mathbb Z), \ell^2(\mathbb N)$). The naive approach of finite-dimensional truncation simply fails to work. For example, the right shift operator (the matrix with 1 on its superdiagonal and 0 everywhere else) has unit circle on
This has cause endless problems of mathematicians, physicists and other people who are working with operators whose spectrum is very difficult to compute. In general, we cannot recover the spectrum accurately from finitely many entries of the matrix, but under suitable assumptions and an improved algorithm, we can easily avoid lots of errors, like what's in the example above, to reduce bad surprises significantly.
Most of fundamental ideas of the algorithms are given in the following paper, which can be found here.
Ben-Artzi, J., Colbrook, M. J., Hansen, A. C., Nevanlinna, O., & Seidel, M. (2015). Computing Spectra--On the Solvability Complexity Index Hierarchy and Towers of Algorithms. arXiv preprint arXiv:1508.03280.
The algorithm proposed in the original paper is sufficient to achieve nice theoretical results, but for the simplicity of presentation, they do not include implementation details which could make them much faster and very practical. This is the purpose of this repository.
By improving accuracy (compare to naive matrix truncations), do we have to lose some speed? The answer is NO. The naive truncation tries to find all eivenvalues of a huge matrix, which is cubersome (typically
The codebase contains:
- Implementation of the main spec algorithm.
- And impelementation of a fast solver for smallest singular value of a large, sparse matrix.
- Generic data structure
ZTensor
for infinite matrices and generic computation interfaces which are very flexible. - Auxillary tools.