您好,欢迎访问三七文档
2015级研究生《计算方法》作业2015年11月上机作业1数值试验33-1试验目的:考察不动点迭代法的局部收敛性试验内容:230xxe至少采用3种迭代法,迭代100次,考察收敛性,改变初值符号,再做迭代。分析收敛与发散的原因。(1)迭代原理:若实数p满足pgp,p称为函数gx的一个不动点,迭代1,0,1,...nnpgpn称为不动点迭代,gx称为迭代函数。由不动点方程建立迭代法1,0,1,...nnpgpn,其中0p称为初值,需要预先给定。方程230xxe分别对应下列不同形式的不动点方程:1()(3)/2xxgxe2()3xxgxxe323()2xxxexgxxe取500.5,10,100pTolN,按1,1,2,3ninpgpi迭代,并分析收敛性。(2)不动点迭代法代码编制函数文件Iteratepro.mfunctiony=iteratepro(x)x1=g(x);n=1;while(norm(x1-x)=1.0e-5)&(n=100)x=x1;x1=g(x);n=n+1;endx1n编制函数文件不动点方程(1)functiony=g(x)y=(exp(x)-3)/2;不动点方程(2)functiony=g(x)y=exp(x)-x-3;不动点方程(3)functiony=g(x)y=x-(2*x-exp(x)+3)/(2-exp(x));(3)迭代结果汇总表:近似解*x初值x=-0.5迭代次数n初值x=0.5迭代次数n格式(1)-1.19677-1.37348格式(2)-1.373442-1.373441格式(3)-1.37344-1.37345(4)结果分析:(1)三种迭代格式均收敛,近似解为*1.3734x。(2)当设定的初值接近真实解,所用的迭代次数较小。(3)不同迭代格式,效果不一样,迭代格式(3)实质是newton迭代法,其迭代效果明显快于其他格式。3-2试验目的:考察Newton法求根的收敛速度试验内容:应用Newton法求解试验3-1中的方程,并与实验3-1中收敛的迭代法进行比较,考察收敛速度。精确到0.00001。(1)Newton迭代法原理:在求解非线性方程0)(xf时,它的困难在于)(xf是非线性函数,为克服这一困难,考虑它的线性展开。设当前点为kx,在kx处的Taylor展开式为))(()()('kkkxxxfxfxf令0)(xf,解其方程得到),1,0(,)()('1kxfxfxxkkkk(2)程序代码编制函数文件newton.mfunctiony=newton(x0)x1=x0-fc(x0)/df(x0);n=1;while(abs(x1-x0)=1.0e-5)&(n=100)x0=x1;x1=x0-fc(x0)/df(x0);n=n+1;endx1n对于试验3-1编制函数文件fc.mfunctiony=fc(x)y=2*x-exp(x)+3;df.mfunctiony=df(x)y=2-exp(x);(3)运行结果结果汇总表:近似解*x初值x=-0.5迭代次数n初值x=0.5迭代次数n格式(1)-1.19677-1.37348格式(2)-1.373442-1.373441Newton迭代-1.37344-1.37345结果分析:(1)三者结果均收敛,解*1.3734x。(2)Newton迭代法迭代次数最小,收敛速度明显优于格式(1),(2)。3-3试验目的:掌握求重根的方法试验内容:分别用Newton法和不动点迭代法求解方程sin0xx,考察收敛速度,再用求重根的两种方法求方程的根,精确到0.00001。(1)实验原理同3-1,3-2;(2)程序代码Newton迭代法程序函数文件fc.mfunctiony=fc(x)y=x-sin(x);df.mfunctiony=df(x)y=1-cos(x);程序代码newton.mfunctiony=newton(x0)x1=x0-fc(x0)/df(x0);n=1;whileabs(x1-x0)=1.0e-5x0=x1;x1=x0-fc(x0)/df(x0);n=n+1;end不动点迭代法编制函数文件Iteratepro.mfunctiony=iteratepro(x)x1=g(x);n=1;whilenorm(x1-x)=1.0e-6x=x1;x1=g(x);n=n+1;end函数文件g.mfunctiony=g(x)y=sin(x);运行结果近似解初值x=1迭代次数n牛顿法1.9449e-0421不动点法0.0182k=410(3)为了提高牛顿法求重根的收敛阶采用以下俩种方法:方法一:程序:function[p1,err,y]=newtonroot(f,df,p0,eps,max1)p0fork=1:max1p1=p0-2*(feval('f',p0)/feval('df',p0));err=abs(p1-p0);p0=p1;p1,err,k,y=feval('f',p1)if(erreps)|(y==0)break;end取初值p=0.5,当迭代次数k=9满足精度要求,近似解为2.4925e-05方法二:程序:function[p1,err,y]=newtonroot(f,df,ddf,p0,eps,max1)p0fork=1:max1p1=p0-(feval('f',p0)*feval('df',p0))/((feval('df',p0))^2-feval('f',p0)*feval('ddf',p0))err=abs(p1-p0);p0=p1;p1,err,k,y=feval('f',p1)if(erreps)|(y==0)break;endend取初值p=0.5,k=3执行结果为:p1=1.5022e-08err=2.2741e-08ans=1.5022e-08以上四种方法中简单迭代法的收敛速度最慢最后一种收敛速度最快。3-4试验目的:体验Steffensen’smethod加速技巧试验内容:先用Newton法求解方程tan0xx,再用Steffensen’smethod求解,比较迭代步数,精确到0.00001。(1)简单原理:其基本思想是:对给定的初值p0(0),首先应用不动点迭代法pn+1=g(pn)计算俩步,然后用Atiken公式加速。(2)程序代码Newton法迭代程序:function[p1,err,y]=newtonroot(f,df,p0,eps,max1)p0fork=1:max1p1=p0-feval('f',p0)/feval('df',p0);err=abs(p1-p0);p0=p1;p1,err,k,y=feval('f',p1)if(erreps)|(y==0)break;endEnd定义迭代函数:存储为f.mfunctiony=f(x)y=x-tan(x)end定义迭代函数:存储为df.mfunctiong=df(x)g=1-1/(cos(x))^2endAtiken公式加速程序:function[n,err,p1,p2]=steffen(g,p0,tol,max1)p0n=0,p(1)=p0;whilen=max1fork=2:3p(k)=feval('g',p(k-1));endp1=p(1)-(p(2)-p(1))^2/(p(3)-2*p(2)+p(1));err=abs(p1-p(1));n=n+1;p(1)=p1n,err;if(errtol)|(p1==0)breakendend(3)结果与分析牛顿法取初值p0=0.5,迭代次数k=20满足精度要求.p1=1.6018e-04err=8.0089e-05k=20Ans=1.6018e-04Atiken公式加速取初值p0=0.5,迭代次数k=20满足精度要求。err=8.6054e-05n=20p=0.1776×1.0e-03二者迭代步数相同。从结果上看牛顿法更精确一些。上机作业2数值试验5-1实验目的:熟悉Jacobi、Seidel、Sor迭代法,了解松弛因子对收敛速度的影响。实验内容:分别用Jacobi、Seidel、Sor0.8,1.1,1.2,1.3,1.4,1.5迭代法求解下面的方程组,并作结果分析。初值(0)0,0,0,0,0Tx,精度要求:1()5(1)10kkkxxx(1)(2)123451234512345123451234512.323.43.74.81.4932.42.72.32.182.65.82.53.52.1134.63.62.525.314.82.2xxxxxxxxxxxxxxxxxxxxxxxxx123451234512345123451234513.343.53.85.83.4934.42.34.34.172.75.92.62.52.4135.63.81.534.314.94.2xxxxxxxxxxxxxxxxxxxxxxxxx1(1)实验原理Jacobi迭代法求解方程组(1)程序代码:先建立M文件,保存文件名为jacobi.m。functiony=jacobi(a,b,x0)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);B=D\(L+U);f=D\b;y=B*x0+f;n=1;whilenorm(y-x0)=1.0e-5x0=y;y=B*x0+f;n=n+1;endynSeidel迭代法D=diag(diag(A));D0=inv(D);L=tril(A)-D;U=triu(A)-D;M=L+D;M0=inv(M);B=-M0*U;d=M0*b;x0=[00000]';x=B*x0+d;whilenorm(x-x0)1e-5*norm(x)x0=x;x=B*x0+d;i=i+1;endSor迭代式求解方程组程序代码:建立文件名为sor.m的M文件,具体如下:functiony=sor(a,b,w,x0)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);B=(D-w*L)\((1-w)*D+w*U);f=(D-w*L)\b*w;y=B*x0+f;n=1;whilenorm(y-x0)=1.0e-5x0=y;y=B*x0+f;n=n+1;Endyn2程序计算结果三种迭代法求解方程组(1)结果列表SorJacobiSeidel0.81.11.21.31.41.5——12345*xxxxxx0.39060.39060.39060.39060.3906NaN0.39060.39060.16780.16780.16780.16780.1678NaN0.16780.16780.09960.09960.09960.09960.0996NaN0.09960.0996三种迭代法求解方程组(2)结果列表SorJacobiSeidel0.81.11.21.31.41.5——12345*xxxxxx0.47200.47200.47200.4720NaNNaN0.47200.47200.13300.13300.13300.1330NaNNaN0.13300.1330-0.1302-0.1302-0.1302-0.1302NaNNaN-0.1302-0.13020.16280.16280.16280.1628NaNNaN0.16280.16280.17010.17010.17010.1701NaNNaN0.17010.1701迭代次数101727598058226024123结果分析:(1)Seidel迭代法收敛速度最快,迭代次数最少。(2)当松弛因子越大,其收敛
本文标题:上机作业1
链接地址:https://www.777doc.com/doc-2782145 .html