Page 1 of 1

Get unscaled eigenvectors from DGEEV

PostPosted: Mon Apr 04, 2011 12:13 pm
by costoich
Hello,
Does anybody know how to get unscaled left and right eigenvectors from dgeev? I am trying to find A = VR(GAMMA)VL, which will not work with the scaled versions.
Thanks,
Chris

Re: Get unscaled eigenvectors from DGEEV

PostPosted: Wed Apr 06, 2011 12:44 am
by Julien Langou
Hi Chris, not sure what you mean by scaled and unscaled. Anyway, please read the following thread:
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=298.
Julien.

Re: Get unscaled eigenvectors from DGEEV

PostPosted: Mon Apr 11, 2011 2:31 pm
by costoich
Thank you Julien, that was helpful. I still run into a little problem though. I am following your instructions to dsigg:

What's the conclusion of all this. Looks like for your application, you really
want inv(VR) and that VL is not enough. Even if your eigenvalue are distinct,
LAPACK will not guarantee you
VL^H * VR = I.
But (if dist. eigs.) VR^H * VL is a diagonal matrix with modulus 1 diagonal element,
therefore you can compute for each i=1 to n:
VL(:,i)^H * VR(:,i) = alpha.
alpha is necessarilly a scalar of modulus 1, if it's not, then the modulus of
alpha nedds to be between 0 and 1 and this means that you have multiple eigenvalues
and well, it's a little harder to handle, so I'll skip.
Then you just need to divide the row i of VL by conj(alpha) or the col i of VR
by alpha. (Either one or the other, but not both!). And that should do it.
After this scaling, you will find inv(VR) from VL^H.


In my case, I expect 5 eigenvalues, 3 of which are multiple. Sometimes alpha = 0.0, which is a problem. Do you have any advise?
Thanks a lot!
-Chris

Re: Get unscaled eigenvectors from DGEEV

PostPosted: Mon Apr 11, 2011 3:00 pm
by Julien Langou
Yep, for multiple eigenvalues, you would get (alpha.NE.1.0D+00). (The fact that it is ZERO or not is not the issue actually, as soon as it's not ONE you are in trouble.)
So, what you can do is simply compute VR (only), and compute the inverse of VR to get VL. That's the best idea I have at this point. Read the email of Jim (at the bottom of topic #298) to see the danger of doing this.
If your problem is well conditioned, the procedure above ( compute VR (only), and compute the inverse of VR to get VL ) will work.
Julien.

Re: Get unscaled eigenvectors from DGEEV

PostPosted: Mon Apr 11, 2011 3:32 pm
by costoich
Hi Julien,
Thanks for the reply. I have been doing that: computing VR, then the pseudo-inverse using SVD (sometimes VR is singular). Thank you very much for confirming that this is probably my best option.
-Chris