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

本文详细介绍了如何使用牛顿法、弦截法以及牛顿下山法在Matlab中求解非线性方程x^3-3x-1=0的根,展示了两种方法的求解过程和结果,并对比了它们的精度与效率。结果显示,三种方法都能得到准确的解,但牛顿法与弦截法的速度相近。
摘要由CSDN通过智能技术生成

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编写的牛顿下山法的简单示例代码。 ```matlab function [x_opt, f_opt] = newton_method(f, grad, hess, x0, tol) % 牛顿下山法函数 % 输入参数: % f - 目标函数 % grad - 目标函数的梯度 % hess - 目标函数的Hessian矩阵 % x0 - 初始猜测点 % tol - 容忍误差 % 输出参数: % x_opt - 最优解 % f_opt - 最优解对应的目标函数值 x = x0; x_opt = x0; f_opt = f(x0); while abs(grad(x)) >= tol p = -hess(x) \ grad(x); % 计算牛顿下山法的方向 alpha = backtrack(f, grad, p, x); % 使用回溯直线搜索计算步长 x = x + alpha * p; % 迭代更新新的解 if f(x) < f_opt x_opt = x; f_opt = f(x); end end end function alpha = backtrack(f, grad, p, x) % 回溯直线搜索函数 % 输入参数: % f - 目标函数 % grad - 目标函数的梯度 % p - 下降方向 % x - 当前点 % 输出参数: % alpha - 步长 alpha = 1; % 初始步长 c = 0.5; % 回溯直线搜索参数 rho = 0.5; % 回溯直线搜索参数 while f(x + alpha*p) > f(x) + c * alpha * grad(x)' * p alpha = rho * alpha; % 更新步长 end end ``` 上述代码,`f`是目标函数,`grad`是目标函数的梯度,`hess`是目标函数的Hessian矩阵,`x0`是初始猜测点,`tol`是容忍误差。函数`newton_method`使用牛顿下山法迭代更新解,并返回最优解`x_opt`和最优解对应的目标函数值`f_opt`。函数`backtrack`使用回溯直线搜索方法来计算步长`alpha`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值