数值分析大作业QR分解.docx

上传人:聆听****声音 文档编号:105488 上传时间:2023-04-28 格式:DOCX 页数:8 大小:103.74KB
下载 相关 举报
数值分析大作业QR分解.docx_第1页
第1页 / 共8页
数值分析大作业QR分解.docx_第2页
第2页 / 共8页
数值分析大作业QR分解.docx_第3页
第3页 / 共8页
数值分析大作业QR分解.docx_第4页
第4页 / 共8页
数值分析大作业QR分解.docx_第5页
第5页 / 共8页
数值分析大作业QR分解.docx_第6页
第6页 / 共8页
数值分析大作业QR分解.docx_第7页
第7页 / 共8页
数值分析大作业QR分解.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析大作业QR分解.docx

《数值分析大作业QR分解.docx》由会员分享,可在线阅读,更多相关《数值分析大作业QR分解.docx(8页珍藏版)》请在冰点文库上搜索。

数值分析大作业QR分解.docx

题目:

设计求取实数矩阵A的所有特征值及其特征向量的数值算法,并以矩阵

为例进行具体的求解计算。

一、算法分析:

一般而言,求取实数矩阵所有特征值的方法有雅克比法和QR分解法,两者都是变换法。

其中雅克比法只能求解对称矩阵的全部特征值和特征向量,而QR则可用于更一般的矩阵特征值的求解,结合反幂法可进而求出各个特征向量。

二、算法设计:

1、原始实矩阵拟上三角化

为了减少求特征值和特征向量过程中的计算量,对生成的矩阵A进行拟上三角化,得到拟上三角化矩阵A’

记A

(1)=A,并记A(r)的第r列到第n列的元素。

对于r=1,2,…,n-2执行

(1)若全为零,则令A(r+1)=A(r),转(5);否则转

(2)。

(2)计算

(3)令,

(4)计算

(5)继续

算法执行完后,就得到与原矩阵A相似的拟上三角矩阵A(n-1)。

2、拟上三角矩阵QR分解的求原矩阵的全部特征值

记Ak是对拟上三角矩阵进行QR算法,产生的矩阵序列,A0是起始拟上三角矩阵,

对于k=1,2,…,n-1执行:

(1)分解

选取旋转矩阵,使,从而使第一列次对角元;再选取旋转矩阵,使,从而使第一列次对角元……如此进行下去,最多经过n-1步,必然变为上三角矩阵,即

必为正交矩阵,且满足

(2)计算

(3)上述两过程反复进行直到变为近似舒尔矩阵,对角线元素即为A的近似特征值。

3、带位移的QR方法求实矩阵全部特征值

一般情况下,QR分解的收敛速度比较慢,因此可通过仿乘幂法将原矩阵先进行一定长度的位移,可显著加速QR算法所得矩阵序列的收敛。

(A是原始矩阵的拟上三角矩阵)

(1)分解,其中即位移量,一般取A的某一特征值的近似值;实际计算通常取为的右下角元素,或取为右下角矩阵特征之中接近者。

(2)计算。

(3)重复过程

(1)

(2)直到变为近似舒尔矩阵,对角线元素即为A的近似特征值。

4、反幂法求实矩阵的特征向量

记通过QR分解得到A的某一特征值的近似值为p,反幂法步骤如下:

(1)三角分解。

(2)对k=1,2,…,做

①当时,令

当时,解

②解

③求绝对值最大的元素

④令

⑤当或小于规定的误差界时,停止计算,即为所求的特征向量,即为对应特征值的更为精确的取值。

三、程序设计:

1、对生成的矩阵A进行拟上三角化

利用hohd函数对A进行householder变换,得到A的拟上三角矩阵。

2、对拟上三角化后的矩阵进行QR分解和带位移的QR分解,求矩阵的全部特征值

在绝对误差界为的条件下,利用qrfenjie函数对拟上三角矩阵进行QR分解,利用dp_qrfenjie函数进行带位移的QR分解,比较两者的收敛速度。

3、反幂法求更精确的特征值和特征向量

利用vect函数和

(2)得到的特征值的近似值计算更为精确的特征值和对应的特征向量,是绝对误差界为。

4、输出相关结果。

四、源程序:

1、hohd函数

function[A]=hohd(a)

n=length(a);

fori=1:

n-2

b=a(i+1:

n,i);

ifb

(1)>=0

c=-sqrt(sum(b.^2));

else

c=sqrt(sum(b.^2));

end

rho=sqrt(2*c*(c-b

(1)));

u1=(b-c*eye(n-i,1))/rho;

H1=eye(n-i)-2*u1*u1';

H=eye(n-i);

H(i+1:

n,i+1:

n)=H1;

a=H*a*(H');

end

A=a

2、qrfenjie函数

functionA=qrfenjie(a)

n=length(a);

A=a;

fori=1:

100

theta(n-1)=0;

c(n-1)=0;

s(n-1)=0;

Q=1;

forj=1:

n-1

theta(j)=atan(A(j+1,j)/A(j,j));

c(j)=cos(theta(j));

s(j)=sin(theta(j));

P=eye(n);

P(j,j)=c(j);

P(j+1,j)=-s(j);

P(j,j+1)=s(j);

P(j+1,j+1)=c(j);

invP=eye(n);

invP(j,j)=c(j);

invP(j+1,j)=s(j);

invP(j,j+1)=-s(j);

invP(j+1,j+1)=c(j);

Q=Q*invP;

R=P*A;

A=R;

end

A=R*Q;

tor=max(abs(diag(A)-diag(a)));

iftor>5*10^-5

a=A;

else

break;

end

end

i,Ak=A,lanmda=diag(A)'

3、dp_qrfenjie函数

functionA=dp_qrfenjie(a)

n=length(a);

A=a;

fori=1:

100

A=a-a(n,n)*eye(n);

theta(n-1)=0;

c(n-1)=0;

s(n-1)=0;

Q=1;

forj=1:

n-1

theta(j)=atan(A(j+1,j)/A(j,j));

c(j)=cos(theta(j));

s(j)=sin(theta(j));

P=eye(n);

P(j,j)=c(j);

P(j+1,j)=-s(j);

P(j,j+1)=s(j);

P(j+1,j+1)=c(j);

invP=eye(n);

invP(j,j)=c(j);

invP(j+1,j)=s(j);

invP(j,j+1)=-s(j);

invP(j+1,j+1)=c(j);

Q=Q*invP;

R=P*A;

A=R;

end

A=R*Q+a(n,n)*eye(n);

tor=max(abs(diag(A)-diag(a)));

iftor>5*10^-5

a=A;

else

break;

end

end

i,Ak=A,lanmda=diag(A)'

4、vect函数

functionz=vect(a0,p)

n=length(a0);

Z=zeros(n,n+2);

forx=1:

n

a=a0-p(x)*eye(n);

r=zeros(n,n);

r(1,1:

n)=a(1,1:

n);

l=eye(n);

l(2:

n,1)=a(2:

n,1)/a(1,1);

fori=2:

n

forj=i:

n

M=0;

fork=1:

i-1

M=l(i,k)*r(k,j)+M;

end

r(i,j)=a(i,j)-M;

end

ifi

forj=i+1:

n

N=0;

fork=1:

i-1

N=l(j,k)*r(k,i)+N;

end

l(j,i)=(a(j,i)-N)/r(i,i);

end

else

break;

end

end

R=r;

L=l;

u=ones(n,1);

mo=0;

invr=inv(R);

invl=inv(L);

fori=1:

100

y=invr*u;

p1=max(y);

p2=max(-y);

ifp1>p2

m=p1;

else

m=-p2;

end

z=y/m;

tor=abs(m-mo);

iftor<5*10^-7

break;

else

mo=m;

end

u=invl*z;

end

Z(x,3:

n+2)=z';

Z(x,1)=i;

Z(x,2)=p(x)+1/m;

end

Z

五、运行结果:

1、执行命令:

>>clear,clc,a=[2001;0-1-24;0-213;1431];hohd(a);

得到原始实数矩阵的拟上三角矩阵A。

A=

2.0000-1.00000.00000.0000

-1.00001.00005.0000-0.0000

0.00005.0000-2.2000-0.4000

0.0000-0.0000-0.40002.2000

2、执行命令:

>>clear,clc,A=[2-100;-1150;05-2.2-0.4;00-0.42.2];qrfenjie(A);

得到迭代次数i,舒尔矩阵Ak,以及A的特征值矩阵lamda。

i=

38

Ak=

-5.90680.0315-0.00000.0000

0.03154.8972-0.0000-0.0000

0.0000-0.00002.21380.0007

0.00000.00000.00071.7958

lanmda=

-5.90684.89722.21381.7958

3、执行命令:

>>clear,clc,A=[2-100;-1150;05-2.2-0.4;00-0.42.2];dp_qrfenjie(A);

得到用带位移的QR分解法所用的迭代次数i,舒尔矩阵Ak,以及A的特征值矩阵lamda。

i=

8

Ak=

-5.9068-0.0056-0.0000-0.0000

-0.00564.89730.00000.0000

-0.00000.00001.79580.0000

0.00000.00000.00002.2138

lanmda=

-5.90684.89731.79582.2138

4、执行命令:

>>clear,clc,a=[2001;0-1-24;0-213;1431],p=[-5.90684.89722.21381.7958];vect(a,p);

得到Z矩阵,Z矩阵每一行的第一个数是迭代次数,第二个数是特征值,后面的数为特征向量。

Z=

Columns1through4

5.000000000000000-5.9068479421191640.1124195215529501.000000000000000

5.0000000000000004.8973023267404870.3451486545848380.505132030845888

5.0000000000000002.213757601733807-0.282974649968150-0.697610774659887

5.0000000000000001.7957880136448701.000000000000000-0.324049010823671

Columns5through6

0.675655845769651-0.888884062644966

0.5105418495906991.000000000000000

1.000000000000000-0.060487982528655

0.044562197436887-0.204211986355130

六、结果分析:

1、QR算法是求取一般矩阵所有特征值的一种非常有效的数值方法。

2、由2、3两步的运行结果看出带位移的QR算法与一般的QR算法相比具有更好的收敛效果,极大地减少了运算量。

3、通过反幂法只需比较小的计算量就可以得到精度更高的特征值,以及对应的特征向量。

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

当前位置:首页 > 解决方案 > 学习计划

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

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