概述
算法
用迹求特征多项式的特点是计算量特别大,性能不高,为此Faddeev和Laverrier两人研究出了更好的求特征多项式的算法。这种算法是一种迭代法,通过创建一个矩阵系列
B
k
B_k
Bk来实现。初始定义
B
1
=
A
B_1=A
B1=A,然后按以下公式递推:
B
k
=
A
(
B
k
−
1
−
c
k
−
1
E
)
c
k
=
1
k
t
r
(
B
k
)
B_k=A(B_{k-1}-c_{k-1}E)\ c_k=frac1k tr(B_k)
Bk=A(Bk−1−ck−1E)ck=k1tr(Bk)
最终得到的特征多项式为:
Δ
A
(
λ
)
=
λ
n
−
c
1
λ
n
−
1
−
⋯
−
c
k
λ
n
−
k
−
⋯
−
c
n
Delta_A(lambda)=lambda^n-c_1lambda^{n-1}-cdots-c_klambda^{n-k}-cdots-c_n
ΔA(λ)=λn−c1λn−1−⋯−ckλn−k−⋯−cn
举个例子,以下矩阵:
A
=
(
2
−
4
1
2
3
−
2
1
5
5
)
B
1
=
(
2
−
4
1
2
3
−
2
1
5
5
)
c
1
=
10
B
2
=
(
−
23
25
5
−
12
−
39
6
7
−
14
−
34
)
c
2
=
−
48
B
3
=
(
105
0
0
0
105
0
0
0
105
)
c
3
=
105
∣
λ
E
−
A
∣
=
λ
3
−
10
λ
2
+
48
λ
−
105
A=begin{pmatrix}2 & -4 & 1\ 2 & 3 & -2\ 1 & 5 & 5\ end{pmatrix}\ B_1=begin{pmatrix}2 & -4 & 1\ 2 & 3 & -2\ 1 & 5 & 5\ end{pmatrix}\ c_1=10\ B_2 = begin{pmatrix}-23 & 25 & 5\ -12 & -39 & 6\ 7 & -14 & -34\ end{pmatrix}\ c_2=-48\ B_3=begin{pmatrix}105 & 0 & 0\ 0 & 105 & 0\ 0 & 0 & 105\ end{pmatrix}\ c_3=105\ |lambda E-A|=lambda^3 -10lambda^2+48lambda-105
A=
221−4351−25
B1=
221−4351−25
c1=10B2=
−23−12725−39−1456−34
c2=−48B3=
105000105000105
c3=105∣λE−A∣=λ3−10λ2+48λ−105
Python实现
算法比较简单,所以代码也相对较短。
def faddeev_laverrier(self):
n = len(self.__vectors)
b = []
c = []
b.append(self)
c.append(self.trace(1))
e = Matrix(Matrix.unit_matrix(n))
for i in range(1, n):
b_k = self * (b[i - 1] - e * c[i - 1])
print('b',i,'=', b_k.to_latex())
b.append(b_k)
c.append(1 / (i + 1) * b_k.trace(1))
return [1] + [-e for e in c]
最后
以上就是复杂未来为你收集整理的5.3 Faddeev-Leverrier算法求特征多项式算法Python实现的全部内容,希望文章能够帮你解决5.3 Faddeev-Leverrier算法求特征多项式算法Python实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复