Re: Eigensystem applied to a unitary matrix crashes Mathematica 4.
- To: mathgroup at smc.vnet.net
- Subject: [mg21401] Re: Eigensystem applied to a unitary matrix crashes Mathematica 4.
- From: sidles at u.washington.edu (John A. Sidles)
- Date: Tue, 4 Jan 2000 02:12:33 -0500 (EST)
- Organization: University of Washington, Seattle
- References: <firstname.lastname@example.org> <email@example.com> <firstname.lastname@example.org> <email@example.com>
- Sender: owner-wri-mathgroup at wolfram.com
In article <84mb3i$h9f at smc.vnet.net>, Jos Bergervoet <bergervo at iaehv.iae.nl> wrote: >John A. Sidles <sidles at u.washington.edu> wrote: >> ... >> Eigensystem documentation might reasonably be revised to >> be a little more forthcoming about these behaviors, which >> ... > >Is this a problem only when the matrix is (near) degenerate? >Or, more precisely, if the eigenvalues are different by many >significant digits, can I be sure then that Eigensystem will >return orthogonal vectors? > >> over the years have taken so many users by surprise. > >And it is only to avoid any more surprises that I try to find >out what the exact behavior is. > >-- Jos > The following Eigensystem behaviors are legal, i.e., consistent with the Mathematica documentation. Which behaviors *actually* occur, I am less certain; I only know the ones that have been reported on this newsgroup! (1) Matrix non-degenerate (eigenvalues all different) Eigensystem should return eigenvalues that are the same on every call. But eigenvectors can vary call-to-call by an arbitrary complex coefficient. (2) Matrix degenerate (two or more eigenvalues identical to within numerical precision. Eigensystem should return eigenvalues that are the same on every call. But eigenvectors can vary call-to-call by an arbitrary complex coefficient, and in addition the eigenvectors corresponding to degenerate eigenvalues can "mix" by arbitrary amounts. (3) Matrix real and Hermitian with degenerate eigenvalues This is a special but extremely common case that often breaks quantum computation code -- as many scientific users of mathematica have found out the hard way!. Almost always, scientific users want and expect real orthonormal eigenvectors. And almost always, Eigensystem returns what the user expects. But about one time in 1000, Eigensystem will silently return complex non-orthonormal eigenvectors --- this behavior is completely legal! It is your responsibility to recognize this condition, and fix it via, e.g., Gram-Schmidt orthogonalization. Otherwise your Mathematica code will break! Mathematica helpers, I know you read this news group. What the fastest and most efficient way to implement a Gram-Schmidt fix for large eigensystems? I frequently work with 250x250 real symmetric matrices, and have never yet found an efficient Gram-Schmidt implementation within the Mathematica package.