diagonalizing Hermitian matrices with complex values
Hello,
I am writing to ask what is the best or the appropriate way to diagonalize a complex Hermitian matrix in Igor. I am using MatrixEigenV/SYM/EVEC but I wonder if SYM is actually applicable here. Of course, a real Hermitian matrix is symmetric, but a complex one is not. The problem I encounter with these options is that the eigenvectors are occasionally not in order, that is, they don’t seem to correspond one-to-one to the eigenvalues. I would also like to confirm that the eigenvectors are normalized (even though they do appear to be so; are there cases when this is not true?). Finally, I am somewhat confused about the purpose of the /C flag in this case.
Thank you for your consideration, I look forward to your responses.
If you consult LAPACK documentation you can find that one of the recommended functions for this task is zheevr(). Igor uses this function for DP complex data if you use MatrixEigenV/SYM/EVEC.
Here is an example:
Execute the operation:
Extract the eigenvectors from the matrix:
Verify Orthonormality:
I confess that I do not know much about the internals of the LAPACK zheevr() but as you can see above, you can use MatrixOP to verify that the results make sense.
Note that these eigenvectors are not expected to be unique.
AG
August 14, 2026 at 02:46 pm - Permalink
What do you mean ? I have never seen any such problem. (except, I can of course expect that degenerated eigenvalues might be a bit different and disordered because of rounding errors). Can you provide an example ?
August 19, 2026 at 06:57 am - Permalink