工程数学实验3

 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法的迭代次数更少,收敛速度更快,在这个问题上表现更好。

posted @   云边上打盹  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示