Matlab实现隐式QR方法求解矩阵特征值特征向量.docx

上传人:b**** 文档编号:14662407 上传时间:2023-06-25 格式:DOCX 页数:4 大小:8.95KB
下载 相关 举报
Matlab实现隐式QR方法求解矩阵特征值特征向量.docx_第1页
第1页 / 共4页
Matlab实现隐式QR方法求解矩阵特征值特征向量.docx_第2页
第2页 / 共4页
Matlab实现隐式QR方法求解矩阵特征值特征向量.docx_第3页
第3页 / 共4页
Matlab实现隐式QR方法求解矩阵特征值特征向量.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Matlab实现隐式QR方法求解矩阵特征值特征向量.docx

《Matlab实现隐式QR方法求解矩阵特征值特征向量.docx》由会员分享,可在线阅读,更多相关《Matlab实现隐式QR方法求解矩阵特征值特征向量.docx(4页珍藏版)》请在冰点文库上搜索。

Matlab实现隐式QR方法求解矩阵特征值特征向量.docx

以下为4个matlab子程序和一个主程序:

实现了用隐式QR方法求方阵的特征值及特征向量

实质上是将一个矩阵Hessenberg化,其中要用到Householder变换,然后使用QR迭代得到特征值

最后用反幂法求解特征向量。

子程序1:

function[v,b]=house(x)

%householder变换H:

满足H=I-bvv'且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);

ifs==0

b=0;

else

a=sqrt(x

(1)^2+s);

ifx

(1)<=0

v

(1)=x

(1)-a;

else

v

(1)=-s/(x

(1)+a);

end

b=2*v

(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);

fork=1:

n-2

[v,beta]=house(A(k+1:

n,k));

A(k+1:

n,k:

n)=A(k+1:

n,k:

n)-(beta*v)*(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)*(beta*v');

A(k+2:

n,k)=v(2:

n-k);

d(k)=beta;

end

子程序3:

functionv=ipow(A,t)

%反幂法计算对应于A的特征值为t的特征向量v

n=length(A);

[L,U,P]=lu(A-t*eye(n));

v=ones(n,1);

fori=2:

n

v(i)=v(i)-L(i,1:

i-1)*v(1:

i-1);

end

v(n)=v(n)/U(n,n);

fori=n-1:

-1:

1

v(i)=v(i)-U(i,i+1:

n)*v(i+1:

n);

v(i)=v(i)/U(i,i);

end

v=v/norm(v);

子程序4:

functionH=QR2shift(H)

%双重步位移的QR方法,输入H并返回其一次双重步位移迭代后的矩阵

%调用格式:

循环H=QR2shift(H)

n=length(H);

m=n-1;

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);

fork=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)*(v'*H(k+1:

k+3,q:

n));

r=min(k+4,n);

H(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);

ifk

z=H(k+4,k+1);

end

end

[v,b]=house([x,y]');

H(n-1:

n,n-2:

n)=H(n-1:

n,n-2:

n)-(b*v)*(v'*H(n-1:

n,n-2:

n));

H(1:

n,n-1:

n)=H(1:

n,n-1:

n)-(H(1:

n,n-1:

n)*v)*(b*v');

主程序:

function[eigval,V]=QReig(A)

%计算A的特征值以及对应的特征向量

%调用格式[eigval,V]=QReig(A),其中eigval为特征值,V的列为特征向量

u=1e-15;%机器精度

n=length(A);

H=A;

H=Hessen(H);%将A上Hessenberg化

fori=1:

n-2

H(i+2:

n,i)=zeros(n-i-1,1);

end

while

(1)

i1=0;

i2=0;

fori=2:

n

if(abs(H(i,i-1))<=(abs(H(i,i))+abs(H(i-1,i-1)))*u);

H(i,i-1)=0;

end

end

%将次对角线上足够小的元素置零

fori=n:

-1:

2

if((i~=2&&H(i,i-1)~=0)&&H(i-1,i-2)~=0)

i2=i;

forj=i2:

-1:

2

if(H(j,j-1)==0)

i1=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

%以下求复特征值

fori=2:

n

if(H(i,i-1)~=0)

p=H(i,i)+H(i-1,i-1);

q=H(i,i)*H(i-1,i-1)-H(i,i-1)*H(i-1,i);

delta=p^2-4*q;

H(i-1,i-1)=(p+sqrt(delta))/2;

H(i,i)=(p-sqrt(delta))/2;

end

end

eigval=diag(H);

eigval=sort(eigval);

%解得特征值后调用ipow解特征向量

V=zeros(n);

fori=1:

n

V(1:

n,i)=ipow(A,eigval(i));

end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2