《(最新整理)Matlab实现隐式QR方法求解矩阵特征值特征向量》由会员分享,可在线阅读,更多相关《(最新整理)Matlab实现隐式QR方法求解矩阵特征值特征向量(5页珍藏版)》请在人人文库网上搜索。
1、完整)Matlab实现隐式QR方法求解矩阵特征值特征向量(完整)Matlab实现隐式QR方法求解矩阵特征值特征向量编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)Matlab实现隐式QR方法求解矩阵特征值特征向量)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)Matlab实现隐式QR方法求解矩阵特征值特征向。
2、量的全部内容。以下为4个matlab子程序和一个主程序:实现了用隐式QR方法求方阵的特征值及特征向量实质上是将一个矩阵Hessenberg化,其中要用到Householder变换,然后使用QR迭代得到特征值最后用反幂法求解特征向量。子程序1:function v,b=house(x)%householder变换H:满足H=Ibvv且Hx只有第一个分量非零n=length(x);e=norm(x,inf);x=x/e;s=x(2:n)*x(2:n);v=zeros(n,1);v(2:n)=x(2:n);if s=0b=0;elsea=sqrt(x(1)2+s);if x(1)=0v(1)=x(1。
3、)a;elsev(1)=s/(x(1)+a);endb=2v(1)2/(s+v(1)2);v=v/v(1);end子程序2:function A,d=Hessen(A)将A上Hessenberg化,次对角线以下用来存储Householder变换%次对角线及以上用来存A的上Hessenberg化n=length(A);d=zeros(n-1,1);for k=1:n2v,beta=house(A(k+1:n,k));A(k+1:n,k:n)=A(k+1:n,k:n)-(betav)(v*A(k+1:n,k:n));A(1:n,k+1:n)=A(1:n,k+1:n)(A(1:n,k+1:n)v)*。
4、(betav);A(k+2:n,k)=v(2:nk);d(k)=beta;end子程序3:function v=ipow(A,t)%反幂法计算对应于A的特征值为t的特征向量vn=length(A);L,U,P=lu(A-teye(n));v=ones(n,1);for i=2:nv(i)=v(i)-L(i,1:i1)v(1:i-1);endv(n)=v(n)/U(n,n);for i=n1:-1:1v(i)=v(i)-U(i,i+1:n)v(i+1:n);v(i)=v(i)/U(i,i);endv=v/norm(v);子程序4:function H=QR2shift(H)%双重步位移的QR方法。
5、,输入H并返回其一次双重步位移迭代后的矩阵%调用格式:循环H=QR2shift(H)n=length(H); m=n1; s=H(m,m)+H(n,n); t=H(m,m)H(n,n)-H(m,n)*H(n,m); x=H(1,1)*H(1,1)+H(1,2)*H(2,1)-s*H(1,1)+t; y=H(2,1)(H(1,1)+H(2,2)s); z=H(2,1)H(3,2); for k=0:n-3 v,b=house(x,y,z);q=max(1,k);H(k+1:k+3,q:n)=H(k+1:k+3,q:n)(b*v)*(vH(k+1:k+3,q:n));r=min(k+4,n);H(。
6、1:r,k+1:k+3)=H(1:r,k+1:k+3)(H(1:r,k+1:k+3)*v)*(b*v);x=H(k+2,k+1);y=H(k+3,k+1);if kn-3z=H(k+4,k+1);endendv,b=house(x,y);H(n-1:n,n2:n)=H(n1:n,n2:n)(b*v)*(v*H(n-1:n,n2:n));H(1:n,n-1:n)=H(1:n,n-1:n)(H(1:n,n1:n)v)(b*v);主程序:function eigval,V=QReig(A) 计算A的特征值以及对应的特征向量%调用格式eigval,V=QReig(A),其中eigval为特征值,V的列。
7、为特征向量u=1e15; %机器精度n=length(A); H=A; H=Hessen(H);%将A上Hessenberg化for i=1:n-2H(i+2:n,i)=zeros(ni1,1);endwhile(1) i1=0; i2=0; for i=2:n if(abs(H(i,i-1)=(abs(H(i,i))+abs(H(i1,i-1)*u); H(i,i1)=0; end end %将次对角线上足够小的元素置零for i=n:-1:2 if((i=2 & H(i,i-1)=0) & H(i1,i-2)=0) i2=i; for j=i2:-1:2 if(H(j,j1)=0) i1=。
8、j; H(i1:i2,i1:i2)=QR2shift(H(i1:i2,i1:i2); break; end end if(i1=0) H(1:i2,1:i2)=QR2shift(H(1:i2,1:i2); end break; end end if(i=2) break; end end 以下求复特征值for i=2:n if(H(i,i1)=0) p=H(i,i)+H(i-1,i1); q=H(i,i)H(i-1,i1)-H(i,i-1)H(i1,i); delta=p24q; H(i-1,i1)=(p+sqrt(delta))/2; H(i,i)=(psqrt(delta)/2; end end eigval=diag(H);eigval=sort(eigval);解得特征值后调用ipow解特征向量V=zeros(n);for i=1:nV(1:n,i)=ipow(A,eigval(i));end。