第三十四篇 特征多项式法求对称三对角矩阵的特征值

特征多项式

在之前的篇章中介绍过的,一个矩阵的特征值可以形成一个n阶多项式的根,称为“特征多项式”。线性方程的求解方法可以用来求这些根,详情可以翻看我之前写过的文章。但这并不是一个有效方法。还有一些更有效的方法是基于特征多项式的性质,当要求解特征值的矩阵是一个三对角矩阵时,使用这种性质可以很容易求出特征值。因此这种方法与前面描述的Householder法转换成三对角矩阵或Lanczos法转换成三对角矩阵变换结合使用非常方便。

计算三对角矩阵的行列式值

在上一篇中,已经介绍过将矩阵转化为三对角等价的非迭代方法。得到n × n系统的特征值方程为

因此,这个问题就成了求行列式方程的根的问题

虽然我们不能直接找到这些根,但想一下上面方程左边行列式的计算
对于 n = 1

对于 n = 2

对于n = 3

可以看出一个递归关系,使det3(λ)可以简单地从det2(λ)和det1(λ)的值来评估。如果使det0(λ) = 1,一般的递归式可以写成下面这样。

因此,对于任何λ值,都可以很快计算λ,并且如果知道根λ = 0的范围,它的值可以通过二分法来计算。难点是把λ代入方程确保它是一个根。由于第二个方程的“主次方程”所具有的一个特殊性质,即“Sturm序列”性质,使得这个问题变得容易得多。

Sturm序列性质

对于n = 5,第二个方程左边的例子如下:

|a |的主余子式是虚线勾勒出的子矩阵的行列式,即消去[A]的第n行、(n−1)行得到。[A]的λ值和它的余子式的λ值在下面给出。

从上面的推导中得到,它们的根,也就是它们的特征值。从上表可以看出,[A]n, [A]n−1,[A]n−2等的每一个后续的特征值集合总是从前一个集合插值出来的,即[Ai−1]的特征值总是出现在[Ai]的特征值之间的间隙中。对于所有对称[A],这种分离性质被发现,称为“Sturm序列”性质。
它最有用的结论是,对于任何猜测的λ, i = 0,1,2,···,n时,deti(λ)符号变化的次数等于比λ值小[A]的的特征值数量。当计数符号变化时,应该设置det0(λ) = 1,并规定deti(λ) = 0不算作变化。
对于上面所示的具体例子,假设λ = 4,计算deti(4), i = 0,1,2,···,5,得出表格

从det0(4) = 1.0开始,沿表向下移动,我们看到5个符号变化,因此有5个特征值小于4。
现在让我们试试λ = 3.5。在本例中,表格是


我们只看到4个符号变化,因此有4个小于3。5的特征值。这两个结果表明,最大特征值在3.5 <λ< 4范围内。下表总结了λ值的选择结果。

程序如下:
本程序使用之前的文章中得出的三对角矩阵,其中有一个主程序和检查收敛的子程序check

#LR转化求特征值
import numpy as np
import B
n=5;j=1;al=2.5;almax=5.0;tol=1e-5;limit=100
det=np.zeros(n+1)
alpha=np.array([2.0,2.0,2.0,2.0,2.0])
beta=np.array([-1.0,-1.0,-1.0,-1.0])
print('主对角线项',alpha)
print('非主对角线项',beta)
print('需要的特征值,1=最大,2=第二大...',j)
print('特征值   行列式的值    少于此值的根的数量')
iters=0;det[n]=1.0;aold=almax
while(True):iters=iters+1det[0]=alpha[0]-alfor i in range(2,n+1):det[i-1]=(alpha[i-1]-al)*det[i-2]-beta[i-2]*beta[i-2]*det[i-3]number=0for i in range(1,n+1):if abs(det[i-1])<1.0e-20:continueif abs(det[i-2])<1.0e-20:sign=det[i-1]*det[i-3]else:sign=det[i-1]*det[i-2]if sign<1.0e-20:number=number+1if number<=n-j:oldl=al;al=0.5*(al+almax)else:almax=al;al=0.5*(oldl+al)if det[n-1]<1.0e-20:number=number-1if j%2==0:number=number-1print('{:13.4e}'.format(al),end='')print('{:13.4e}'.format(det[n-1]),end='    ')print(number)if B.check(al,aold,tol) or iters==limit:breakaold=al
print('迭代到收敛次数',iters)
check
def check(x1,x0,tol):check=not abs(x1-x0)/abs(x0)>tolreturn check

终端输出结果如下

可知,得到的最大特征值为3.7321。

特征多项式法(characteristic polynomial )求特征值(结合lanczos和householder)(python,数值积分)相关推荐

  1. 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一

    题目内容: 对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值.对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推.这个整数在第n位上的数字记作x,如果x和n的奇偶性相 ...

  2. 线性代数:如何求特征值和特征向量?

    一.特征值和特征向量的定义 1 首先让我们来了解一下特征值和特征向量的定义,如下: 2 特征子空间基本定义,如下: END 二.特征多项式 1 特征多项式的定义,如下: 2 推论:n阶方阵A可逆的充要 ...

  3. C语言使用QR(正交三角)求特征值eigen values(附完整源码)

    使用QR正交三角求特征值 QR正交三角头文件qr_decompose.h 使用QR(正交三角)求特征值eigen values的完整源码(定义,实现,main函数测试) QR正交三角头文件qr_dec ...

  4. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法

    C语言实现数值分析中带双步位移的QR分解求特征值算法. 数 值 分 析(B) 大 作 业(二) 1.算法设计: ①矩阵的拟上三角化: 对实矩阵A进行相似变换化为拟上三角矩阵A(n 1),其变换矩阵采用 ...

  5. 如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量

    利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了 ...

  6. matlab输出的特征向量,关于matlab中的eig函数(求特征值和特征向量)(最新整理)

    <关于matlab中的eig函数(求特征值和特征向量)(最新整理)>由会员分享,可在线阅读,更多相关<关于matlab中的eig函数(求特征值和特征向量)(最新整理)(3页珍藏版)& ...

  7. python求特征值以及特征向量,并且输出最小特征值对应的特征向量

    我们输入一个对角阵 import numpy as np A=np.diag((1,2,3)) #求矩阵特征值以及特征向量 eig_value,eig_vector=np.linalg.eig(rel ...

  8. matlab中求矩阵A的特征向量,matlab层次分析法求特征值及特征向量.doc

    层次分析法 题目:用方根法求解矩阵A=的最大特征值及其对应的特征向量并将特征向量归一化,对A进行一致性检验. 实验平台:MATLAB R2007a 问题描述:用方根法求解矩阵A 的最大特征值及其特征向 ...

  9. matlab分析雅克比矩阵,科学网—数值分析---雅克比求特征值matlab程序 - 殷春武的博文...

    %%%程序编写者  西北工业大学自动化学院    Email: yincwxa2013@mail.nwpu.edu.cn %%  All rights reserved %雅克比求特征值 clear ...

  10. python求向量函数的雅可比矩阵_在python Numpy中求向量和矩阵的范数实例

    np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=np.linalg.norm(x, ord=None, ...

最新文章

  1. Android媒体相关开发应用程序接口
  2. golang rune类型简介
  3. JSP关于Frameset的简单用法
  4. boost::function_types::result_type用法的测试程序
  5. 设计模式之二:工厂模式
  6. spring 启动进度_在Web浏览器中显示Spring应用程序启动的进度
  7. 通过串口来控制网管型交换机的操作步骤详解
  8. Winfrom窗体应用程序___DataGridView
  9. markdown 提示文本_【文本编辑01】MarkdownPad安装及基本配置
  10. POJ NOI0101-08 字符三角形
  11. 自学python需要安装什么-Python自学之环境安装
  12. android6.0原生brower_android原生browser分析(二)--界面篇
  13. mysql存储过程详解以及PHP调用MYSQL存储过程实例
  14. 2010第六届中国移动互联网TOP50
  15. esp32语音播放天气预报
  16. android面试之怎么把图片变成圆形
  17. android scheme 配置多个,Android Scheme URL 使用方法
  18. mysql严格区分大小写吗_MySQL是否区分大小写
  19. 中国10大经典徒步线路(资深徒步专家@行摄匆匆推荐)
  20. Harfbuzz version too old (1.2.1)

热门文章

  1. (十五)使用任务通知实现命令行解释器
  2. Python基础(二)
  3. vue-manage-system : Vue2 后台管理系统解决方案
  4. Global land use changes are four times greater than previously estimated
  5. 2022年最新广播电视广告报价(共23份)
  6. macbook linux 双系统,MAC Ubuntu双系统方案
  7. R语言教程:什么是R语言,以及如何安装
  8. 淘宝API接口(item_search_img-按图搜索淘宝商品)(拍立淘)
  9. 用计算机数字技术制作的电影是,计算机数字技术为电影带来的空前发展.doc
  10. 300篇原创文背后的故事