In this thread on MATLAB Central, I found a discussion on finding the nearest matrix with real eigenvalues. The first hypothesis was to simply truncate the complex part of the eigenvalues. So, given matrix $A$, the closest matrix to $A$ in some norm would be

$$A' = V \; \mathrm{real}(D)\; V^{-1}$$

where $A= V D V^{-1}$ is the eigendecomposition of $A$ (assuming $A$ is diagonalizable). This has been found to be false, however, with the counterexample

$$A = \begin{bmatrix} 1& 1& 0 \\ -1& 0& 0 \\ 0& 0& 0 \\ \end{bmatrix}$$

The procedure above would produce

$$A'=\begin{bmatrix} 0.5& 0& 0 \\ 0& 0.5& 0 \\ 0& 0& 0 \\ \end{bmatrix}$$

but there is another matrix

$$A''=\begin{bmatrix} 0.9& 0& 0 \\ -2& -0.1& 0 \\ 0& 0& 0 \\ \end{bmatrix}$$

that has real eigenvalues and is closest to $A$ both in spectral and Frobenius norm.

Now, let $ A = U T U' $ be the real Schur decomposition of $A$, with $U$ orthogonal and $T$ quasi-upper triangular (there are 2-by-2 blocks on the diagonal corresponding to complex eigenvalues). Consider $ A_s = U \; \mathrm{triu}(T) \; U' $ where triu returns the upper triangle part. By numerical simulations $A_s$ it is always closer to random $A$ than $A'$ and on the counterexample it is also closest to $A$ than $A''$ (in Frobenius and spectral norm).

My conjecture is that $A_s$ is the closest matrix with real eigenvalues to $A$ in Frobenius (or spectral) norm. Unfortunately I could not prove or disprove this conjecture. Can anybody?

A starting point can be

$$||A-A_s||_F = ||T-\mathrm{triu}(T)||_F$$