MathGroup Archive 1999

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

Search the Archive

Re: Solving Eigenvalue Problems

  • To: mathgroup at smc.vnet.net
  • Subject: [mg17388] Re: Solving Eigenvalue Problems
  • From: sidles at u.washington.edu (John A. Sidles)
  • Date: Thu, 6 May 1999 02:44:09 -0400
  • Organization: University of Washington, Seattle
  • References: <7fp6c7$3e9@smc.vnet.net> <7g0rmk$dtd@smc.vnet.net> <7gbj5v$ku5@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <7gbj5v$ku5 at smc.vnet.net>,
Richard Bowman  <rbowman at bridgewater.edu> wrote:
>Thanks to Jens-Peer Kuska and others who responded to my question about
>matrix diagonalization of quantum mechanical problems in Mathematica.
>
>My problem was that my eyesight is not very good, but still I had no
>excuse for not finding Eigen...[] in the Mathematica 3.0 book the first time I
>looked. I did find it later. Now all I am wondering about is why the
>solutions go from the largest to the smallest eigenvalue. 

The answer is, the list of eigenvalues is usually returned
in sorted order, but this property is *not* guaranteed, and in
fact Eigensystem[] will sporadically return an unsorted list
of unnormalized eigenvectors.

To obtain reliable results, particularly for publication or
for use by students, you must program very carefully.

Here is a version of Eigensystem[] that *does* reliably return a
sorted list of normalized eigenvectors.  Caveat: the returned
eigenvectors are *not* guaranteed to be orthogonal, even when
the input matrix is Hermitian.  Further processing is needed to
ensure orthogonality, as discussed earlier in this thread.

SortedEigensystem[m_] :=
Block[{eValues,n},
  eValues = Eigensystem[m];
  n=Length[m];
  Do[PrependTo[eValues[[2,i]],eValues[[1,i]]],{i,1,n}];
  {
    Sort[eValues[[1]]],
    Map[(#/Sqrt[Re[#.Conjugate[#]]])&,
      Map[Rest[#]&, Sort[eValues[[2]], OrderedQ[{#1[[1]],#2[[1]]}]&]]]
  }
]

Obviously, it would be better for Mathematica users if Eigensystem[] 
had documented options like Integrate[], e.g.

  Eigensystem[matrix,
      Assumptions->{Real,Hermitian},
      Options->{Sorted,Normalized,Orthogonal}]

In the case above, Eigensystem[] would coerce the input matrix
to be of the form specified by the list of Assumptions (e.g,
real and Hermitian in the case above), and then return a list
of eigenvalues and eigenvectors with the properties specified
by the list of Options.  Such a package would be much more
useful and reliable than the present Eigensystem[] package.

Maybe some student out there in Mathematica user-land would be 
willing to write, document, and validate such a package?
This would make a great undergraduate project!



  • Prev by Date: Re: Product of transpositions
  • Next by Date: Request
  • Previous by thread: Re: Bi-directional MathLink to Fortran
  • Next by thread: Request