佛山科学技术学院实验报告课程名称数值分析实验项目用Newton法和steffensen加速法计算方程的根专业班级姓名学号指导教师成绩日期一.实验目的1、在计算机上用迭代法求非线性方程()0fx的根。二.实验要求1、按照题目要求完成实验内容;2、写出相应的Matlab程序;3、给出实验结果(可以用表格展示实验结果);4、分析和讨论实验结果并提出可能的优化实验。5、写出实验报告。三.实验步骤1、用Matlab编写Newton法和Steffensen加速法程序2、用Newton法求解书本P229例题4,Steffensen加速法计算P255例题1。3、用调试好的程序解决如下问题求020sin35xxex的根,其中控制精度1010eps,最大迭代次数40M。编制计算函数值的程序:四.实验结果MATLABdesktopkeyboardshortcuts,suchasCtrl+S,arenowcustomizable.Inaddition,manykeyboardshortcutshavechangedforimprovedconsistencyacrossthedesktop.Tocustomizekeyboardshortcuts,usePreferences.Fromthere,youcanalsorestorepreviousdefaultsettingsbyselectingR2009aWindowsDefaultSetfromtheactivesettingsdrop-downlist.Formoreinformation,seeHelp.Clickhereifyoudonotwanttoseethismessageagain.fun=inline('[x^3-x-1,3*x^2-1]');[x_star,index,it]=Newton(fun,1.5)x_star=1.324717957244790index=1it=4phi=inline('x^3-1');[x_star,index,it]=steffensen(phi,1.5)x_star=1.324717957244753index=1it=6用Newton法计算本题fun=inline('[exp(5*x)-sin(x)+x^3-20,5*exp(5*x)+cos(x)+2*x^2]');[x_star,index,it]=Newton(fun,1.5)x_star=0.602596203566575index=1it=12用Steffensen加速法计算本题phi=inline('0.2*log(sin(x)-x^3+20)')[x_star,index,it]=steffensen(phi,1.5,1e-10)x_star=0.602596203566521index=1it=3五.讨论分析(讨论初始值对迭代次数的影响,自己补充)当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败。六.改进实验建议(对代码如何改进,自己补充)跟据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我们才将这个大概值代入Newton法或者Steffensen中进行求解。参考程序和书本例题运行程序1、利用Newton法求方程的根。function[x_star,index,it]=Newton(fun,x,ep,it_max)%求解非线性方程的Newton法,其中%fun(x)---需要求根的函数,%第一个分量是函数值,第二个分量是导数值%x---初始点。%ep---精度,当|(x(k)-x(k-1)|ep时,终止计算。省缺为1e-5%it_max---最大迭代次数,省缺为100%x_star---当迭代成功时,输出方程的根,%当迭代失败时,输出最后的迭代值。%index---当index=1时,表明迭代成功,%当index=0时,表明迭代失败(迭代次数=it_max)。%it---迭代次数。ifnargin4it_max=100;endifnargin3ep=1e-5;endindex=0;k=1;whilek=it_maxx1=x;f=feval(fun,x);ifabs(f(2))epbreak;endx=x-f(1)/f(2);ifabs(x-x1)epindex=1;break;endk=k+1;endx_star=x;it=k;用Newton法计算书本P229例题4。(求方程f(x)=x^3-x-1=0在区间[1,2]内的根)fun=inline('[x^3-x-1,3*x^2-1]');[x_star,index,it]=Newton(fun,1.5)2、steffensen加速迭代方法function[x_star,index,it]=steffensen(phi,x,ep,it_max)%Steffensen加速方法%phi(x)---迭代函数%x---初始点。%ep---精度,当|(x(k)-x(k-1)|ep时,终止计算。省缺为1e-5%it_max---最大迭代次数,省缺为100%x_star---当迭代成功时,输出方程的根,%当迭代失败时,输出最后的迭代值。%index---当index=1时,表明迭代成功,%当index=0时,表明迭代失败(迭代次数=it_max)。%it---迭代次数。ifnargin4it_max=100;endifnargin3ep=1e-5;endindex=0;k=1;whilek=it_maxx1=x;y=feval(phi,x);z=feval(phi,y);x=x-(y-x)^2/(z-2*y+x);ifabs(x-x1)epindex=1;break;endk=k+1;endx_star=x;it=k;书本P255例题1:求x=x^3-1在x0=1.5附近解。phi=inline('x^3-1');[x_star,index,it]=steffensen(phi,1.5)