Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

how to make eigenvectors ( obtained from _geev ) orthorgonal?

Weng__Chi-Hung
Beginner
430 Views

I am looking for the eigenvectors & eigenvalues of a non-symmetric, complex-valued matrix. The matrix is a Hermitian matrix with some diagonal imaginary terms added, which is then non-hermitian. The obtained eigenvalues from the subroutine zgeev are precise, but, the eigenvectors are not, when I compare the results using zgeev with the results obtained from Mathematica. I think the problem is that it is not guaranteed that, the obtained eigenvectors from zgeev are orthorgonal, though, I have no idea why that the results obtained from Mathematica are perfect, ie. The eigenvectors are orthornomal and complete. Should I impose further procedure after using zgeev, to make sure the eigenvectors are orthonormal?

Thanks in advance for any reply&comments.

CH.

0 Kudos
5 Replies
mecej4
Honored Contributor III
430 Views

Please present details, preferably using a short example, to support your claim. 

0 Kudos
Weng__Chi-Hung
Beginner
430 Views

for more explicitly, I am doing this as a check, it is a 3X3 matrix. and there is a complex number only at matrix(1,1)

matrix = {{ -6.75490294261523187*(10^-4) + (i *(-10^-3)), 1,                                          1    },
              {                                                                1, 0,                                          1    },
              {                                                                1, 1,  6.75490294261523187*(10^-4)  }}

The matrix is non-symmetric. therefore I call zgeev for solving this. and it yields the following eigenvalues(here I output the real part of it only):
   2.0000000273480896     
  -1.0003672906735881     
 -0.99963273667450081

However, in mathematica, it is (real part of the eigenvalue)
   2
  -1
  -1
I am wondering that maybe due to quasi-degeneracy, the eigenvalues are not precise enough (also the eigenvectors). Should I find ways to increase the precision or, try other subroutines for dealing degeneracy eigenvalues?

0 Kudos
mecej4
Honored Contributor III
430 Views

If you ran Mathematica on the 3 X 3 matrix that you gave above, you would not have obtained the eigenvalues as 2, -1 and -1. If the matrix that you gave Mathematica was the same matrix but with the diagonal elements replaced by zero, your comparison is not valid. Furthermore, your example does not agree with your original statement that "The obtained eigenvalues from the subroutine zgeev are precise".

Please make valid comparisons and report what you did accurately

0 Kudos
Weng__Chi-Hung
Beginner
430 Views

sorry for the wrong results...the real part of the eigenvalue was not what I had written here. I am new to mathematica.

I discovered that if I set
    N[Eigenvalues[mat],14]
in mathematica, it would yield the same eigenvalues as what I have got using fortran+zgeev
though, if I set
    N[ Eigenvalues[mat] ]
in mathematica then it is somehow different. therefore the precision of the eigenvalues seems not converged when I use fortran..?

also the left/right eigenvectors are always not in accordance...

0 Kudos
mecej4
Honored Contributor III
430 Views

Chi-Hung W. wrote:
also the left/right eigenvectors are always not in accordance
Again, a simple statement such as that is not enough to go on. Note also that if v is an eigenvector, so is cv, where c is a complex constant different from zero. Different packages may use different conventions for choosing the constant.

0 Kudos
Reply