拟牛顿法求解非线性方程

  • 开始
    • 牛顿迭代法
    • 拟牛顿法
    • 数值计算比较

开始

最近博主在研究非线性方程组的解法,有很多种方法,这里主要对牛顿迭代拟牛顿迭代进行阐述与对比,由于水平有限,若有错误还请见谅并指出。

牛顿迭代法

相信许多学过《数值分析》课程的朋友都对大名鼎鼎的牛顿迭代不会陌生,但是对于方程组的求解还是有些许的区别,这里的区别不是理论上的区别,而是在计算过程中是矩阵运算,而不是一个数的运算。下面言归正传。
牛顿迭代利用了当前迭代点的位置信息和切线信息。
0=F(x∗)≈F(xk)+F′(xk)(x∗−xk)0=F(x^*)\approx F(x^k)+F'(x^k)(x^*-x^k) 0=F(x∗)≈F(xk)+F′(xk)(x∗−xk)当然此时F′(xk)F'(x^k)F′(xk)就是Jacobian矩阵带入xkx^kxk的值。
好了,根据上式,我们可以轻易退出xkx^kxk的迭代公式:
xk+1=xk−(F′(xk))−1(F(xk))x^{k+1}=x^k-(F'(x^k))^{-1}(F(x^k)) xk+1=xk−(F′(xk))−1(F(xk))每一次迭代都是当前点的切线与F(xk+1)=0F(x^{k+1})=0F(xk+1)=0相交进而求得下一次迭代点。很简单把,利用上述公式可以很快求出不动点x∗x^*x∗。牛顿迭代是二阶收敛,速度还是很快的。但是牛顿迭代也有一些限定条件,即初始点要充分靠近x∗x^*x∗。但很多问题中上述条件是不好满足的。

拟牛顿法

众所周知,对于矩阵逆的求解,运算量是比较大的,更别说每次迭代都要计算一次。所以拟牛顿法出现了。拟牛顿法既保留了牛顿法收敛速度快的优点,又克服了需要每次计算Jacobian矩阵的逆这一问题。它的主要思想的利用割线而非切线的信息。
先摆出后面要用到的拟牛顿方程
Ak+1(xk+1−xk)=F(xk+1)−F(xk)A_{k+1}(x^{k+1}-x^{k})=F(x^{k+1})-F(x^k) Ak+1​(xk+1−xk)=F(xk+1)−F(xk)是不是很熟悉,这不就是以前学过的割线方程吗,Ak+1A_{k+1}Ak+1​可以认为是经过两点连线的斜率。但是由拟牛顿方程并不能确定矩阵Ak+1A_{k+1}Ak+1​,因此,天才的数学家又给它加了一个修正方程
Ak+1=Ak+ΔAkA_{k+1}=A_k+\Delta A_k Ak+1​=Ak​+ΔAk​没经过一次迭代,AkA_kAk​都要根据这个方程进行更新。ΔAk\Delta A_kΔAk​的不同造就了不同的拟牛顿方法。AkA_kAk​增量矩阵的秩为1时称为秩1方法,AkA_kAk​秩为2时称为秩2方法,应用广泛的DFP和BFGS均为秩2方法。

  1. Broyden秩1方法
    ΔAk=ukvkT\Delta A_k=u_kv_k^TΔAk​=uk​vkT​,其中uku_kuk​和vkTv_k^TvkT​均为向量。

    sk=xk+1−xk,yk=F(xk+1)−F(xk)s_k =x^{k+1}-x^{k}, y_k=F(x^{k+1})-F(x^{k}) sk​=xk+1−xk,yk​=F(xk+1)−F(xk)令vk=ukv_k=u_kvk​=uk​可得
    ΔAk=1∣∣sk∣∣2(yk−Ak∗sk)skT\Delta A_k=\frac{1}{||s_k||^2}(y_k-A_k*s_k)s_k^T ΔAk​=∣∣sk​∣∣21​(yk​−Ak​∗sk​)skT​于是得到迭代步骤为:xk+1=xk−Ak−1F(xk)sk=xk+1−xk,yk=F(xk+1)−F(xk)Ak+1=Ak+1∣∣sk∣∣2(yk−Ak∗sk)skTx^{k+1}=x^k-A_k^{-1}F(x^k)\\ s_k =x^{k+1}-x^{k}, y_k=F(x^{k+1})-F(x^{k})\\ A_{k+1}=A_k+\frac{1}{||s_k||^2}(y_k-A_k*s_k)s_k^T xk+1=xk−Ak−1​F(xk)sk​=xk+1−xk,yk​=F(xk+1)−F(xk)Ak+1​=Ak​+∣∣sk​∣∣21​(yk​−Ak​∗sk​)skT​
  2. 逆Broyden秩1方法
    为了避免求逆,可以应用逆Broyden秩1方法
    xk+1=xk−BkF(xk)sk=xk+1−xk,yk=F(xk+1)−F(xk)Bk+1=Bk+1skTBkyk(sk−Bkyk)skTBkx^{k+1}=x^k-B_kF(x^k)\\ s_k =x^{k+1}-x^{k}, y_k=F(x^{k+1})-F(x^{k})\\ B_{k+1}=B_k+\frac{1}{s_k^TB_ky_k}(s_k-B_ky_k)s_k^TB_k xk+1=xk−Bk​F(xk)sk​=xk+1−xk,yk​=F(xk+1)−F(xk)Bk+1​=Bk​+skT​Bk​yk​1​(sk​−Bk​yk​)skT​Bk​
  3. DFP
    这里只给出矫正公式:
    Bk+1=Bk+δkδkTδkTδk−BkykykTBkykTBkykB_{k+1}=B_k+\frac{\delta _k\delta _k^T}{\delta _k^T\delta _k}-\frac{B_ky_ky_k^TB_k}{y_k^TB_kyk}Bk+1​=Bk​+δkT​δk​δk​δkT​​−ykT​Bk​ykBk​yk​ykT​Bk​​
  4. BFGS
    同样只给出矫正公式
    Bk+1=Bk+ykykTykTδk−BkδkδkTBkδkTBkδkB_{k+1}=B_k+\frac{y_ky _k^T}{y_k^T\delta _k}-\frac{B_k\delta _k\delta _k^TB_k}{\delta _k^TB_k\delta _k}Bk+1​=Bk​+ykT​δk​yk​ykT​​−δkT​Bk​δk​Bk​δk​δkT​Bk​​
    BFGS被普遍认为是拟牛顿法中最好的一个,

数值计算比较

求解F(x)=0F(x)=0F(x)=0,其中
F(x)=[3x1−cos⁡(x2x3)−12x12−81(x2+0.1)2+sin(x3)+1.06exp(−x1x2)+20x3+13(10∗π−3)]F(x)=\begin{bmatrix} 3x_1-\cos(x_2x_3)-\frac{1}{2}\\x_1^2-81(x_2+0.1)^2+sin(x_3)+1.06\\exp(-x_1x_2)+20x_3+\frac{1}{3}(10*\pi-3)\end{bmatrix}F(x)=⎣⎡​3x1​−cos(x2​x3​)−21​x12​−81(x2​+0.1)2+sin(x3​)+1.06exp(−x1​x2​)+20x3​+31​(10∗π−3)​⎦⎤​

设置初始计算点为(0.1,0.1,0.1)T(0.1,0.1,0.1)^T(0.1,0.1,0.1)T,利用牛顿迭代只需7次迭代就可达到计算精度,第一张图显示了牛顿迭代计算过程。而利用BFGS计算,需要利用线搜索(armijo搜索)寻找合适的步长,步长的选取对算法的收敛性有明显影响,要小心选取参数进行计算,第二张图显示了BFGS计算过程,同样用了7次。但若如果在计算步长时参数设置不合适,那收敛过程可能非常缓慢。

牛顿法与拟牛顿法求解比较相关推荐

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

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

  2. 梯度下降法、随机梯度下降法、批量梯度下降法及牛顿法、拟牛顿法、共轭梯度法

    http://ihoge.cn/2018/GradientDescent.html http://ihoge.cn/2018/newton1.html 引言 李航老师在<统计学习方法>中将 ...

  3. 机器学习案例系列教程——优化方法总结(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

    梯度下降法 梯度下降法是最早最简单,也是最为常用的最优化方法.梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解.一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的.梯度 ...

  4. 算法细节系列(3):梯度下降法,牛顿法,拟牛顿法

    算法细节系列(3):梯度下降法,牛顿法,拟牛顿法 迭代算法原型 话不多说,直接进入主题.在我看来,不管是梯度下降法还是牛顿法,它们都可以归结为一个式子,即 x=ϕ(x) x = \phi(x) 也就是 ...

  5. 优化算法(一):牛顿法与拟牛顿法

    机器学习算法中经常碰到非线性优化问题,如 Sparse Filtering 算法,其主要工作在于求解一个非线性极小化问题.在具体实现中,大多调用的是成熟的软件包做支撑,其中最常用的一个算法是 L-BF ...

  6. 优化算法之梯度下降法、牛顿法、拟牛顿法和拉格朗日乘数法

      在机器学习中,优化方法是其中一个非常重要的话题,最常见的情形就是利用目标函数的导数通过多次迭代来求解最优化问题. - 无约束最优化问题:梯度下降法.牛顿法.拟牛顿法: - 有约束最优化问题:拉格朗 ...

  7. 牛顿法、拟牛顿法原理

    文章目录 非线性方程与其最优化方法 牛顿法原理 拟牛顿法原理 拟牛顿条件 DFP算法 BFGS算法 非线性方程与其最优化方法 非线性方程指方程的因变量与自变量之间的关系不是线性关系的方程,比如平方关系 ...

  8. 牛顿法与拟牛顿法(含代码实现)

    1. 牛顿法 牛顿法(英语:Newton's method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法. 牛顿法的基本思想 ...

  9. 一维搜索、最速下降(梯度下降)与牛顿法(拟牛顿法)

    目录 一维搜索 黄金分割法 牛顿法 最速下降法 牛顿法与拟牛顿法 参考 一维搜索 最优化问题一般选择某一组变量,然后在满足一定的限制条件下,求出使目标值达到最优(最大或最小)的变量值.大部分时候,最优 ...

  10. 常用的优化算法:梯度下降法,牛顿法,拟牛顿法,共轭梯度法

    目录 0.几个数学概念 1. 梯度下降法(Gradient Descent) 2. 牛顿法和拟牛顿法(Newton's method & Quasi-Newton Methods) 3. 共轭 ...

最新文章

  1. Oracle的in查询
  2. JavaScript基础07-day09【嵌套for循环、break和continue、对象、数据类型、对象字面量、函数】
  3. java线程池任务失败_ThreadPoolExecutor线程池任务执行失败的时候会怎样
  4. session很快失效_深夜,我偷听到程序员要对session下手...
  5. Linux的实际操作:文件目录类的实用指令(rm mv)
  6. 使用Jenkins自动部署博客
  7. Bailian4078 实现堆结构【模拟+优先队列】
  8. mysql buffer size_mysql read_buffer_size 设置多少合适
  9. python 词表里的词不符合_【NLP】词表太大怎么办—Adaptive softmax模型和代码解析...
  10. 制作游戏3D模型都有哪些步骤流程
  11. 霍营派出所办理居住证
  12. 能够真正骂醒你的励志视频,看完满血复活!
  13. [about phd]读博=
  14. 同感,在另外一个小华为待过,也差不多是这样的
  15. matplotlib marker 设置
  16. python制作的简单的猜数小游戏
  17. 使用 BFO 方式安装 Fedora 20
  18. mesos+marathon+docker
  19. Java Portlet 规范概述
  20. 学生用台灯什么颜色的灯光对眼睛好?推荐几款护眼台灯

热门文章

  1. 大一php,大一总结 - 我的大一 - php中文网博客
  2. 服务器状态错误是怎么回事,内部服务器错误500是什么?该如何解决?
  3. unity材质球发光_Unity3D中使物体自发光
  4. POJ 小白算法学习 任重而道远
  5. Tomcat配置指定JDK
  6. JavaScript数组every方法
  7. Adobe将支持HTTP流媒体直播 预示着ipad将可以用flash吗?
  8. UIkit之滚动监听+动画特效
  9. 第四章-2 hydra(九头蛇)与Medusa(美杜莎)
  10. 音频怎么转换mp3格式?