加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

数值分析:QR方法求矩阵特征值和特征向量

(2010-07-08 20:28:06)
标签:

杂谈

分类: 生活。我

 

.实验代码:  

function [H,B]=Hessenberg(A)

n=length(A);

B=eye(n);

for k=1:n-2

    X=zeros(n-k,1);

    H=eye(n);

    for i=1:n-k

        X(i)=A(i+k,k);

    end

    a=max(abs(X));

    if a==0.0

        break

    end

    X=X/a;c=X(1);

    b1=sqrt(sum(X.^2));

    if X(1)>=0

        b1=-b1;

end

 X(1)=X(1)-b1;

    b=b1^2-b1*c;

    H0=eye(n-k)-X*X'/b;

 

for i=1:n-k

        for j=1:n-k

            H(i+k,j+k)=H0(i,j);

        end    end

    A=H*A*H;

    B=B*H;end

H=A;

一.     实验题目:

            QR 方法求矩阵的特征和特征向量

.设计目的:

            学会利用镜面变换进行矩阵的QR分解及利用将幂法求                      特征值和特征向量,熟悉Matlab编程环境。

 

.设计原理:

   利用镜像变换将A相似变换为Hessenberg B矩阵。记录变换矩阵。        

运用Householder矩阵进行QR分解,QR方法为:

B1=B

B1=Q1R1

B2=R1Q1

..

.

.

Bm=QmRm

 

 

Bm+1=RmQm

Bm+1Bm相似,从而特征值相等。

再利用原点位移的反幂法求B(或A)的特征向量。

 

反幂法用来计算矩阵按模最小的特征值及其特征向量,也可用来计算对应与一个给定近似特征值的特征向量。
ARn×n 为非奇异矩阵,A的特征值依次记为
         1 |≥|λ2 |≥|λ3 |≥…≥|λn |,
相应的特征向量为x1 ,x2 ,…,xn , A-1 的特征值为
 |1/λn |≥|1/λn-1 |≥…≥|1/λ1 | ,
相应的特征向量为xn ,x n-1 ,…,x1 . 所以计算A的按模最小的特征值λn的问题就是计算A-1 的按模最大的特征值问题。
对于A-1 应用幂法迭代(称为反幂法),可求得矩阵A-1 的主特征值1/λn ,从而求得A的按模最小的特征值λn
   
反幂法迭代公式
任取初始向量ν00 ≠0,构造向量序列
          (2.10)
 
迭代向量νk 可以通过解方程组 kk-1 求得.
在反幂法中也可以用原点平移法来加速迭代过程或求其他特征值及特征向量。

 

如果矩阵(A-pI)-1 存在, 对其应用幂法,得反幂法的迭代公式
             

反幂法迭代公式中的νk 是通过解方程组
                 (A - pI)νk = μk-1 
求得的。为节省工作量,可先将A - pI进行三角分解 
                  (A - pI) = LU ,
其中P为某个排列阵,于是求νk 相当于解两个三角形方程组
                (2.12)
 
实验表明,按下述方法选择μ0 较好:选μ0 使
                1 = L-1 μ0 = (1,1,…,1)T 
用回代求解(2.12)即得ν1 ,然后再按公式(2.11)进行迭代。迭代公式:1. 分解计算 (A - pI) = LU , 且保存L,U信息。
      2.
反幂法迭代
     (1)
1 =(1,1,…,1)T ν1 
        μ11 / (ν1 )r
     (2) k=2,3,…
      a)
Lykk-1 ,求得yk

        

  k = yk ,求得νk
      b) μkk /(νk)r 

 

          步骤与实现:

1)利用镜像变换将A相似变换为Hessenberg B矩阵。记录变换矩阵

     2)利用QR方法求矩阵B的特征值。

     3)利用原点位移的反幂法求B(或A)的特征向量 

 

.心得体会:

 

通过多天课程设计实验,让我了解到自己对数值分析及MATLAB的掌握还很肤浅,了解到了自己的不足,同时意识到自己知识点薄弱的地方,还有对知识的理解有偏差。有的知识点理解的不透彻,自己可以动手做题,但编程实现还需要一定的编程语言知识以及数学知识和机器语言之间的转换。当然也体会到了与同伴合作的愉悦,互相学习,相互取长补短,以及相互进步。

通过这次课程设计,让我学会了很多,首先我要声明这次的课程设计一部分程序实现部分是我自己做的,另外一些是借鉴实验指导书上的程序,但是却让我进一步的理解了这个问题对应的算法,利用QR算法求矩阵特征值及特征向量, 利用镜像变换将A相似变换为Hessenberg B矩阵, 利用QR方法求矩阵B的特征值, 利用原点位移的反幂法求B(或A)的特征向量。

这次课程设计中还存在很多的缺点。我们不能很好的利用已有的知识来解决,这是需要我们改进的地方。

这次的课程设计也让我懂得了一个道理,那就是一个人要想把事做好要一心一意的去做,特别是对于数学方面的知识,一不小心就会把题目理解错,数学是一门逻辑思维很强的学科,因此就更加的要认真细心。所以这次的课程设计不仅锻炼了我的逻辑思维能力也让我做事变的更加认真。有时自己学到的知识只是很少的一部分,重要的在于怎么利用自己已学的知识解决未知的问题。每个复杂的问题都可以提炼出主要的因素,忽略次要因素,更好的用数学知识来解决。

对于该问题,还有一个设想,但此次课程设计由于种种原因没能实现。要结合实际情况,对于给定的矩阵,选择合适的做法,最后衷心的感谢我们的张红芹老师和团队成员,由于张老师的指导意见和我们团队的齐心协力,使我们的合作使此次课程设计顺利完成。   

 

.参考书:

[1]数值分析教程。主编林成森 科学出版社

[2] 数值代数  主编 张凯院 徐仲  科学出版社

[3]数值分析实验指导书。主编张红芹 高来斌

[4]MATLAB程序设计教程。主编刘卫国,中国水利出版社

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有