Re: Solving Eigenvalue Problems
- To: mathgroup at smc.vnet.net
- Subject: [mg17220] Re: Solving Eigenvalue Problems
- From: sidles at u.washington.edu (John A. Sidles)
- Date: Mon, 26 Apr 1999 01:20:52 -0400
- Organization: University of Washington, Seattle
- References: <7fp6c7$3e9@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Richard Bowman <rbowman at bridgewater.edu> wrote: >I am sure that I have seen packages or articles dealing >with the matrix diagonalization method of finding >eigenvalues and eigenvectors in quantum mechanics. I have >searched MathSource but have not located what we need. Any >help will be appreciated. The routine "Eigensystem[]" does what you want. But beware! You must read the Eigensystem[]'s documentation with the same scrupulous care that you bring to a presidential legal deposition. For example, if you pass Eigensystem[] a matrix that is real and symmetric, with one or more degenerate eigenvalues (which is a very common case in quantum mechanics), then the following statements are *all* true and legal: (1) It is always possible to choose eigenvectors that are real and orthonormal. (2) Eigensystem[] will almost always return real orthonormal eigenvectors. (3) But it is *legal* (i.e., fully consistent with the documentation) for Eigensystem[] to return eigenvectors that are either (a) non-orthonormal or (b) complex or (c) both. The only guaranteed property is linear independence. (4) Sporadically (about one time in a thousand), Mathematica will exercise this option, and return sets of complex, non-orthogonal eigenvectors. It is prudent to advise students of this feature, because if they write code which assumes real eigenvectors, it will sporadically break, and most students will have a very tough time figuring out why. At least in Mathematica 3.0, the behavior is sensitive to least-significant bits in the input matrix, so the simple fix is to test whether any of the returned eigenvectors are complex, and if so, randomly perturb some least- significant-bits of the input matrix, retaining the properties of reality and symmetry, and try again. This fix is admittedly not elegant, but it works. In fact, AFAIK this is the *only* ready fix -- there is no well-posed way to instruct Mathematica's GramSchmidt[] routine to turn complex eigenvectors into real ones. It seems kinda crazy, but I'll issue it as a challenge: can anyone give elegant code for reliably calculating in Mathematica the real, orthonormal eigenvectors of a real, symmetric matrix? Here "elegant" means five lines or less, and "reliable" means the built-in routines work as documented -- no more, no less. By the way, I think Mathematica is a great product, and you folks on the help staff are particularly great -- so what can we users do to persuade Wolfram Research to document its software better? Best wishes ... John Sidles PS: Hey, is this behavior of Eigensystem[] still present in Version 4.0? I know of several other physics researchers who have been "bit" by this -- we hope you can at least tell us that it's now mentioned in the Version 4.0 documentation.