Newton法(牛顿法)
- 基本思想
- 算法
- 修正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)\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(x_k)+G(x_k)(x-x_k)=0由此可求得
x=x_k-G(x_k)^{-1}g(x_k)令此时的 x x作为下一个迭代点,即
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)
程序流程图如下。
修正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变为奇异矩阵,即我们无法通过
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,然后作直线搜索
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法(牛顿法)相关推荐
- 向量值函数在计算机工程与应用,拟Newton法在高阶矩阵中的应用-计算机工程与应用.PDF...
Computer Engineering and Applications 计算机工程与应用 2012 ,48 (16) 33 ⦾研究.探讨⦾ 拟Newton 法在高阶矩阵中的应用 --求解最大特征值 ...
- 利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法)
利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法) 1 一维函数的牛顿迭代法 2 复平面的牛顿迭代法 2.1 简单方程结果 2.2 其它非线性方程结果 本文首发于 matlab爱 ...
- 优选法和newton法在实践中的比较
优选法和newton法在实践中的比较 对于函数f(x)=2*x^2-4*x-6 ,求在(-1,2)范围内的极值,分别用优选法和newton法实践,看比较的次数. (setq count 0) (d ...
- 优选法和newton法在实践中的比较(分析原因)
优选法和newton法在实践中的比较(分析原因) 优选法得到应用的原因是在它所表示的情况下,上一次判断总能给下一次判断节省一次,下面来证明: 假设长度为l的线段,其中的黄金分割点分别为x,这个点的对称 ...
- 用c语言编制牛顿法程序,求解试用newton法求函数,YTU 2405: C语言习题 牛顿迭代法求根...
2405: C语言习题 牛顿迭代法求根 时间限制: 1 Sec 内存限制: 128 MB 提交: 562 解决: 317 题目描述 用牛顿迭代法求根.方程为ax3+bx2+cx+d=0.系数a,b ...
- newton法分形图
方程:z^6-1=0; %f为求解的方程,df是导数,使用的时候用funchandler定义 %res是目标分辨率,iter是循环次数,(xc,yc)是图像的中心,xoom是放大倍数 %参数视自己需求 ...
- matlab牛顿法求区间根程序,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...
一.实验原理 二.实验步骤 三.实验过程 1.(程序) (1)二分法:求 在区间(1,2)之间的根,取 (a)bipart.m: function [x,m]=bipart(fun,a0,b0,to ...
- matlab 牛顿法(Newton)与弦截法的迭代实现 解非线性方程
原理参考丁丽娟的<数值计算方法>P273-277 %非线性方程及非线性方程组的解法 %Newton method 牛顿法 %author LijiaYi(foddcus) FaFu uni ...
- 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)
作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把二分法.牛顿法.弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文章附录了,算法数学 ...
最新文章
- iOS开发之FMDB
- 兰州财经大学JAVA期末考什么_兰州财经大学大学国文下答案
- hadoop--HDFS概述
- 95-130-502-源码-source-ElasticSearch相关-ElasticSearch connector
- 让远程传输大文件变得更快
- 两个Listbox的关联(省名 和 该省城市的对应)
- layer 子页面提交 刷新父页面 table
- CR开发笔记-2基础飞机的搭建以及测试代码
- 初二生态系统思维导图_初中生物生态系统知识点思维导图
- idea java 远程调试_如何使用 Idea 远程调试 Java 代码
- VUE中使用Echarts图表
- html代码快速生成
- 1020-锰硅、硅铁、郑醇、焦煤、焦炭、尿素、纯碱、郑煤、EG、PVC跌停,郑煤期权,看涨期权跌停,看跌期权涨停,做市商停止报价
- iOS监听键盘的删除按键事件
- 【语义分割数据集】——cityscape数据集类别名称
- Tightvncserver 连接树莓派的方法及步骤
- easypanel b.php,easypanel 免费主机面板
- Linux 开发应用离线安装
- 多智能体强化学习——相关论文
- (二)基于区块链的自动抽奖系统从0到1实现