I do not very understand your purpose of diagonalizing matrix. If your demand is to reduce amount of calculation for solving equation or doing some matrix multiplication, you probably could use those solver function directly.
Well if you really want to diagonalize matrix A, it must satisfy P-1AP= dia(A), that means A*P=P*dia(A), that A=P*dia(A)*P-1. If P is orthogonal matrix, then P-1 =PT , which means A=P dia(A) PT. That means you could use some LAPACK function to reduce symmetric/non-symmetric matrix to diagonal matrix, however this kind of problem still belongs to eigenvalue problem which means the implementation for solving this problem still calculated eigenvalues/eigenvectors inside of the kernel.
thanks for your reply. The point is that I care about the order of the eigenvalues. To each row of the original matrix A there belongs one eigenvalue in the matrix diag(A). But since the eigenvalues are ordered in an ascending way, I cannot find out, which eigenvalue belongs to the row. Does the transformation matrix P also contain the permutation to transform in the space, where the eigenvalues are ordered in an ascending way?