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$$