MATLAB: Generalized Eigenvalue Problem – Hessenberg Matrix

gsvdhessenberg

Greetings,
I am dealing with a generalized eignevalue problem which I need to solve every time-step.
Although I used the Matlab function eigs, the computation is still expensive since I need to generate a large sparse matrix A and apply boundary conditions.
Now I am trying to implement the Arnoldi iteration, this way I do not have to create the matrix A, since we are only interested in the action of A on the vector v.
My questions are:
Will I be treating the Hessenberg matrix as my new A, i.e. applying boundary conditions to it and using it to solve for the desired eigenvalues and eigenvectors? As far as I know, H is a projection of A and its eigenvalues are related to the eigenvalues of A.
Furthermore, if I have to solve for H, can I use gsvd to target a specific eigenvalue and its corresponding eigenvector like I do with eigs? (H is not a square matrix so I am unable now to use eig or eigs)
Lastly, how do I go about the fact that the eigenvectors of H have a different size (less) than my initial matrix A or the eigenvectors obtained from it?
Any insight regarding any of my questions is highly appreciated.
Jack

Best Answer

I agree with Steve Lord; if you're able to replicate the action of matrix A on a vector v, you can pass this to EIGS in a function handle and it will give the correct result. NOTE this assumes that you aren't computing eigenvalues that have smallest absolute value or that are closest to some shift (see the doc for details on that).
Is your matrix A changing with each timestep? Also, what sigma are you passing to EIGS?
Some details based on your comments:
  • The Arnoldi iteration you are proposing is very similar to what is going on internally inside of EIGS (use edit eigs to take a look at the details if you're interested - the method used here is a newer version based on similar principles, the Krylov-Schur method).
  • No room for using the GSVD on the Hessenberg matrix there. While GSVD is a generalization of SVD, and generalized eigenvalue problems are a generalization of simple ones, those two generalizations don't really map well onto each other. The Arnoldi iteration can be written so H is k+1-by-k, but the inner eigenproblem to be solved is then just H(1:k, :).
Related Question