Eigs Function on Function Handle Not Converged
이전 댓글 표시
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
Sam Sun
2018년 10월 12일
Matt J
2018년 10월 12일
Any number of things could be wrong with your Afun() operator. Have you verified that it is linear, for example?
Sam Sun
2018년 10월 12일
Bruno Luong
2018년 10월 12일
편집: Bruno Luong
2018년 10월 12일
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
2018년 10월 12일
Bruno Luong
2018년 10월 12일
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
2018년 10월 12일
Bruno Luong
2018년 10월 12일
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.
채택된 답변
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Linear Algebra에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!