资源描述:
《清华大学贾仲孝老师高等数值分析第二次实验.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、高等数值分析第二次实验作业Tl・构造例子特征值全部在右半平面时,观察基本的Arnold!方法和GMRES方法的数值性态,和相应重新启动算法的收敛性.Answer:(1)构造特征值均在右半平面的矩阵A:根据实Schur分解,构造对角矩阵D由n个块形成,每个对角块具有如下形式,对应一对特征值a-±ipt£2⑴5,=lAe丿不妨构造A如下所示:这样D=diag(Si,S2,S3……SJ矩阵的特征值均分布在右半平面。生成矩阵A=UtAU,其中U为正交阵,则A矩阵的特征值也均在右半平面。1-1112-222n/2-〃/2
2、n/2n/2由于选择初值与右端项:xO=zeros(2*N,l);b=ones(2*Ntl);则生成矩阵A的过程代码如下所示:N=500%生成八为2N阶A=zeros(2*X);fora=l:NA(2*a-112*a-1)=a;A(2*a-L.2*a)=-a;A(2*a,2*a-l)=a;A(2*a,2*a)=a;endU=orth(rand(2*N.2*N));Al=IT林*U;(2)观察基本的Arnoldi和GMRES方法编写基本的Arnold!函数与基本GMRES函数,具体代码见附录。Function[x
3、,rm,flag]=Arnoldi(AfbtxO,tol,m)function[xtrm,flag]=GMRES(AtbtxO,tol.m)输入:A为方程组系数矩阵,b为右端项,xO为初值,tol为停机准则,m为人为限制的最大步数。输出:x为方程的解,nn为残差向虽,flag为解是否收敛的标志。外程序如下所示:e=le-6;m=700;tic[xA,rmAtflagA]=Arnoldi(A1,b,xOte.m);toetic[xG,rmG.flagG]=GMRES(Al,b,x0,e,m);toesubplot
4、(1,2,1);semilogy(rmA)title(r/rnoldiEOA2uIR')xlabel(rpuzu2ViEyk*)ylabelClog(
5、
6、rk
7、)')subplot(1,2,2);semilogy(rmG)title(rGMRESE6A2uIR')xlabel(rpuzu2ViEyk*)ylabelClog(
8、
9、rk
10、
11、)')得到:Arnold"攵敛曲线10?f■l101:10°:102101•1-2o11(-¥--)60-10°=亘)6010200400迭代步数k600200400迭代步数
12、k600GMRES收敛曲线>方法ArnoldiGMRES得到两种方法的收敛曲线如上所示,将计算结果整理在下表中:waa迭代次数546526运行时间(s)结果讨论:1.从图中可以看出,基本的Arnoldi方法经过546步收敛,基本的GMRES方法经过526步收敛,基本的GMRES收敛速度会略烘于基本的Arnoldi方法。2.从图中可以看出,GMRES方法的的性态较Arnoldi方法更好。Arnoldi方法会有平台和不光滑段,但是由于GMRES具有的残差最优性,GMRES方法平稳地收敛,收敛曲线也更光滑。(1)观察
13、重新启动的Arnoldi和GMRES方法在上述两个函数的基础上,编写了重新启动的Arnoldi函数(详情见附录):function[x,rm,flag,Maxi]=ArnoldiM(/,b,xO.tol.m.Maxm)输入:m为给定步数』axm为人为限制的最大重启次数。输出:x为方程的解,rm为残差向虽,flag为解是否收敛的标志,曲xi为重启次数。(首先编写程序,计算重启次数堆ixi与给定步数m的关系,为选取给定步数m给出依据:num_restartA=[];num__i'estartG=[];form=1
14、0:10:150tic[xG.rmGtflagG.MaxiG]=GMRESM(A,b,xO,to1jn,Maxm);[xA.riiiA.flagA,MaxiA]=Arno1diM(A,b,x01to1,m,Maxm);num_restartA=[num_restaEMaxiA];num_restartG=[num_restartGMaxiG];toeendml=10:10:150;plot(ml,num_restartAt*o-*.ml.num_restartG,'♦-)250敢启次数与给定步数的关系0501
15、00150给定步数m002.00500从上述结果中看到在m二50之后,重启次数随着给定步长的增加减少很慢,进入饱和。故可以取m=50,最大步数可知在50步以内,运算程序如下所示:m=50;Maxm=50;tic[xA.riiiA,flagA,MaxiA]=Arno1diM(A,b,x0,to1,m,Maxm);toetic[xG.rmG,f1agG.MaxiG]=GMRESM(A.b.