您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 非线性方程的数值解法牛顿下山法matlab
1非线性方程的数值解法——计算物理实验作业九陈万物理学2013级13020011006题目:用下列方法求0133xxf(x)在20x附近的根。根的准确值87938524.1*x,要求计算结果精确到四位有效数字。(1)用牛顿法;(2)用弦截法,取;9.1,210xx主程序:clearclc;%----------------初值设定-------------------x0=2;x1=1.9;eps=0.00001;N=50;%----------------迭代求解-------------------Newton(x0,eps,N);Newton_downhill(x0,eps,N);Secant_Method(x0,x1,eps,N);子程序:f(x)function[y]=f(x)y=x^3-3*x-1;%函数f(x)End程序一:牛顿法functionNewton(x0,eps,N)2%牛顿法%x0是迭代初值,eps是精度,N是迭代上限formatlong;k=1;while(1)ff=(f(x0+0.1*eps)-f(x0))/(0.1*eps);ifff==0disp('分母为零,请重新选择初始迭代值')break;elsex1=x0-f(x0)/ff;ifabs(x1-x0)epsdisp('满足精度要求的根是:')disp(x1)break;elseifk=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendend程序二:弦截法functionSecant_Method(x0,x1,eps,N)%弦截法%x0,x1是迭代初值,eps是精度,N是迭代上限formatlong;k=1;while(1)iff(x0)==0disp('满足精度要求的解是:')disp(x0)3break;elseiff(x1)==0disp('满足精度要求的解是:')disp(x1)break;elseifabs(f(x1)-f(x0))==0disp('分母为零,请重新选择初始迭代值')break;elsex2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));ifabs(x2-x1)epsdisp('满足精度要求的解是:')disp(x2)break;elseifk=Ndisp('迭代失败,请检查程序是否有误')break;elsek=k+1;x0=x1;x1=x2;endendend程序三:牛顿下山法functionNewton_downhill(x0,eps,N)%牛顿下山法%x0是迭代初值,eps是精度,N是迭代上限formatlong;k=1;while(1)lamda=1;ff=(f(x0+0.1*eps)-f(x0))/(0.1*eps);ifff==0disp('分母为零,请重新选择初始迭代值')4break;elsewhile(1)x1=x0-lamda*f(x0)/ff;iff(x1)=f(x0)lamda=0.5*lamda;elsebreak;endendifabs(x1-x0)epsdisp('牛顿下山法满足精度要求的根是:')disp(x1)break;elseifk=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendend程序运行结果:牛顿法:满足精度要求的根是:1.879385241571819弦截法:满足精度要求的解是:1.879385241572444分析讨论:从运行结果来看,牛顿法与弦截法的结果与给定准确值完全相等;从运行时间上看速度都相当快。
本文标题:非线性方程的数值解法牛顿下山法matlab
链接地址:https://www.777doc.com/doc-4705224 .html