matlab共轭梯度法_最优化算法2.3【牛顿算法及其改进-阻尼牛顿法、修正牛顿法】...

本文使用 Zhihu On VSCode 创作并发布

牛顿算法

对于优化函数

,
,二阶连续可导

处泰勒展开,取前三项,即对于优化函数二阶拟合

其中

,为函数梯度;
,为函数的Hesse矩阵

正定时,上式存在极小值,使得


可得牛顿法迭代公式:

  1. 可见,对于牛顿法,需要计算二阶偏导数(Hesse矩阵),且Hesse矩阵必须可逆、正定
  2. 并且,牛顿法对于迭代初始值
    也有要求,当
    距离最优解
    足够近时,算法才收敛

阻尼牛顿法

阻尼牛顿法解决了第二个问题,使得算法全局收敛主要方法是引入线搜索技术,使得算法满足收敛性条件,关于线搜索技术
线搜索

算法:


给定迭代初始值
,和容许误差


计算梯度

if
,break;输出当前

else 解方程:

求出迭代方向$d_k$, to step 2


利用Armijo准则算法,计算迭代步长

k=k+1;to step 1

修正的牛顿算法

上面算法有前提条件1(Hesse矩阵正定)
为了扩大算法的适用范围,对算法修正,解决条件1 的强制条件,有两种方法

方法1:

对于阻尼牛顿算法求得的迭代方向

,检查是否满足收敛条件:

if 满足


else

就是牛顿算法和梯度下降算法的混合算法,当牛顿算法求得迭代方向不满足收敛条件,使用负梯度方向为迭代方向

==关于为什么不直接使用梯度下降法==

可以证明:牛顿算法是二阶收敛,梯度下降线性收敛【牛顿法收敛速度快】

方法2

引进阻尼因子

,对Hesse矩阵修正,选择适当
,使得

正定

方法二matlab代码

function

main functin

clc

result

97a84444fb457c57c54fa4df53ee2929.png
Image

conclusion

上述图像为函数值随迭代次数变化,可见收敛速度较快;且计算结果较精确;

reference

《最优化方法及其matlab程序设计》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值