栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【最优化算法】基于【MATLAB】的阻尼牛顿法【Damping Newton Method】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【最优化算法】基于【MATLAB】的阻尼牛顿法【Damping Newton Method】

个人主页:欢迎访问Ali.S主页

 最近更新:2022年7月11日

⛽ Java框架学习系列:Mybatis框架

⛳ Java基础学习系列:面向对象飞机大战

 通信仿真学习系列:【硬件】【通信】【MATLAB】【最优化】

 个人简介:通信工程本硕、Java程序员。目前只会CURD

 点赞  收藏 留言  都是我最大的动力

文章目录
  • 一、阻尼牛顿法介绍
  • 二、阻尼牛顿法原理
  • 三、阻尼牛顿法步骤
  • 四、阻尼牛顿法代码
  • 五、阻尼牛顿法测试
  • 总结

一、阻尼牛顿法介绍

前面介绍过敛速度更快的牛顿法,进行最优化问题的求解,在牛顿法中,可能出现在某步迭代时,目标函数数值上升,并且要求函数必须可微,虽然解决了收敛速度过慢的问题,但带来了新的问题。这里对牛顿法进行修正,引入阻尼牛顿法。

二、阻尼牛顿法原理

设f(x)是二次可微函数,取其在迭代点Xk处的二阶泰勒展开式:

为求其最小值点,对其求一阶导数,并令一阶导数为0,

得到搜所方向dk,:
利用前面最速下降法中的一维搜索的特点,进行一维搜索。

三、阻尼牛顿法步骤
  1. 给定初始点x(0),设置允许误差ε>0,k=1

  2. 计算初始点的一阶导数,二阶导数

  3. 判断梯度范数与允许误差的大小

  4. 在允许的误差范围内,从初始点开始,沿着dk方向进行一维搜索

    否则停止搜索,得到最优解。

  5. 从初始点开始,沿着dk方向进行一维搜索

    令:

  6. 迭代次数更新:k=k+1

  7. 转步骤(2)继续进行后续搜索,直至得到满足精度要求的最优解

四、阻尼牛顿法代码

阻尼牛顿迭迭代函数:

     function [k,x,val]=dampnm(fun,gfun,Hess,x0,epsilon)
     %功能: 阻尼牛顿法求解无约束优化问题:  min f(x)
     %输入: fun, gfun, Hess分别是目标函数及其梯度和Hesse阵,
     %      x0是初始点, epsilon为容许误差
     %输出: k是迭代次数, x, val分别是近似最优点和最优值
     maxk=5000;  %最大迭代次数
     beta=0.5;  sigma=0.4;
     k=0;   
     while(k 

梯度函数:

    function gf=gfun(x)
    gf=[16*x(1)*(x(1)^2-x(2))+6*(x(1)-1); -8*(x(1)^2-x(2))];

Hesse函数:

     function He=Hess(x)
     He=[48*x(1)^2-16*x(2)+6, -16*x(1);
         -16*x(1),               8 ];
五、阻尼牛顿法测试

测试以 f=4*(x(1)^2-x(2))^2+3*(x(1)-1)^2函数为例:

    %目标函数
    function f=fun(x)
    f=4*(x(1)^2-x(2))^2+3*(x(1)-1)^2;

经过输入测试数据:

 x0=[-1.2;1.0];
[k,x,val]=dampnm(’fun’,’gfun’,’Hess’,x0,1e-5)

得到每次的迭代的结果:

总结

虽然牛顿法收敛非常快,但是另一方面,初始值的选取非常重要,而且会出现某些迭代的过程可能会出现目标函数上升的情况,阻尼牛顿法解决了该问题,进行一维搜索,在适当的情况下具有全局收敛性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号