贾哥高等数值分析报告第一次实验Word格式.docx

上传人:b****5 文档编号:16183228 上传时间:2022-11-21 格式:DOCX 页数:23 大小:263.39KB
下载 相关 举报
贾哥高等数值分析报告第一次实验Word格式.docx_第1页
第1页 / 共23页
贾哥高等数值分析报告第一次实验Word格式.docx_第2页
第2页 / 共23页
贾哥高等数值分析报告第一次实验Word格式.docx_第3页
第3页 / 共23页
贾哥高等数值分析报告第一次实验Word格式.docx_第4页
第4页 / 共23页
贾哥高等数值分析报告第一次实验Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

贾哥高等数值分析报告第一次实验Word格式.docx

《贾哥高等数值分析报告第一次实验Word格式.docx》由会员分享,可在线阅读,更多相关《贾哥高等数值分析报告第一次实验Word格式.docx(23页珍藏版)》请在冰豆网上搜索。

贾哥高等数值分析报告第一次实验Word格式.docx

w=eye(1,1000);

I=eye(1000);

H=I-w*w'

;

A=H'

*D*H;

%生成1000阶的对称矩阵

b=rand(1000,1);

x=zeros(1000,1);

%初始解

r=b-A*x;

%初始残量

p=r;

%初始搜索方向

k=0;

semilogy(0,norm(r),'

r-'

);

holdon;

whilek<

1000

alpha=r'

*p/(p'

*A*p);

x=x+alpha*p;

rold=r;

r=rold-alpha*A*p;

beta=r'

*r/(rold'

*rold);

p=r+beta*p;

semilogy(k,norm(r),'

holdon;

k=k+1;

end

%条件数k=100

D=diag(linspace(1,100,1000));

b-'

%条件数k=10

D=diag(linspace(1,10,1000));

black-'

title('

条件数的大小对CG法收敛特性的影响'

xlabel('

迭代步数'

ylabel('

残差对数log(||rk||)'

2.构造特殊特征值分布

构造对称正定矩阵A1和A2。

D1=diag(linspace(1,1000,1000))时,条件数k=1000,特征值均匀分布;

D2=diag([1,linspace(500,600,998),1000])时,条件数仍为k=1000,最大特征值1000远大于第二个最大特征值600,最小特征值1远小于第二个最小特征值500。

图2:

矩阵特征值分布对CG算法收敛性的影响

图2

如图2所示,A1和A2的条件数均为1000,但A2的收敛速度远高于A1。

这是因为,在CG算法中,系数矩阵的中间特征值分布对CG的收敛速度有巨大的影响。

经过几步后,CG的收敛因子将是:

=0.046

而非:

=0.939

因此,A2矩阵的收敛速度快得多。

附matlab程序1-2:

%条件数k=1000,特征值均匀分布

%条件数k=1000,最大特征值远大于第二个最大特征值,最小特征值远小于第二个最小特征值

D=diag([1,linspace(500,600,998),1000]);

特征值分布对CG法收敛特性的影响'

第二题

对于同样的例子,比较CG和Lanczos的计算结果

采用和第一题相同的构造方法,构造三个1000阶正定对称矩阵,使条件数k分别为:

1000,100,10。

分别采用CG和Lanczos方法计算Ax=b,且都设置停机准则为:

norm(rk)<

1e-8。

图3,图4,图5分别为3种条件数下的CG法与Lanczos法比较。

图3

图4

图5

两种算法的收敛情况见表1。

表1

对比

Lanczos

CG

条件数

迭代步数

时间/s

243

0.82

267

0.41

100

124

0.43

134

0.21

10

41

0.24

43

0.07

可以看到,Lanczos的迭代步数比CG小,说明Lanczos收敛更快,但是其运算时间却明显大于CG,因此总体上CG的收敛效率要比Lanczos高。

因此在计算对称正定问题时,优先选用CG算法。

附matlab程序2:

n=1000;

D=diag(linspace(1,10,n));

%条件数分别取1000,100,10

w=eye(1,n);

I=eye(n);

b=rand(n,1);

X0=zeros(n,1);

x=X0;

r0=b-A*X0;

R0=r0;

%======Lanczos解法========

tic

y=norm(r0);

F

(1)=norm(r0);

Q(:

1)=r0/norm(r0);

r0=A*Q(:

1);

alpha

(1)=Q(:

1)'

*r0;

r0=r0-alpha

(1)*Q(:

bita

(1)=norm(r0);

2)=r0/bita

(1);

%给各变量赋初始值

forj=2:

nr0=A*Q(:

j)-bita(j-1)*Q(:

j-1);

alpha(j)=Q(:

j)'

r0=r0-alpha(j)*Q(:

j);

ifnorm(r0)>

1

bita(j)=norm(r0);

Q(:

j+1)=r0/bita(j);

end

fork=1:

j

T(k,k)=alpha(k);

j-1

T(k+1,k)=bita(k);

T(k,k+1)=bita(k);

%生成三对角阵T

e

(1)=1;

e(2:

j)=0;

y1=T\(y*e)'

W=Q(:

1:

j);

X=X0+W*y1;

r=norm(b-A*X);

%求解第k步生成的X及r

F(j)=r;

ifr/norm(b)<

1e-8

break;

end%r的精度达到要求后停止迭代,得到最终X

end

semilogy(F,'

r'

j%迭代步数

toc

%=======CG算法======

p=R0;

fori=1:

n

R=R0;

a=(R'

*R)/(p'

*(A*p));

x=x+a*p;

R=R-a*(A*p);

G(i)=norm(R);

ifG(i)/norm(b)<

=1e-8

beta=(R'

*R)/(R0'

*R0);

p=R+beta*p;

R0=R;

semilogy(G,'

b'

i%迭代步数

legend('

Lanczos'

'

CG'

Lanczos与CG算法收敛性对比,条件数k=10'

第三题

当A只有m个不同特征值时,对于大的m和小的m,观察有限精度下Lanczos方法如何收敛。

分别构建m=10、50、100、1000四个矩阵A,设置停机准则为:

sqrt(eps),分别计算Ax=b的解,如图6所示。

图6

各个m值达到收敛时迭代步数如表2所示。

表2

m

500

800

950

990

16

28

56

119

242

可见,相同的特征值个数越多,Lanczos收敛速度越快,而且只要m值稍小于矩阵阶数,收敛速度就明显提高,如图中m=990比m=1000的收敛速度快了一倍。

事实上,由于所构造的矩阵条件数都不坏(最大为1000),因此算法的收敛步数远小于m值。

附matlab程序3:

5

M=[500,800,950,990,1000];

m=M(i);

%m=500、800、950、990、1000

D=diag([(1001-m)*ones(1,n-m),linspace(1001-m,1000,m)]);

F(j,i)=r;

sqrt(eps)

clearey1WXrT

semilogy(F(:

1),'

2),'

3),'

y'

4),'

black'

5),'

g'

m=500'

m=800'

m=950'

m=990'

m=1000'

不同特征值个数的Lanczos收敛性'

第四题

取初始值近似解为零向量,右端项b仅由A的m个不同特征向量的线性组合表示时,Lanczos方法的收敛性如何?

数值计算中方法的收敛性和m的大小关系如何?

对任意一个随机的矩阵P进行QR分解,可以得到一个正交阵Q,再令A=QT*D*Q得到系数矩阵A。

则b可以由Q的前m个列向量相加得到。

停机标准:

其matlab程序与第三题基本相同,只是前面构造A和b的方式略有不同,附matlab程序5中只写出了不同的部分。

b由m个不同特征向量组成时的Lanczos收敛情况如图7所示。

图7

m取不同值时的收敛步数见表3。

表3

50

65

80

300

6

8

68

129

169

188

192

可见,随着m的增大,迭代步数逐渐增加。

理论上,当b仅由A的m个不同特征向量的线性组合表示时,Lanczos方法必至多m步收敛。

但实际上,当m较大时,由于精度等方面的限制,m个特征向量并不都线性无关,所以,当m较大时,迭代步数可能比m小的多,比如本例中m>

300后,迭代步数远小于m。

而同样由于计算精度限制,在m较小时,迭代步数可能溢出m步,比如本例m=65和80的情形。

另外,m值大于一定值后,随着m的增加,收敛步数逐渐趋于定值,可能的原因是:

随着m的增大,特征向量线性相关性逐渐增强。

附matlab程序4:

D=diag(linspace(1,1000,n));

P1=rand(n);

[Q1,R]=qr(P1);

A=Q1'

*D*Q1;

[V,D1]=eig(A);

7

M=[10,50,65,80,300,800,1000];

b=m*mean(V(:

m),2);

ifr<

clearey1XrT

6),'

m'

7),'

c'

m=10'

m=50'

m=65'

m=80'

m=300'

b由不同特征向量个数组成时Lanczos的收敛性'

 

第五题

构造对称不定矩阵,验证Lanczos方法的近似中断,观察收敛曲线中的峰点个数和特征值的分布关系;

观测当出现峰点时,MINRES方法的收敛形态怎样。

分别构建负特征值个数为m=0、10、100、500矩阵1000阶系数矩阵A,用Lanczos算法和MINRES算法求解Ax=b,设置停机准则:

1e-6。

图8,9,10,11分别为m取0,10,100,500时的对比图。

图8

图9

图10

图11

通过以上实验可以看到,当负特征值个数不超过特征值总个数一半的时候,负特征值越多,峰点个数越多。

实际上,更一般的结论是,当正负特征值个数相差较多时,峰点个数较少,当正负特征值个数相当时,峰点个数最多。

Lanczos算法收敛曲线发生了非常大的波动,存在多个峰点,但相应的MINRES算法的收敛曲线却十分稳定,没有震荡。

两种算法所需的迭代次数相近(注:

m=500时均没有在1000步内达到收敛)。

附matlab程序5:

(Lanczos算法同第四题)

%======MINRES算法=====

M=[1,10,100,500];

m=M

(1);

D=diag([linspace(-m,-1,m),linspace(1,1000-m,n-m)]);

A=H'

X0=zeros(n,1);

x=X0;

r0=b-A*X0;

R0=r0;

y=norm(r0);

%Lanczos过程

G

(1)=norm(r0);

r0=A*Q(:

alpha

(1)=Q(:

r0=r0-alpha

(1)*Q(:

bita

(1)=norm(r0);

500r0=A*Q(:

%对T进行QR分解

[Qk,Rk]=qr(T);

gk=Qk'

*norm(r0)*e'

yk=Rk\gk;

xk=Q(:

j)*yk;

rk=abs(gk(end));

G(j)=rk;

ifrk<

1e-

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

当前位置:首页 > PPT模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1