根据定理:两个同级复数矩阵相似的充分必要条件是:它们有相同的初等因子。
计算出两个矩阵的初等因子,比较一下就知道它们是否相似了。
在Mma中没找到计算初等因子的函数,但有Jordan分解函数,借助它写一个计算初等因子的函数,如下:
(*定义函数:计算矩阵初等因子*)
(*输入方阵,返回初等因子列表,每个初等因子(x-x0)^n表示为:{x0,n}*)
cdyz[m_] :=
Module[{r = Length[m], list = {}, n = 1,
j = JordanDecomposition[m][[2]]},
Do[
If[j[[k, k + 1]] == 1, n++,
AppendTo[list, {j[[k, k]], n}];
n = 1;
];
, {k, r - 1}];
Sort@AppendTo[list, {j[[r, r]], n}]]
(*输入矩阵*)
a = ToExpression[StringSplit[#, " "] & /@ StringSplit["1 0 0 0 0
0 1 1 0 0
0 0 1 0 0
0 0 0 1 1
0 0 0 0 1", "\n"]];
b = ToExpression[StringSplit[#, " "] & /@ StringSplit["1 0 0 0 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 0
0 0 0 0 1", "\n"]];
(*计算两矩阵的初等因子*)
cdyz[a]
cdyz[b]
(*初等因子不相等,所以矩阵a与b不相似*)
这个搞复杂了,Jordan标准型相同即可(相似矩阵的Jordan标准型的顺序无所谓,但Mma生成的Jordan标准型不知道是什么顺序),下面是“Lozmlve*永”给出的代码
SimilarQ[a_,b_]:=Equal@@Last@*JordanDecomposition/@{a,b}