1、基本Newton方法

设f(x)f(x)具有连续的二阶偏导数,当前迭代点是xk.f(x)x_k. f(x)在xkx_k处的TaylorTaylor展开式为

f(xk+d)=fk+gTkd+12dTGkd+o(||d||2),

f(x_k+d)=f_k+g_k^Td+\frac{1}{2}d^TG_kd+o(||d||^2),
其中 d=x−xk.d = x-x_k.在点 xkx_k的邻域内,用二次函数

qk(d)=Δfk+gTkd+12dTGkd

q_k(d)\overset{\Delta}{=}f_k+g_k^Td+\frac{1}{2}d^TG_kd
近似 f(xk+d)f(x_k+d),求解问题

min qk(d)=fk+gTk+12dTGkd.

min\ q_k(d)=f_k+g_k^T+\frac{1}{2}d^TG_kd.
若 GkG_k可逆,则方程组

Gkd=−gk

G_kd=-g_k
的解 dk=−G−1kgkd_k=-G_k^{-1}g_k为上面问题 min qk(d)min\ q_k(d)的唯一解.
迭代步骤:
步1 给出x0∈Rn,ϵ>0,k:=0;x_0\in\mathbf R^n,\epsilon>0,k:=0;
步2 若终止准则满足,则输出有关信息,停止迭代;
步3 计算dkd_k;
步4 xk+1:=xk+dk,k:=k+1,x_{k+1}:=x_k+d_k,k:=k+1,转步2.
下面是实现的代码

#include <math.h>
#include <stdio.h>#define delta 1E-03
#define epsilon 1E-06double funcValue(double s)
{return pow(s,4)-6*pow(s,3)+1;
}double derivation(double s)
{double diff = funcValue(s+delta)-funcValue(s);return diff/delta;
}double dederivation(double s)
{double diff = derivation(s+delta)-derivation(s);return diff/delta;
}
int main()
{double x = 1;while(abs(derivation(x))>epsilon){printf("%f\n", derivation(x));double d = -derivation(x)/dederivation(x);x = x+d;}printf("%f, %f", x, funcValue(x));return 0;
}

经过各种试验之后,发现基本的Newton法依赖于初始点的选择,当初始点接近极小点时,迭代序列很快收敛于极小点,否则会出现迭代序列收敛到鞍点或极大点的情形,这会使迭代失败。
由收敛性证明也可得知,它的收敛是局部的。

2、阻尼Newton方法

阻尼牛顿法比基本牛顿法多了一步一维搜索步长α\alpha的方法:

xk+1=xk+αkdk,

x_{k+1}=x_k+\alpha_kd_k,
此法能保证对正定的 Gk,{fk}G_k,\{f_k\}单调下降;即使 xkx_k离 x∗x^*稍远,该方法产生的点列 {xk}\{x_k\}仍可能收敛至 x∗x^*.
其中一维搜索步长的方法有黄金比例法、多项式插值法、信赖域法等。
这里介绍一下黄金比例法(0.618比例法):
首先我们需要确定一个初始区间,使其包含

ϕ(α)=f(xk+αdk),α>0

\phi(\alpha)=f(x_k+\alpha d_k), \alpha>0
的极小点,这是建立在满足单峰函数的基础上的. 即使不是单峰函数,可以先用进退法得到一个满足单峰函数的区间. 这是迭代步骤:
步1 给定α0∈[0,∞),γ0>0,t>1,i:=0.\alpha_0\in[0,\infty),\gamma_0>0,t>1,i:=0.
步2 计算αi+1=αi+γi.\alpha_{i+1}=\alpha_i+\gamma_i.若αi+1≤0\alpha_{i+1}\le0,则令αi+1:=0,\alpha_{i+1}:=0,转步4;若ϕ(αi+1)≥ϕ(αi),\phi(\alpha_{i+1})\ge\phi(\alpha_i),则转步4.
步3 令γi+1=tγi,α:=αi,αi:=αi+1,i:=i+1\gamma_{i+1}=t\gamma_i,\alpha:=\alpha_i,\alpha_i:=\alpha_{i+1},i:=i+1,转步2.
步4 若i=0,i=0,令γi:=−γi,α:=αi+1\gamma_i:=-\gamma_i,\alpha:=\alpha_{i+1},转步2;否则

a=min{α,αi+1},b=max{α,αi+1},

a=min \{\alpha,\alpha_{i+1}\},\\b=max\{\alpha,\alpha_{i+1}\},
输出a,ba,b,迭代停止.
0.618方法的迭代步骤:
步1 给定a0>0,b0>0,i:=0,ϵ>0,τ:=0.618.a_0>0,b_0>0,i:=0,\epsilon>0,\tau:=0.618.
步2 若bi−ai<ϵ,b_i-a_i则α∗:=bi+ai2\alpha^*:=\frac{b_i+a_i}{2},输出α∗\alpha^*,停止线搜索.
步3 计算

αli:=ai+(1−τ)(bi−ai),αri:=ai+τ(bi−ai).

\alpha_i^l:=a_i+(1-\tau)(b_i-a_i),\\\alpha_i^r:=a_i+\tau(b_i-a_i).
步4 若ϕ(αli)<ϕ(αri),\phi(\alpha_i^l)则ai+1:=ai,bi+1:=αri;a_{i+1}:=a_i,b_{i+1}:=\alpha_i^r;否则ai+1:=αli,bi+1:=bi,i:=i+1a_{i+1}:=\alpha_i^l,b_{i+1}:=b_i,i:=i+1,转步2.
后面的编程实现可以参考这位作者写的文章: http://dataunion.org/20714.html,里面有python写的详细实现方式。

参考资料:
[1]高立.数值最优化方法.北京大学出版社.高立.\color{red}{数值最优化方法}.北京大学出版社.

牛顿(Newton)方法相关推荐

  1. 说说牛顿迭代 -- 方法篇

    说说牛顿迭代 – 方法篇 写这个笔记主要是最近老在考虑最优化问题.今天刚好发现一个不错的手写公式的工具,加上前几天又发现Win10的Windows Ink比我想象得好用,于是来描几笔.主要是想试试这样 ...

  2. 最速下降方法与Newton方法

    文章目录 最速下降方法 Euclid范数和二次范数 Euclid范数 二次范数 基于坐标变换的解释 采用$\ell_1$-范数的最速下降方向 数值试验 Newton 方法 Newton 步径 二阶近似 ...

  3. 经典算法-并查集、快速排序、字典序算法、二分搜索、牛顿开方法、求质数(筛选法)、编辑距离、滑动窗口、异或求重、长除法

    目录 ​​​​​​​​​​​​​​ 并查集 快速排序 字典序算法 二分搜索 开根号-牛顿开方法 求质数 编辑距离 滑动窗口 异或求重 长除法 ​​​​​​​ 并查集 并查集用于解决相同元素集合动态连接 ...

  4. 牛顿开方法的算法及其原理

    转载自:http://www.guokr.com/question/461510/ 其实牛顿开方法是牛顿迭代法在开平方上的应用,牛顿迭代法同时也能快速逼近很多方程的解,自然可以用来开任意平方. 求,即 ...

  5. 经典重读 | 用高斯牛顿的方法来进行IKF的更新步骤

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨泡泡编辑组 来源丨 泡泡机器人SLAM 点击进入->3D视觉工坊学习交流群 标题:The ...

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

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

  7. 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法

    在上一篇中提到的Logistic回归是利用最大似然概率的思想和梯度上升算法确定θ,从而确定f(θ).本篇将介绍还有一种求解最大似然概率ℓ(θ)的方法,即牛顿迭代法. 在牛顿迭代法中.如果一个函数是,求 ...

  8. matlab 牛顿向后差分,利用差分的牛顿插值法(Newton)

    差分牛顿插值法要求是等距的. 先来看三个概念 差分与均差的关系如下: 牛顿(Newton)插值的基本公式为: 由于差分插值是等距的,所以可以设x=x0+nh 对于上式

  9. 确定整数的平方根是否为整数的最快方法

    我正在寻找确定long值是否是完美平方(即,其平方根是另一个整数)的最快方法: 通过使用内置的Math.sqrt()函数,我已经完成了简单的方法,但是我想知道是否有一种方法可以通过将自己限制在仅整数域 ...

最新文章

  1. 项目中用到的三个绿色自动备份方法
  2. Android移动开发之【Android实战项目】DAY14-修改json里某个字段的值
  3. linux端口对外开放
  4. java学习(133):泛型
  5. 漫画:如何实现大整数相乘?(下)
  6. 图片标注尺寸_AutoCAD图纸与测量尺寸不一样怎么办
  7. mysql-表关系模型,一对一,一对多,多对多
  8. vins-mono中在rviz可视化下如何在world坐标系中让视角跟着相机移动
  9. php算法求出一个数可以被分解成多少个_最全的小学干货:34个数学重难点公式(三)...
  10. React-Native Fetch使用Promise封装(一)
  11. 51. yii csrf
  12. Matlab定义自定义深度学习网络中间层
  13. 业务需求、用户需求和功能需求
  14. Turtle库是Python语言中一个很流行的绘制图像的函数库
  15. 维度表和事实表的区别
  16. Sisvel和RPX签署Wi-Fi标准必要专利许可协议
  17. 随机预言机模型 Random Oracle Model
  18. Loj一本通刷题记录
  19. Python正则匹配 去除文本中的各类emoji表情符号
  20. 分享112个HTML娱乐休闲模板,总有一款适合您

热门文章

  1. 电工电子电力拖动及自动化技术考核实训台QY-DG800D
  2. php微信手机端上传图片,手机Wap微信端上传单图和上传多图的DEMO
  3. 电脑重启bootmgr_电脑出现bootmgr is missing怎么办
  4. SF1006-ASEMI超快恢复二极管SF1006
  5. Oracle提取中文字符串拼音首字母函数
  6. 关于安卓 dp与px的理解
  7. 工程伦理--4.2 划界法
  8. Bezier曲线生成【计算机图形学】
  9. 如何在virtualBox中安装MacOs教程
  10. windows 2000 系统的不同版本