MATLAB: Matrix similarity transformations introduce small imaginary eigenvalue components

MATLABnumerical linear algebra

So I'm having an issue with numerical precision. To boil my problem down…
Let A = eye(3) + 1e-6*rand(3) (1)
and let eig(A) return all real eigenvalues (empirically, this happens about 80% the time when I run (1)). I then apply a unitary similarity transformation, B = QAQ*. Now, eig(B) has a small imaginary component, which is a problem for my application.
Is it preferable to symmetrize A prior to the similarity transformation, or to symmetrize B after the similarity transformation…?
I'm not familiar with any theorems that relate the real part of a matrix's eigenvalues to the eigenvalues of its symmetrized form.
Any thoughts?
Thanks!

Best Answer

If you know the matrix A is supposed to be symmetric, I'd say symmetrize A, and then symmetrize B again, because Q*A*Q' will introduce a small numerical error and not be exactly symmetrical.
Although if you can directly transform the eigenvalues as David suggest, that would probably be best. It depends on whether the matrix A is meant to be symmetric, I'd say.