我是靠谱客的博主 复杂未来,这篇文章主要介绍5.3 Faddeev-Leverrier算法求特征多项式算法Python实现,现在分享给大家,希望可以做个参考。

算法

  用迹求特征多项式的特点是计算量特别大,性能不高,为此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(Bk1ck1E)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(λ)=λnc1λn1ckλnkcn
  举个例子,以下矩阵:
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= 221435125 B1= 221435125 c1=10B2= 231272539145634 c2=48B3= 105000105000105 c3=105λEA=λ310λ2+48λ105

Python实现

  算法比较简单,所以代码也相对较短。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部