当前位置:文档之家› 用QR算法求矩阵的特征值

用QR算法求矩阵的特征值

一、实验名称:用QR 算法求矩阵的特征值
二、实验目的:1、通过实验进一步熟悉掌握求矩阵特征值的QR 方法及原理。

2、理解QR 方法的计算流程。

3、能够编程实现QR 方法。

三、实验内容:给定矩阵 ⎪⎪⎪

⎫ ⎝⎛=111132126A , ⎪⎪
⎪⎪⎪
⎪⎭


⎛=0100098
20
087630
7654465432H ,采用QR 方法计算A 和H 矩阵的全部特征值。

四、实验要求:
(1) 根据QR 算法原理编写程序求矩阵A 及矩阵H 的全部特征值(要求误差<10
5
-)。

(2) 直接用MATLAB 的内部函数eig 求矩阵A 及矩阵H 的全部特征值,并与(1)的结果比较。

五、QR 方法计算矩阵特征值的程序: function
[namda,time,data_na]=qr_tz(A,tol) if nargin==1; tol=1e-5; end wucha=1; time=0;
while (wucha>tol)&(time<500) [q,r]=qr(A); A1=r*q; tz0=diag(A1); tz1=diag(A); wucha=norm(tz0-tz1);
A=A1; time=time+1; data_na(time,:)=tz1; end namda=tz1; disp(‘特征值为’) namda
disp(‘第一个特征在值’) time
n1=length(data_na); n2=(1:n1)’; temp1=[n2,data_na]; subplot(2,2,1:2)
plot(date_na(:,1))
title(‘迭代次数为’) grid
subplot(2,2,3)
plot(data-na(:,2))
title(‘第二个特征值’)grid
subplot(2,2,4)
plot(data-na(:,3))
title(‘第三个特征值’) grid
六、实验结果:
>> A=[6,2,1;2,3,1;1,1,1];[namda,time,data_na]=qr_tz(A,1e-5);特征值为
namda =
迭代次数为
time =
6
图 1
>> A=[6,2,1;2,3,1;1,1,1];[V,D]=eig(A,'nobalance'), V =
D =
0 0
0 0
0 0
>>
A=[2,3,4,5,6;4,4,5,6,7;0,3,6,7,8;0,0,2,8,9;0,0,0,1,0];[namda,time,data_na]=qr_t z(A,1e-5);
特征值为
namda =
迭代次数为
time =
22
图 2
>>
A=[2,3,4,5,6;4,4,5,6,7;0,3,6,7,8;0,0,2,8,9;0,0,0,1,0];[V,D]=eig(A,'nobalance'), V =
D =
0 0 0 0
0 0
0 0 0
0 0 0
0 0
0 0
表1 用两种方法求得矩阵A的全部特征值
表2 用两种方法求得矩阵H的全部特征值
七、实验结果分析:
从图1和图2中可以看出在迭代前几次可能会有一些波动,但逐渐趋于平稳,并且收敛速度快,算法稳定。

从表1和表2可以看出直接用MATLAB的内部函数eig求矩阵A及矩阵H的全部特征值与QR方法的结果进行比较时其特征值相差不大。

虽然用MATLAB内部函数eig直接求出矩阵的特征值的方法比较快,但是其计算结果和用QR方法相比存在一定的误差,即没有用QR 方法求得精确值高和特征值全。

相关主题