1. 算法步骤
2. function [xopt, fopt, iter] = newton(x0, f, g, H, eps)
% x0: 初始搜索点
% f: 目标函数
% g: 梯度函数
% H: Hesse矩阵函数
% eps: 迭代收敛的精度
iter = 1; % 迭代计数器
max_iter = 1000; % 最大迭代次数
while iter <= max_iter
% 计算梯度和 Hesse 矩阵
grad = g(x0);
Hessian = H(x0);
% 求解线性方程组
d = -Hessian \ grad;
% 更新搜索点
x1 = x0 + d;
% 计算函数变化量
df = f(x1) - f(x0);
% 判断停止条件
if abs(df) < eps
xopt = x1;
fopt = f(x1);
return;
else
% 继续迭代
x0 = x1;
iter = iter + 1;
end
end
% 达到最大迭代次数仍未收敛
xopt = x1;
fopt = f(x1);
end
3. 选选取和实验二中相同的初始点$x_0$进行比较,迭代精度为$eps=1e-6$。实验结果如下表所示:
算法 |
$x_0$ |
迭代次数 |
最优解$x^\star$ |
最优值$f(x^\star)$ |
最速下降法 |
[-1.2, 1] |
1798 |
[-1.0000, 1.0000] |
0 |
牛顿法 |
[-1.2, 1] |
4 |
[-1.0000, 1.0000] |
0 |
四、心得体会
由实验结果可知,相比于最速下降法,Newton法的迭代次数更少,收敛速度更快,在这个问题上表现更好。
标签:工程,迭代,1.0000,eps,iter,实验,数学,x0,x1 From: https://www.cnblogs.com/yunbianshangdadun/p/17439839.html