您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验五-用Newton法计算方程的根
佛山科学技术学院实验报告课程名称数值分析实验项目用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。编制计算函数值的程序:四.实验结果1、用Matlab编写Newton法和Steffensen加速法程序;利用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;利用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;2、用Newton法求解书本P229例题4,Steffensen加速法计算P255例题1。用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)书本P255例题1:求x=x^3-1在x0=1.5附近解。phi=inline('x^3-1');[x_star,index,it]=steffensen(phi,1.5)3、用调试好的程序解决如下问题求020sin35xxex的根,其中控制精度1010eps,最大迭代次数40M。编制计算函数值的程序:由上面利用Newton法求方程的根的程序知:%ep---精度,当|(x(k)-x(k-1)|ep时,终止计算。省缺为1e-5%it_max---最大迭代次数,省缺为100ifnargin4it_max=100;endifnargin3ep=1e-5;end我们只需改动:it_max=40;ep=1e-10,其余不变。利用以上程序,我们只需输入:fun=inline('[exp(5*x)-sin(x)+(x)^3-20,5*exp(5*x)-cos(x)+3*(x)^2]');[x_star,index,it]=Newton(fun,0.5),可得:x_star=0.602596203566521index=1it=6同理,在steffensen加速迭代方法的程序中,我们只需改动:it_max=40;ep=1e-10,其余不变。利用以上程序,我们只需输入:phi=inline('exp(5*x)-sin(x)+(x)^3-20');[x_star,index,it]=steffensen(phi,0.5)可得:x_star=0.637246094753909index=0it=41五.讨论分析当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下例如求020sin35xxex的根,其中控制精度1010eps,最大迭代次数40M,在steffensen加速迭代方法的程序中,我们只需改动:it_max=40;ep=1e-10,其余不变。利用以上程序,我们只需输入:phi=inline('exp(5*x)-sin(x)+(x)^3-20');[x_star,index,it]=steffensen(phi,0.5)可得:x_star=0.637246094753909index=0it=41观察上述结果,index=0,it=41表明迭代失败,所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败六.改进实验建议根据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我们才将这个大概值代入Newton法或者Steffensen中进行求解。当然,我们可以用其他数学软件实现Newton迭代法,我们可以用z-z超级画板,其操作流程为:牛顿迭代法的公式是:xn+1=xn-f(xn)/f'(xn)。下面我们就用牛顿迭代法设计程序求方程f(x)=ln(x)+2*x-6的近似解。(一)观察方程f(x)=0的零点位置(1)显示坐标系的坐标刻度。(2)作出函数y=ln(x)+2*x-6的图像,如下图所示:可以观察到方程的根在区间[2,3]上,我们可以设定近似解的初始值为2。(二)设计求方程近似解的程序(1)在程序工作区中输入:f(x){ln(x)+2*x-6;}执行后,返回结果为:f(x)#这表示在计算机已经完成了函数f(x)的定义。(2)定义f(x)的导函数g(x),在程序工作区中输入:Diff(f(x),x);执行后,返回结果为:2+1/x#得到了f(x)的导函数。继续输入:g(x){2+1/x;}这表示在计算机已经完成了函数g(x)的定义。(3)在下面输入:NewtonMethod(x0,h){x=x0-f(x0)/g(x0);if(abs(x-x0)=h){returnx;}else{NewtonMethod(x,h);}}}执行后,返回结果为:NewtonMethod(x0,h)#这表示在计算机已经完成了函数NewtonMethod(x0,h)的定义。(三)设定初值为2、要求误差不大于0.001的近似解(1)在下面输入:Float(1);执行后,返回结果为:计算结果显示浮点数#(2)在下方继续输入:NewtonMethod(2,0.001);执行命令最后的返回结果是:(-2*ln(2)*ln((-2*ln(2)+14)/(5))*ln((2*ln(2)*ln((-2*ln(2)+14)/(5))-14*ln(2)-14*ln((-2*ln(2)+14)/(5))+98)/(-4*ln(2)+33))+14*ln(2)*ln((-2*ln(2)+14)/(5))+14*ln(2)*ln((2*ln(2)*ln((-2*ln(2)+14)/(5))-14*ln(2)-14*ln((-2*ln(2)+14)/(5))+98)/(-4*ln(2)+33))-98*ln(2)+14*ln((-2*ln(2)+14)/(5))*ln((2*ln(2)*ln((-2*ln(2)+14)/(5))-14*ln(2)-14*ln((-2*ln(2)+14)/(5))+98)/(-4*ln(2)+33))-98*ln((-2*ln(2)+14)/(5))-98*ln((2*ln(2)*ln((-2*ln(2)+14)/(5))-14*ln(2)-14*ln((-2*ln(2)+14)/(5))+98)/(-4*ln(2)+33))+686)/(4*ln(2)*ln((-2*ln(2)+14)/(5))-32*ln(2)-28*ln((-2*ln(2)+14)/(5))+229)=2.53492#其中前半部分是没有处理的精确值,最后是浮点数表示的结果2.53492。观察以上程序,显然比较简单,可以直接计算出函数精确值,这也为我们提供了另外一种方法实现Newton迭代。同理,我们一样可以在该软件实现Steffensen迭代法,在这就不展开了。综合以上有关z-z操作内容是我最近在学的一个软件,虽然学得还不是很好,但有关的程序可以在不同软件实现,我觉得可以多去操作,不同的数学软件可以解决不同的数学问题,但很多还是有共性,所以这有待我进一步学习。
本文标题:实验五-用Newton法计算方程的根
链接地址:https://www.777doc.com/doc-4717592 .html