• 基本思想
  • 算法
  • 修正Newton法
    • G_k为奇异矩阵
    • G_k为非奇异矩阵
  • 总结

上一篇博客我们讲了最速下降法(梯度下降法),梯度下降法简单,但是收敛的速度较慢。这一篇博客将会讲述牛顿法,牛顿法对于正定二次函数具有二次终止性,有较好的收敛速度。

   注:(二次终止性)对于 n n元的正定二次函数求极小值问题的算法,如果从任意点出发,经过有限次迭代就能够求得极小点,我们称这种算法具有二次终止性。具有二次终止性的算法,对于一般函数,一般也有较好的收敛速度。可知最速下降算法不具有二次终止性。

基本思想

如果目标函数f(x)f(x)具有二阶连续偏导数,其Hesse矩阵为 ∇2f(x) \nabla^2f(x)(记 G(x)=∇2f(x) G(x)=\nabla^2f(x))为正定矩阵。在我们从 xk x_k到 xk+1 x_{k+1}的迭代过程中,我们可以将函数 f(x) f(x)在 xk x_k处做Taylor展开,如下。

f(x)≈Q(x)=f(xk)+g(xk)T(x−xk)+12(x−xk)TG(x)(x−xk)

f(x)\approx Q(x)=f(x_k)+g(x_k)^T(x-x_k)+\frac{1}{2}(x-x_k)^TG(x)(x-x_k)其中, g(x) g(x)为函数 f(x) f(x)的一节偏导数。我们可以对 Q(x) Q(x)求极小值,由于 G(x) G(x)是正定的,所以 Q(x) Q(x)是正定二次函数,令 ∇Q(x)=0 \nabla Q(x)=0,即

g(xk)+G(xk)(x−xk)=0

g(x_k)+G(x_k)(x-x_k)=0由此可求得

x=xk−G(xk)−1g(xk)

x=x_k-G(x_k)^{-1}g(x_k)令此时的 x x作为下一个迭代点,即

xk+1=xk−G(xk)−1g(xk)(1)

x_{k+1}=x_k-G(x_k)^{-1}g(x_k)\tag{1} xk+1 x_{k+1}作为函数 f(x) f(x)极小点 x∗ x^*新的近似。公式(1)成为 牛顿迭代公式

算法

Newton法算法描述

已知:目标函数 f(x) f(x),梯度 g(x) g(x),Hesse矩阵 G(x) G(x),H终止准则所需要的终止限 ϵ1,ϵ2,ϵ3 \epsilon_1,\epsilon_2,\epsilon_3

(1) 选定初始点 x0 x_0,并且计算 f0=f(x0),g0=g(x0) f_0=f(x_0),g_0=g(x_0);置 k=0 k=0
(2) 计算 Gk=G(xk) G_k=G(x_k)
(3) 由方程组 Gkpk=−gk G_kp_k=-g_k求解 pk p_k
(4) 计算 xk+1=xk+pk,fk+1=f(xk+1),gk+1=g(xk+1) x_{k+1}=x_k+p_k,f_{k+1}=f(x_{k+1}),g_{k+1}=g(x_{k+1})
(5) 判别H终止准则是否满足:弱满足,输出 xk+1,fk+1 x_{k+1},f_{k+1};否则,置 k=k+1 k=k+1转(2)

程序流程图如下。

Created with Raphaël 2.1.0 开始 选定初始点x0,计算f0=f(x0),g0=g(x0) 置k=0 计算Gk=G(xk) 由方程组Gkpk=−gk求解pk 计算x{k+1}=xk+pk,fk+1=f(x{k+1}),g{k+1}=g(x{k+1}) 满足终止条件? 输出x{k+1},f{k+1} 结束 置k=k+1,fk=f{k+1},gk=g{k+1} yes no

修正Newton法

其实在实际应用中,Newton法的限制还是比较大的,首先在使用Newton法的时候我们需要知道目标函数 f(x) f(x)的Hesse矩阵,同时要求Hesse矩阵是正定的。其实我认为Hesse矩阵是正定的这一条件有些情况下可以不满足,若Hesse矩阵是正定的则函数 f(x) f(x)是严格凸函数,找的极小点就是全局极小点;在Hesse矩阵为半正定时,此时函数 f(x) f(x)为凸函数,但并不能保证在任意点的Hesse矩阵的行列式大于0,也就是无法求得 G−1k G_k^{-1},便无法继续迭代;而对于非凸函数,牛顿法并不能一定获得全局极小点,能够获得全局极小点取决于初始点的选择。而对于无法求得Hesse矩阵情况,我们有拟Newton方法,之后我们将对拟Newton方法族进行介绍。接下来我们将对Newton方法的一些特殊情况进行讲解。

Gk G_k为奇异矩阵

当迭代到点 xk x_k时,此时求的 Gk G_k变为奇异矩阵,即我们无法通过

Gkpk=−gk

G_kp_k=-g_k来求解 pk p_k(把 pk=−G−1kgk p_k=-G_k^{-1}g_k看作是搜索方向,称为Newton方向,步长为1)。遇到这种情况,可以借鉴最速下降法的做法,我们可以取下降方向 pk=−gk p_k=-g_k,然后作直线搜索

xk+1=1s(xk,pk)

x_{k+1}=1s(x_k,p_k)即用最速下降法的迭代公式去代替Newton迭代公式来完成这一次的迭代。

Gk G_k为非奇异矩阵

当 Gk G_k为非奇异矩阵时,我们可以通过方程组 Gkpk=−gk G_kp_k=−g_k求解 pk p_k。其实我们并不能保证 pk p_k为下降方向;即使为下降方向,由于步长因子为1,我们也不能保证 f(xk+1<f(xk)) f(x_{k+1}\lt f(x_k))。对于,我们分两种情况进行处理。

(1)若 f(xk+1)<f(xk) f(x_{k+1})\lt f(x_k),则迭代有效,不作处理;
(2)若 f(xk+1≥f(xl)) f(x_{k+1}\ge f(x_l)),又分以下两种情况做处理。

α: \alpha: 当 |gTkpk|≤ϵ||gk|| ||pk|| |g_k^Tp_k|\le\epsilon||g_k||\ ||p_k||( ϵ \epsilon是某一很小的整数)时,说明 pk p_k与 −gk -g_k几乎垂直,所以此时求得 pk p_k是不利方向,这时候取 pk=−gk p_k=-g_k,然后做直线搜索。
β: \beta:当 gTkpk<ϵ||gk|| ||pk|| g_k^Tp_k\lt\epsilon||g_k||\ ||p_k||时,说明 pk p_k是下降方向,此时进行直线搜索;否则,当 gTkpk>ϵ||gk|| ||pk|| g_k^Tp_k\gt\epsilon||g_k||\ ||p_k||,说明 pk p_k是上升方向,此时,改为反方向(即 pk=G−1kgk p_k=G_k^{-1}g_k)为搜索方向,之后在做直线搜索。

总结

无论是Newton方法还是Newton方法都需要对目标函数求Hesse矩阵,这会相对复杂一点,但是Newton方法要比最速下降法的收敛速度快。对于无法求得Hesse矩阵的目标函数 f(x) f(x),由此便出现了拟Newton方法,将在之后讲解。

Newton法(牛顿法)相关推荐

  1. 向量值函数在计算机工程与应用,拟Newton法在高阶矩阵中的应用-计算机工程与应用.PDF...

    Computer Engineering and Applications 计算机工程与应用 2012 ,48 (16) 33 ⦾研究.探讨⦾ 拟Newton 法在高阶矩阵中的应用 --求解最大特征值 ...

  2. 利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法)

    利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法) 1 一维函数的牛顿迭代法 2 复平面的牛顿迭代法 2.1 简单方程结果 2.2 其它非线性方程结果 本文首发于 matlab爱 ...

  3. 优选法和newton法在实践中的比较

    优选法和newton法在实践中的比较 对于函数f(x)=2*x^2-4*x-6 ,求在(-1,2)范围内的极值,分别用优选法和newton法实践,看比较的次数. (setq  count  0) (d ...

  4. 优选法和newton法在实践中的比较(分析原因)

    优选法和newton法在实践中的比较(分析原因) 优选法得到应用的原因是在它所表示的情况下,上一次判断总能给下一次判断节省一次,下面来证明: 假设长度为l的线段,其中的黄金分割点分别为x,这个点的对称 ...

  5. 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...

    2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec  内存限制: 128 MB 提交: 562  解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...

  6. newton法分形图

    方程:z^6-1=0; %f为求解的方程,df是导数,使用的时候用funchandler定义 %res是目标分辨率,iter是循环次数,(xc,yc)是图像的中心,xoom是放大倍数 %参数视自己需求 ...

  7. matlab牛顿法求区间根程序,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...

    一.实验原理 二.实验步骤 三.实验过程 1.(程序) (1)二分法:求  在区间(1,2)之间的根,取 (a)bipart.m: function [x,m]=bipart(fun,a0,b0,to ...

  8. matlab 牛顿法(Newton)与弦截法的迭代实现 解非线性方程

    原理参考丁丽娟的<数值计算方法>P273-277 %非线性方程及非线性方程组的解法 %Newton method 牛顿法 %author LijiaYi(foddcus) FaFu uni ...

  9. 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)

    作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把二分法.牛顿法.弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文章附录了,算法数学 ...

最新文章

  1. iOS开发之FMDB
  2. 兰州财经大学JAVA期末考什么_兰州财经大学大学国文下答案
  3. hadoop--HDFS概述
  4. 95-130-502-源码-source-ElasticSearch相关-ElasticSearch connector
  5. 让远程传输大文件变得更快
  6. 两个Listbox的关联(省名 和 该省城市的对应)
  7. layer 子页面提交 刷新父页面 table
  8. CR开发笔记-2基础飞机的搭建以及测试代码
  9. 初二生态系统思维导图_初中生物生态系统知识点思维导图
  10. idea java 远程调试_如何使用 Idea 远程调试 Java 代码
  11. VUE中使用Echarts图表
  12. html代码快速生成
  13. 1020-锰硅、硅铁、郑醇、焦煤、焦炭、尿素、纯碱、郑煤、EG、PVC跌停,郑煤期权,看涨期权跌停,看跌期权涨停,做市商停止报价
  14. iOS监听键盘的删除按键事件
  15. 【语义分割数据集】——cityscape数据集类别名称
  16. Tightvncserver 连接树莓派的方法及步骤
  17. easypanel b.php,easypanel 免费主机面板
  18. Linux 开发应用离线安装
  19. 多智能体强化学习——相关论文
  20. (二)基于区块链的自动抽奖系统从0到1实现

热门文章

  1. 解决Ubuntu里Chrome浏览器打开慢/卡死现象
  2. matlab的Regionprops详解
  3. EasyExcel复杂表头导入(一对多)
  4. MSSQL2005 双机热备说明
  5. 线性规划里面的基本解、基可行解,一张图看懂
  6. Jmeter做数据构造步骤详解
  7. 中国移动:正同苹果商谈引进iPhone
  8. 生产安全管理解决方案
  9. Practise test day16
  10. 阿里Mock工具正式开源,轻松干掉市面上所有Mock工具