Eigs Function on Function Handle Not Converged
Mostra commenti meno recenti
my little fun problem looks like:
F is some neat linear function handle. I need to find its largest real eigenvalues. (it basically looks like A*x where the construction of A involves unpleasant large matrix inversion and is huge (size of tens of thousands squared)
So I called eigs and it did not converge when specified to calculate 10 largestreal eigenvalues but converged when specified to calculate 10 smallestreal. I need both so any reason this might be it?
Or what is the threshold that determines convergence or not behind the curtains?
8 Commenti
Sam Sun
il 12 Ott 2018
Matt J
il 12 Ott 2018
Any number of things could be wrong with your Afun() operator. Have you verified that it is linear, for example?
Sam Sun
il 12 Ott 2018
Bruno Luong
il 12 Ott 2018
Modificato: Bruno Luong
il 12 Ott 2018
EIGS converge rather poorly when the eigenvalues are very close or they are multiples.
The other factor is the angle(s) between eigen subspaces, if they are close to 90 degrees, it's esier for eigs numerically to solve, and the opposite is naturally true (small angles -> more challenging).
Many be your largest eigen-values happen to be in the difficult case but not the other extreme of the spectrum.
Sam Sun
il 12 Ott 2018
Bruno Luong
il 12 Ott 2018
It could be. It depends on numerical methods used. Some method use deflation combined with inverse power, and the rate of convergence depends on the factors I mentioned earlier. Some methods also might be specific to the form of your matrix (symmetric, Hermitian, etc...) and might be use some more specific factorization property to ease the task. So if your operator is autoadjoint, don't forget to specify the corresponding flag to let EIGS select a best method.
Those are general comments, and it difficult to answer without knowing more about your linear operator and the exact methods used by EIGS.
Sam Sun
il 12 Ott 2018
Bruno Luong
il 12 Ott 2018
It doesn't matter what things you do behind the scene as long as it represents a linear operator.
Sometime you have to do some extra specific work to understand your operator, and might write your own eigs() to have a more suitable method.
In my youth I solved some big system of second order linearized Navier Stokes system with more 200k unknown and feed it through a Lanczos method to pull out the eigen mode of the system in order study the sensitivity of environmental global climate and it works just fine, and that was 30 year ago, and no one has cared this problem at the time.
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Linear Algebra in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!