I am looking for algorithms that can perform a diagonalization, in a symbolic way, of a given matrix. I need to find a similarity transformation, if it exists. Desired features of the algorithms are: 1) Not using symbolic software like MATHEMATICA, MAPLE, etc. I need to program the algorithms in C++. 2) Not necessarily general. They may be limited to relatively simple cases, for example the case when eigenvalues of the matrix cannot be expressed analytically may not be covered, or they may be restricted to some simple class of expressions for the elements of the similarity matrix. 3) Described in scientific publications. I need references.
I would appreciate any pointers.