Matrix diagonalisation