# Finding the similarity transformation between two matrices

I have difficulty in finding the transformation matrix of two similar matrices.

It is known that matrix $$A=\left(\begin{array}{ccc} -2 & -2 & 1 \\ 2 & x & -2 \\ 0 & 0 & -2 \end{array}\right)$$ is similar to matrix $$B=\left(\begin{array}{lll} 2 & 1 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & y \end{array}\right)$$.

I found the specific values of $$x$$ and $$y$$ by using the following method:

Aλ = λ*
IdentityMatrix[3] - {{-2, -2, 1}, {2, x, -2}, {0, 0, -2}};
Bλ = λ*
IdentityMatrix[3] - {{2, 1, 0}, {0, -1, 0}, {0, 0, y}};
ControlPCSSmithForm[Aλ, λ]
ControlPCSSmithForm[Bλ, λ]
SolveAlways[-(λ + 2) (-λ^2 -
2 λ + λ x + 2 x - 4) == (λ -
2) (λ + 1) (-(y - λ)), λ]


When I want to find an invertible matrix P such that $$P^{-1}AP=B$$, I have a problem:

eqs = Thread[
Flatten[Inverse[{{x11, x12, x13}, {x21, x22, x23}, {x31, x32,
x33}}].({{-2, -2, 1}, {2, x, -2}, {0, 0, -2}} /.
x -> 3).{{x11, x12, x13}, {x21, x22, x23}, {x31, x32,
x33}}] ==
Flatten[{{2, 1, 0}, {0, -1, 0}, {0, 0, y}} /. y -> -2]];
FindInstance[eqs, {x11, x12, x13, x21, x22, x23, x31, x32,
x33}, Reals]


The above code has been running, unable to return the results, what is a good way to find this matrix $$P$$?

Your specific example can be solve with a general $$P$$, see code below.

(*Data*)
A = {{-2, -2, 1}, {2, x, -2}, {0, 0, -2}};
B = {{2, 1, 0}, {0, -1, 0}, {0, 0, y}};

(*Search for x and y based on characteristic polynomial*)
n = Length@A;
Id = IdentityMatrix@n;
solxy = SolveAlways[Det[A - l*Id] == Det[B - l*Id], l]

(*Update data*)
A = A /. solxy[[1]];
B = B /. solxy[[1]];

(*Solve for general P*)
P = Array[p, {n, n}];
solP = Solve[P.B == A.P, Flatten@P];
P = P /. solP[[1]]

(*Check*)
B == [email protected] // Simplify


You can then enter some values for the free components of $$P$$.

The purely linear algebraic way to do this is to reduce both matrices to Jordan form:

{sa, ja} = JordanDecomposition[{{-2, -2, 1}, {2, x, -2}, {0, 0, -2}}];
{sb, jb} = JordanDecomposition[{{2, 1, 0}, {0, -1, 0}, {0, 0, y}}];


Inspecting both ja and jb shows that they are both diagonal, so we can proceed:

Diagonal[ja]
{-2, 1/2 (-2 + x - Sqrt[-12 + 4 x + x^2]), 1/2 (-2 + x + Sqrt[-12 + 4 x + x^2])}

Diagonal[jb]
{-1, 2, y}


A moment's consideration leads us to letting y == -2. To try finding x, we try equating one of ja's unknown eigenvalues to one of jb's:

Solve[1/2 (-2 + x - Sqrt[-12 + 4 x + x^2]) == -1, x]
{{x -> 3}}


(Exercise: look at what happens if you take all corresponding pairs of eigenvalues between ja and jb, and equate them.)

Thus, we can assemble the similarity transformation as:

pa = (sa /. x -> 3).Inverse[sb[[All, {3, 1, 2}]]]
{{-1/2, -13/6, -1/4}, {1, 4/3, 1/2}, {0, 0, 1}}


(Exercise: derive the expression I used for the similarity transformation)

Check:

Inverse[pa].({{-2, -2, 1}, {2, x, -2}, {0, 0, -2}} /. x -> 3).pa -
({{2, 1, 0}, {0, -1, 0}, {0, 0, y}} /. y -> -2)
{{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}