I gather that you are looking to diagonalize your matrix using a similarity transform. One approach is to use the SingularValueDecomposition
function in Mathematica:
http://reference.wolfram.com/language/ref/SingularValueDecomposition.html
Analytically, since the eigenvalue problem requires solving a cubic, the expressions in the symbolic case will involve Root
expressions... they can be converted to analytical expressions using ToRadicals
.
However, assuming your parameters are real here is an equivalent approach. I am changing some of your notation to make things clear.
First define a function to generate your matrix in general:
mat[t_, w_, r_] := {{0, 0, w}, {0, t, -w}, {w, -w, r}}
You can find the symbolic expressions for the eigenvalues and eigenvectors using something like
Eigensystem[mat[t, w, r]]
and you can change the Root objects to algebraic expressions using, for example,
FullSimplify[
ToRadicals[Eigensystem[mat[t, w, r]]], {t \[Element] Reals,
w \[Element] Reals, r \[Element] Reals}]
However, to illustrate the diagonalizatoin process let's play with numerical values. Let's first create a random example of your matrix:
testMatrix = mat[Random[], Random[], Random[]]
Now generate the eigenvalues and eigenvectors for this matrix using
eigens=Eigensystem[testMatrix]
The similarity transform is the matrix of eigenvectors
pMatrix = eigens[[2]]
and you can see this by executing
pMatrix.testMatrix.ConjugateTranspose[pMatrix] // Chop
the Chop
is there to remove machine number leftovers.
This is also the same as
pMatrix.testMatrix.Inverse[pMatrix] // Chop
The same set of computations can (more generally) be done using SingularValueDecomposition
.
And I see that Ivan Morozov pointed you to JordanDecomposition
, which is, of course, a simpler path... ;-)