数值分析第一次大作业——求解非线性方程统计一班20123755王俊森一.摘要本报告主要介绍了基于求非线性方程零点问题的牛顿法、二分法,简易牛顿法、割线法、Steveson法等数值分析方法的算法原理及实现方法。通过对非线性方程f(x)=x^2−e^x=0分别运用以上五种不同的迭代法进行数值实验,对几种迭代法的运算量,空间存储使用,迭代步数进行了初步分析评价,并对几种迭代法分别适用于求解何种类型的非线性方程进行了简要分析说明。其中整个过程中要求精确到三位有效数字,其中对于二分法,根据首次迭代结果,事先估计迭代次数,比较实际迭代次数与估计值是否吻合。并将求出的迭代序列用表格表示。对于牛顿法和割线法,至少取3组不同的初值,比较各自迭代次数。将每次迭代计算值求出,并列于表中。二.电脑配置CPU:i5-3210M2.50GHzRAM:4.00GBOS:Windows7旗舰版三.参数设置、计算结果、结果分析(一)二分法1.二分法原理:对于在区间[,]上连续不断且满足·<0的函数,通过不断地把函数的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫做二分法。2.二分法求根步骤:(1)确定区间[a,b],验证f(a).f(b)<0,给定精确度;(2)求区间(a,b)的中点;(3)计算。若=,则就是函数的零点;若.<0,则令=;若·<0,则令=。(4)判断是否达到精确度;即若|a-b|<,则得到零点近似值a(或b);否则重复步骤2-4.3.二分法具体内容:精度要求为5e-6,,解得实际迭代次数与估计值基本吻合,迭代如下表:n=2c=0.000000fc=-1.000000n=11c=-0.705078fc=0.003065n=3c=-0.500000fc=-0.356531n=12c=-0.704102fc=0.001206n=4c=-0.750000fc=0.090133n=13c=-0.703613fc=0.000277n=5c=-0.625000fc=-0.144636n=14c=-0.703369fc=-0.000187n=6c=-0.687500fc=-0.030175n=15c=-0.703491fc=0.000045n=7c=-0.718750fc=0.029240n=16c=-0.703430fc=-0.000071n=8c=-0.703125fc=-0.000651n=17c=-0.703461fc=-0.000013n=9c=-0.710938fc=0.014249n=18c=-0.703476fc=0.000016n=10c=-0.707031fc=0.006787n=19c=-0.703468fc=0.0000024.二分法程序:eps=5e-6;delta=1e-6;a=-1;b=1;fa=f(a);fb=f(b);n=1;while(1)if(fa*fb0)break;endc=(a+b)/2;fc=f(c);if(abs(fc)delta)break;elseif(fa*fc0)b=c;fb=fc;elsea=c;fa=fc;endif(b-aeps)break;endn=n+1;fprintf('n=%dc=%ffc=%f\n',n,c,fc);endEnd5.结果分析由实验结果可知,二分法经过多次迭代后,可以达到较好的精度,但当所求问题较为庞大,且对其跟的估计范围较为宽泛时,此方法所需迭代的步数很大,无论计算量和空间储存上都会有很大的开销耗费。(二)牛顿法1.牛顿迭代法原理:设已知方程0)(xf的近似根0x,则在0x附近)(xf可用一阶泰勒多项式))((')()(000xxxfxfxp近似代替.因此,方程0)(xf可近似地表示为0)(xp.用1x表示0)(xp的根,它与0)(xf的根差异不大.设0)('0xf,由于1x满足,0))((')(0100xxxfxf解得)(')(0001xfxfxx重复这一过程,得到迭代格式)(')(1kkkkxfxfxx2.牛顿法具体内容:近似精度要求为5e-6,带入不同初值结果如下表。初值-0.8迭代序列初值-0.5迭代序列初值-0.7迭代序列-0.706959-0.721926-0.703472-0.703472-0.703601-0.7034673.牛顿法程序:这里以初值为0.7为例fc=@(x)x*x-exp(x);df=@(x)2*x-exp(x);eps=5e-6;delta=1e-6;x0=-0.7;N=100;n=0;while(1)x1=x0-fc(x0)/df(x0);n=n+1;if(nN|abs(x1)eps);disp('Newtonmethodfailed');break;endifabs(x1)1d=x1-x0;elsed=(x1-x0)/x1;endx0=x1;if(abs(d)eps|abs(df(x1))delta)break;endfprintf('%f\n',x0)End4.结果分析牛顿迭代法是二次收敛的,因此用牛顿迭代法求解非线性方程的解,迭代次数较小,能以较小的计算量和较小的空间利用得到相对较精确的数值解。但其缺点为需要所求非线性方程的导函数值,所以适用范围相对较小,只能对一阶可导的方程进行迭代。(三)割线法1.割线法原理:牛顿迭代法的收敛速度快,但是每迭代一次,除需计算)(kxf的值外,还要计算)(kxf的值。如果)(xf比较复杂,计算)(kxf的工作量就可能很大。为了避免计算导数值,我们用差商来代替导数。设经过k次迭代后,与求1kx。用)(xf在kx,1kx两点的差商11)()(kkkkxxxfxf来代替牛顿迭代公式中的导数值)(kxf,于是我们得到如下迭代公式:)()()()(111kkkkkkkxxxfxfxfxx,3,2,1k2.割线法具体内容:近似精度要求为5e-6,带入不同初值结果如下表:初值x0=-2x1=0初值x0=-1x1=1初值x0=-1x1=0=-0.411128-0.462117-0.612700=-0.812307-0.929762-0.735079-0.690233-0.681847-0.702313=-0.702913-0.701642-0.703453=-0.703470-0.7034833.割线法程序如下:这里以初值x0=-1,x1=0为例fa=@(x)x*x-exp(x);eps=5e-6;delta=1e-6;x0=-1;x1=0;while(1)x2=x1-(fa(x1)/(fa(x1)-fa(x0)))*(x1-x0);if(abs(fa(x2))delta|abs(x2-x1)eps)break;endx0=x1;x1=x2;fprintf('x2=%f\n',x2)End4.结果分析由实验数据分析可知,割线法收敛速度不如牛顿迭代法收敛速度快,但比二分法要快得多,可以达到相对较高的精度。且在其迭代过程中每步只需一次新的函数赋值,又因为此类迭代算法中函数赋值构成了主要的计算量,所以综合比较割线法的运算量要比牛顿法更小些。四.结论在以上利用三种方法求非线性方程的根中,可以明显看出,牛顿法和割线法,明显比二分法迭代次数小,而割线法虽然比牛顿法迭代次数稍多,但是避免乐求导的过程,故从中可以看出各种算法有各种算法的优点。