matlab中牛顿下山法实例,非线性方程的数值解法牛顿下山法matlab.docx

41528d3028836879cd698677c3999917.gif非线性方程的数值解法牛顿下山法matlab.docx

1 非线性方程的数值解法 ——计算物理实验作业九 陈万 物理学2013级 13020011006  题目: 用下列方法求 在 附近的根。根的准确值 0 1 3 3     x x f(x) 2 0  x ,要求计算结果精确到四位有效数字。  87938524 . 1 *  x (1)用牛顿法; (2)用弦截法,取 ; 9 . 1 , 2 1 0   x x  主程序: clear clc; %----------------初值设定------------------- x0 = 2; x1 = 1.9; eps = 0.00001; N = 50; %----------------迭代求解------------------- Newton(x0,eps,N); Newton_downhill(x0,eps,N);2 Secant_(x0,x1,eps,N);  子程序:f(x) function [y]=f(x) y = x^3-3*x-1; %函数f(x) End  程序一:牛顿法 function Newton(x0,eps,N) % 牛顿法 % x0 是迭代初值,eps 是精度,N 是迭代上限 at long; k = 1; while(1)ff = (f(x0+0.1*eps)-f(x0))/(0.1*eps);if ff == 0disp( 分母为零,请重新选择初始迭代值 )break;elsex1=x0-f(x0)/ff ;if abs(x1-x0)=Ndisp( 迭代失败,请检查程序是否有误 )breakelse k = k+1;x0 = x1; endend end  程序二:弦截法 function Secant_(x0,x1,eps,N) % 弦截法 % x0,x1 是迭代初值,eps 是精度,N 是迭代上限 at long; k = 1; while(1)if f(x0)==0disp( 满足精度要求的解是: )disp(x0)break;elseif f(x1)==04disp( 满足精度要求的解是: )disp(x1)break;elseif abs(f(x1)-f(x0))==0disp( 分母为零,请重新选择初始迭代值 )break;elsex2 = x1-f(x1)*(x1-x0)/(f(x1)-f(x0));if abs(x2-x1)=Ndisp( 迭代失败,请检查程序是否有误 )break;elsek = k+1;x0 = x1;x1 = x2;endend end  程序三:牛顿下山法5 function Newton_downhill(x0,eps,N) % 牛顿下山法 % x0 是迭代初值,eps 是精度,N 是迭代上限 at long; k = 1; while(1)lamda = 1;ff = (f(x0+0.1*eps)-f(x0))/(0.1*eps);if ff == 0disp( 分母为零,请重新选择初始迭代值 )break;elsewhile(1)x1 = x0-lamda*f(x0)/ff ;if f(x1)>=f(x0)lamda = 0.5*lamda;elsebreak;endendif abs(x1-x0)=Ndisp( 迭代失败,请检查程序是否有误 )breakelse k = k+1;x0 = x1; endend end end  程序运行结果: 牛顿法: 满足精度要求的根是:1.879385241571819 弦截法: 满足精度要求的解是:1.879385241572444  分析讨论: 从运行结果来看,牛顿法与弦截法的结果与给定准确值完全相等;从运行 时间上看速度都相当快。

你可能感兴趣的:(matlab中牛顿下山法实例)