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*: <831tqg$fmh@smc.vnet.net> <83ncc5$5ph$4@dragonfly.wolfram.com> <844cf2$jp2@smc.vnet.net> <84mb3i$h9f@smc.vnet.net>*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.