MathGroup Archive 1998

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Eigenvectors of a Complex Hermitian Matrix

  • To: mathgroup at
  • Subject: [mg13607] Re: Eigenvectors of a Complex Hermitian Matrix
  • From: sidles at (John Sidles)
  • Date: Fri, 7 Aug 1998 03:08:10 -0400
  • Organization: University of Washington, Seattle
  • References: <002101bdbca6$e2a37c80$> <6pui5e$>
  • Sender: owner-wri-mathgroup at

In article <6pui5e$6s3 at>,
Gerhard J. Theurich <theurich at> wrote:
>That's actually where the problem came from. I am currently writting on
>a program that needs to diagonalize some matrices and I am using
>Eispack to do it. Eispack returns the correct unitary transform but out
>of curiosity I checked with Mathematica and got strange results. Now I
>was wondering what I did wrong. 

There are a lot of things that can go wrong, but there is one
undocumented "feature" of the Mathematica routine "EigenSystem[]" that
you need to check for.  

Namely, if an input matrix is real, symmetric, and nonsingular, the
Eigensystem[] will *usually* return real eigenvectors and real
eigenvalues.  But don't count on it! Sporadically,  about one time in
500, Eigensystem[] will return complex  eigenvectors. If you don't
anticipate this behavior, it will mess up your unitary transforms.

This behavior only occurs when two eigenvalues are degenerate, as is
typically the case when a physical system has an underlying symmetry.
The easiest fix seems to be:

(1) check to see if the returned eigenvectors are complex.

(2) if they *are* complex, then follow one of two fixes

    (a) take linear combinations of the degenerate complex eigenvectors
        to construct the desired real eigenvectors (this is always 
        possible, but it is computationally awkward)

    (b) slightly perturb the input matrix by an amount comparable
        to machine precision. Empirically, this will yield real
        eigenvectors in almost all cases -- giving the same result
        as strategy (a) but with much less programming.

I have discussed this behavior with the moderators of this group, they
have agreed that it occurs and have reproduced it on various machines. 
Furthermore, we all agreed that it is *not* an error, and does not need
to be fixed -- it is easy to guard against once you know that it can
occur, and after all, complex eigenvectors *are*  mathematically proper
eigenvectors of real symmetric matrices, even  if you are not expecting

Dr. Lichtblau, what's the story -- did this behavior ever get 
documented on the Mathematica help pages?

  • Prev by Date: Precision & InputForm perils
  • Next by Date: Re: Mandelbrot
  • Previous by thread: Re: Eigenvectors of a Complex Hermitian Matrix
  • Next by thread: Memory Management