-
Notifications
You must be signed in to change notification settings - Fork 70
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat symmetric eigen #657
base: master
Are you sure you want to change the base?
Feat symmetric eigen #657
Conversation
adds functions and data structures required to implement Algorithms 6.1 & 6.2 in http://arxiv.org/abs/1903.08538 - deflation criteria (§ 6.3) - two types of symmetric matrices used for intermediate computations and processing: `SymBandedPlusBulge` and `SymBlockArrowHead` - *the* algorithms (symmetric_eigen, § 6.1 & 6.4) - a data structure to store the factored form of the eigenvectors, EmbeddedBlockOperator (§ 6.5) still needs tests and improvements
This looks great! But all the matrix stuff should be in its own package: ApproxFun is too big already and can't handle any more unit tests. (We may need to divide it into ApproxFunBase, ApproxFunOrthogonalPolynomials, ApproxFunFourier, … to get over this.) |
Yep, I agree. They are all structured (symmetric) low-rank perturbations of symmetric banded matrices. Should they go in BandedMatrices.jl or a derived repository, like BandedPlusLowRankMatrices.jl? |
https://github.com/kuanxu/AlmostBandedMatrices.jl An |
Interesting, looks like that repository could be the right place, though we may have to discuss the interface. For example, what is an almost-banded matrix? If B is banded and J is the exchange matrix, is B + J almost-banded? Also, a bulge can be chased off the bands more efficiently than if it were literally typed as a low-rank matrix, even if it may be viewed as a low-rank perturbation. So maybe this calls for updating that repository with traits?? |
Why not a |
I was thinking that block banded matrices would lead to fast spectral solutions of Schrödinger eigenproblems on the sphere |
Sorry, I should have said |
One storage scheme for skyline matrices is by a field containing contiguous memory and another containing integers that denote the indices of the beginning of each row/column of data. http://www.netlib.org/utk/people/JackDongarra/etemplates/node378.html. This is great because it is general enough to include banded matrices plus bulges or spikes (arrowheads). But what about inverting the Cholesky factor of a A first stab at refining |
To be honest it’s probably best to use a banded matrix since then you can call LAPACK |
Though I guess we can decompose a block skyline matrix into a banded blocks and then use LAPACK |
This adds prototypes for algorithms 6.1 & 6.2 in http://arxiv.org/abs/1903.08538; there are many, many optimizations to pursue.
For now, the speed of the spectral decompositions is highly dependent on the speed of indexing of individual entries of the operator(s). But it's fun to play with Mathieu-like systems such as those below. This script shows that some perturbed negative Laplacian eigenproblems (posed on
SinSpace()
, for the trivial symmetry) can be decomposed in linear time.100,000 eigenvalues in half a second 🐢.