欢迎来到天天文库
浏览记录
ID:55322497
大小:20.20 KB
页数:6页
时间:2020-05-09
《非线性方程的数值解法牛顿下山法matlab.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、非线性方程的数值解法——计算物理实验作业九陈万物理学2013级l题目:用下列方法求在附近的根。根的准确值,要求计算结果精确到四位有效数字。(1)用牛顿法;(2)用弦截法,取l主程序:clearclc;%----------------初值设定-------------------x0=2;x1=1.9;eps=0.00001;N=50;%----------------迭代求解-------------------Newton(x0,eps,N);Newton_downhill(x0,eps,N);6Secan
2、t_Method(x0,x1,eps,N);l子程序:f(x)function[y]=f(x)y=x^3-3*x-1;%函数f(x)Endl程序一:牛顿法functionNewton(x0,eps,N)%牛顿法%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)3、sp('满足精度要求的根是:')disp(x1)6break;elseifk>=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendl程序二:弦截法functionSecant_Method(x0,x1,eps,N)%弦截法%x0,x1是迭代初值,eps是精度,N是迭代上限formatlong;k=1;while(1)iff(x0)==0disp('满足精度要求的解是:')disp(x0)break;elseiff(x1)==06disp('满足精度要求的解4、是:')disp(x1)break;elseifabs(f(x1)-f(x0))==0disp('分母为零,请重新选择初始迭代值')break;elsex2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));ifabs(x2-x1)=Ndisp('迭代失败,请检查程序是否有误')break;elsek=k+1;x0=x1;x1=x2;endendendl程序三:牛顿下山法6functionNewton_downh5、ill(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('分母为零,请重新选择初始迭代值')break;elsewhile(1)x1=x0-lamda*f(x0)/ff;iff(x1)>=f(x0)lamda=0.5*lamda;elsebreak;endendifabs(x1-x0)6、:')disp(x1)break;6elseifk>=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendendl程序运行结果:牛顿法:满足精度要求的根是:1.1819弦截法:满足精度要求的解是:1.2444l分析讨论:从运行结果来看,牛顿法与弦截法的结果与给定准确值完全相等;从运行时间上看速度都相当快。6
3、sp('满足精度要求的根是:')disp(x1)6break;elseifk>=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendl程序二:弦截法functionSecant_Method(x0,x1,eps,N)%弦截法%x0,x1是迭代初值,eps是精度,N是迭代上限formatlong;k=1;while(1)iff(x0)==0disp('满足精度要求的解是:')disp(x0)break;elseiff(x1)==06disp('满足精度要求的解
4、是:')disp(x1)break;elseifabs(f(x1)-f(x0))==0disp('分母为零,请重新选择初始迭代值')break;elsex2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));ifabs(x2-x1)=Ndisp('迭代失败,请检查程序是否有误')break;elsek=k+1;x0=x1;x1=x2;endendendl程序三:牛顿下山法6functionNewton_downh
5、ill(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('分母为零,请重新选择初始迭代值')break;elsewhile(1)x1=x0-lamda*f(x0)/ff;iff(x1)>=f(x0)lamda=0.5*lamda;elsebreak;endendifabs(x1-x0)6、:')disp(x1)break;6elseifk>=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendendl程序运行结果:牛顿法:满足精度要求的根是:1.1819弦截法:满足精度要求的解是:1.2444l分析讨论:从运行结果来看,牛顿法与弦截法的结果与给定准确值完全相等;从运行时间上看速度都相当快。6
6、:')disp(x1)break;6elseifk>=Ndisp('迭代失败,请检查程序是否有误')breakelsek=k+1;x0=x1;endendendendl程序运行结果:牛顿法:满足精度要求的根是:1.1819弦截法:满足精度要求的解是:1.2444l分析讨论:从运行结果来看,牛顿法与弦截法的结果与给定准确值完全相等;从运行时间上看速度都相当快。6
此文档下载收益归作者所有