matrix diagonalization