( I did not look at your codes. )
You are correct.
1) LAPACK ZHEEV guarantees numerical orthogonality of the eigenvectors, this is
a Hermitian eigensolver,
2) LAPACK ZGEEV does not guarantee it, this is a non-Hermitian eigensolver,
3) If your input matrix is Hermitian and you use ZGEEV:
3a) if you have a well separated eigenvalue, (meaning distinct enough from all
the other eigenvalues in the spectrum)
you should find that the associated eigenvector is well orthogonal from all
other eigenvectors returned by ZGEEV,
3b) if you have close eigenvalues, the orthogonality will deteriorate (the
closer the eigenvalues, the more deterioration).
Typically, if you have a multiple eigenvalue, the orthogonality of the
associated eigenvector is absolutely messed up.
This makes sense if you look at the specification of ZGEEV. Nowhere is it said
that the eigenvectors should be orthogonal.
(Linear independent, yes, orthogonality, no.)
Bottom line, if you have a Hermitian matrix, you want to use an Hermitian
eigenvalue solver.
(Moreover this would be much faster.)
( The same holds true for complex eigenvalues: LAPACK ZGEEV might return
eigenvalues with
nonzero imaginary part for a Hermitian matrix. )
Cheers, Julien.
On Nov 22, 2012, at 6:18 AM, Shih-Kai Chou <lasergodf91@Domain.Removed> wrote:
Hello,
I use the same hermitian matrix called Hw in my case but use different
subroutines
(1) zgeev
(2) zheev
.
Zgeev can't give me the eigenvector satisfying the orthogonal property but
zheev can.
By the way, both of them give me the same eigenvalues.
I use c-language to write my code.
I don't use the complex structure, instead that I just use the 1-dimensional
array.
cc -o file file.c -llapack -lblas
Thanks,
Shih-Kai Chou
<Hw_zgeev.c><Hw_zheev.c><Hw_Matrix.h><matrix_cplx.h><siteindex2D.h>_______________________________________________
Lapack mailing list
Lapack@Domain.Removed
http://lists.eecs.utk.edu/mailman/listinfo/lapack
|