牛顿算法

对于优化函数\(f(x)\),\(x=(x_1;x_2;...;x_n)\),二阶连续可导

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

\[f(x)=f(x_k)+g_k(x-x_k)+\frac{1}{2}(x-x_k)G_k(x-x_k)

\]

其中\(g_k=\nabla f(x_k)\),为函数梯度;\(G_k=\nabla^2f(x_k)\),为函数的Hesse矩阵

当\(G_k\)正定时,上式存在极小值,使得\(\nabla f(x)=0\)

\(\nabla f(x)=g_k+G_k(x-x_k)=0\)

可得牛顿法迭代公式:

\[x_{k+1}=x_k-G_k^{-1}g_k

\]可见,对于牛顿法,需要计算二阶偏导数(Hesse矩阵),且Hesse矩阵必须可逆、正定

并且,牛顿法对于迭代初始值\(x_0\)也有要求,当\(x_0\)距离最优解\(x*\)足够近时,算法才收敛

阻尼牛顿法

阻尼牛顿法解决了第二个问题,使得算法全局收敛

主要方法是引入线搜索技术,使得算法满足收敛性条件,关于线搜索技术

线搜索

算法:

\(step0:\)

给定迭代初始值\(x_0\),和容许误差\(\epsilon\)

\(step1:\)

计算梯度\(g_k=\nabla f(x_k)\)

if \(||g_k||

else 解方程:

\[G_kd_k=-g_k

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

\(step2:\)

利用Armijo准则算法,计算迭代步长\(\alpha_k\)

\[x_{k+1}=x_k+\alpha_k d_k

\]

k=k+1;to step 1

修正的牛顿算法

上面算法有前提条件1(Hesse矩阵正定)

为了扩大算法的适用范围,对算法修正,解决条件1 的强制条件,有两种方法

方法1:

对于阻尼牛顿算法求得的迭代方向\(d_k\),检查是否满足收敛条件:

\[g_k^Td_k<0

\]

if 满足

\(d_k=d_k\)

else

\(d_k=-g_k\)

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

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

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

方法2

引进阻尼因子\(\mu_k\),对Hesse矩阵修正,选择适当\(\mu_k\),使得

\[G_k=G_k+\mu_kI

\]

正定

方法二matlab代码

function [x,val,fun_t] = revise_newton(fun,gfun,hesse,x0,iterate)

%revise_newton - Description

%

% Syntax: [x,val,fun_t] = revise_newton(fun,gfun,hesse,x0)

%

% 修正牛顿法

n=length(x0);maxk=iterate;

rho=0.55;Sigma=0.4;tau=0.0;

k=0;epsilon=1e-5;

fun_t=zeros(1,maxk);

while k

k=k+1;

fun_t(1,k)=fun(x0);

gk=gfun(x0);

muk=norm(gk)^(1+tau);

Gk=hesse(x0);

Ak=Gk+muk*eye(n);

dk=-Ak\gk;

if norm(gk)

break;

end

m=0;mk=0;

while m<20

if fun(x0+rho^m*dk)

mk=m;

break;

end

m=m+1;

end

x0=x0+rho^mk*dk;

end

x=x0;

val=fun(x);

end

main functin

clc;

close all;

fun=@(x) 100*(x(1)^2-x(2))^2+(x(1)-1)^2;

gfun=@(x) [400*(x(1)^2-x(2))*x(1)+2*(x(1)-1);-200*(x(1)^2-x(2))];

hesse=@(x) [1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];

x0=[0;0];

iterate=30;

[x,val,fun_t] = revise_newton(fun,gfun,hesse,x0,iterate);

disp(x);

disp(val);

figure(1);

plot(1:iterate,fun_t);

set(get(gca, 'XLabel'), 'String', 'number of iterations');

set(get(gca, 'YLabel'), 'String', 'function value');

result

conclusion

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

reference

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

标签:迭代,nabla,牛顿,阻尼,算法,fun,收敛

来源: https://www.cnblogs.com/liudianfengmang/p/13460840.html

修正牛顿法matlab,牛顿算法及其改进【阻尼牛顿法、修正牛顿法】相关推荐

  1. 最优隐神经元数目 算法 matlab,BP算法的改进在Matlab的实现研究

    BP 算法的改进在M a tlab 的实现研究 姚文俊 (中南民族大学电子信息工程学院 湖北武汉 430074) 摘 要:利用M atlab 中的神经网络工具箱提供的丰富网络学习和训练函数,对BP 网 ...

  2. matlab解决阻尼牛顿,matlab阻尼牛顿法例题

    <matlab阻尼牛顿法例题>由会员分享,可在线阅读,更多相关<matlab阻尼牛顿法例题(2页珍藏版)>请在人人文库网上搜索. 1.精品文档. Use damped Newt ...

  3. 寻找最优参数解:最速下降法,牛顿下降法,阻尼牛顿法,拟牛顿法

    感谢于建民的投稿,转载请注明出处:数盟社区 机器学习的一个重要组成部分是如何寻找最优参数解.本文就常见寻优方法进行总结,并给出简单python2.7实现,可能文章有点长,大家耐心些. 寻找最优参数解, ...

  4. L-BFGS算法/Broyden族/BFGS算法/阻尼牛顿法的Python实现代码

    下面定义了三个Python语言编写的函数:函数表达式fun,梯度向量gfun,和海森矩阵hess.这三个表达式在后面各个算法的实现中会用到. # 函数表达式fun fun = lambda x:100 ...

  5. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  6. 【优化算法】改进的灰狼优化算法(IGWO)【含Matlab源码 1349期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]改进的灰狼优化算法(IGWO)[含Matlab源码 1349期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  7. 【优化算法】改进的侏儒猫鼬优化算法(IDMO)【含Matlab源码 2314期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]改进的侏儒猫鼬优化算法(IDMO)[含Matlab源码 2314期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  8. 相敏检波电路matlab,侧向仪器中数字相敏检波算法的改进与实现

    原标题:侧向仪器中数字相敏检波算法的改进与实现 作者简介,张森峰(1980-),男,山西,硕士,中国石油测井技术研究院,工程师,从事测井仪器研发工作. 本文引用地址:http://www.eepw.c ...

  9. 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)

    机器学习之MATLAB代码--IWOA_BILSTM基于改进鲸鱼算法优化的BiLSTM预测算法(十六) 代码 数据 结果 代码 1. %% 基于改进鲸鱼算法优化的BiLSTM预测算法 clear;cl ...

最新文章

  1. fullcaledar日历插件
  2. 腾讯正式进军电商:小鹅拼拼,出自微信
  3. nginx 服务脚本编写模板
  4. ubuntu16.04安装,使用redis布隆过滤器示例
  5. 详解 Visual C# 数据库编程
  6. anroid抓包工具tcpdump的用法
  7. VMware环境下如何使用iSCSI共享存储(配置实验笔记)
  8. 光彩集团小宇智能机器人_“智能急救教学机器人”走进文惠小学集团总部文韬校区...
  9. 《python基础教程》笔记之 字符串
  10. 王家林Spark 课程,蘑菇云,IMF真相
  11. Mac Spotlight搜索快捷键
  12. 一个屌丝程序猿的人生(四十三)
  13. 任务调度系统-业务线资源隔离
  14. etcd集群搭建和使用中常见的报错信息(热key探测系列教程)
  15. 【软件群英会】 12月1日晚上聊天记录
  16. 字符串字符数组的赋值
  17. 网络安全该从何入手?
  18. MySQL——VARCHAR和CHAR类型
  19. STM32F103CBT6和STM32F103ZET6单片机进行程序移植
  20. win10安装,ERROR:0x8007025D问题解决

热门文章

  1. vue 3.0 slot 使用方法
  2. Bluehost中国的主机产品和美国那边的主机有什么差别吗?
  3. Python写一个股价计算的脚本
  4. 景点旅游项目深入开发精品夜间旅游文化艺术
  5. 解决spring 类型项目 ueditor富文本编辑器上传图片等文件失败问题
  6. vue项目 vue-quill-editor富文本编辑器+图片上传
  7. Cadence PSpice 疑难2:报错ERROR(ORPSIM-15660): These devices failed to converge的原因与解决方法
  8. 全网最细:Jest+Enzyme测试React组件(包含交互、DOM、样式测试)
  9. django中save和create的区别
  10. 5 TextField输入框组件