牛顿法与拟牛顿法求解比较

article/2025/8/26 14:46:28

拟牛顿法求解非线性方程

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

开始

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

牛顿迭代法

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

拟牛顿法

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

  1. Broyden秩1方法
    Δ A k = u k v k T \Delta A_k=u_kv_k^T ΔAk=ukvkT,其中 u k u_k uk v k T v_k^T vkT均为向量。

    s k = x k + 1 − x k , y k = F ( x k + 1 ) − F ( x k ) s_k =x^{k+1}-x^{k}, y_k=F(x^{k+1})-F(x^{k}) sk=xk+1xk,yk=F(xk+1)F(xk) v k = u k v_k=u_k vk=uk可得
    Δ A k = 1 ∣ ∣ s k ∣ ∣ 2 ( y k − A k ∗ s k ) s k T \Delta A_k=\frac{1}{||s_k||^2}(y_k-A_k*s_k)s_k^T ΔAk=sk21(ykAksk)skT于是得到迭代步骤为: x 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 + 1 ∣ ∣ s k ∣ ∣ 2 ( y k − A k ∗ s k ) s k T x^{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=xkAk1F(xk)sk=xk+1xk,yk=F(xk+1)F(xk)Ak+1=Ak+sk21(ykAksk)skT
  2. 逆Broyden秩1方法
    为了避免求逆,可以应用逆Broyden秩1方法
    x k + 1 = x k − B k F ( x k ) s k = x k + 1 − x k , y k = F ( x k + 1 ) − F ( x k ) B k + 1 = B k + 1 s k T B k y k ( s k − B k y k ) s k T B k x^{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=xkBkF(xk)sk=xk+1xk,yk=F(xk+1)F(xk)Bk+1=Bk+skTBkyk1(skBkyk)skTBk
  3. DFP
    这里只给出矫正公式:
    B k + 1 = B k + δ k δ k T δ k T δ k − B k y k y k T B k y k T B k y k B_{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δkTykTBkykBkykykTBk
  4. BFGS
    同样只给出矫正公式
    B k + 1 = B k + y k y k T y k T δ k − B k δ k δ k T B k δ k T B k δ k B_{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δkykykTδkTBkδkBkδkδkTBk
    BFGS被普遍认为是拟牛顿法中最好的一个,

数值计算比较

求解 F ( x ) = 0 F(x)=0 F(x)=0,其中
F ( x ) = [ 3 x 1 − cos ⁡ ( x 2 x 3 ) − 1 2 x 1 2 − 81 ( x 2 + 0.1 ) 2 + s i n ( x 3 ) + 1.06 e x p ( − x 1 x 2 ) + 20 x 3 + 1 3 ( 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)=3x1cos(x2x3)21x1281(x2+0.1)2+sin(x3)+1.06exp(x1x2)+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次。但若如果在计算步长时参数设置不合适,那收敛过程可能非常缓慢。
牛顿迭代
BFGS计算


http://chatgpt.dhexx.cn/article/1Jg6onng.shtml

相关文章

牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

原文:http://ihoge.cn/2018/newton1.html 前言: 线性最小二乘问题,我们可以通过理论推导可以得到其解析解,但是对于非线性最小二乘问题,则需要依赖迭代优化的方法,牛顿算法是解决非线性最优的常见算法之一…

牛顿法、梯度下降法与拟牛顿法

牛顿法、梯度下降法与拟牛顿法 0 引言1 关于泰勒展开式1.1 原理1.2 例子 2 牛顿法2.1 x 为一维2.2 x 为多维 3 梯度下降法4 拟牛顿法4.1 拟牛顿条件4.2 DFP 算法4.3 BFGS 算法4.4 L-BFGS 算法 0 引言 机器学习中在求解非线性优化问题时,常用的是梯度下降法和拟牛顿…

牛顿法(Newton‘s method)和拟牛顿法(quasi Newton method)

简述 在看伊恩古德费洛的深度学习,4.3节基于梯度的优化方法时提到 仅使用梯度信息的优化算法称为 一阶优化算法 ,如梯度下降。 使用Hessian矩阵的优化算法称为 二阶最优化算法 ,如牛顿法。 牛顿法和拟牛顿法时求解无约束最优化问题的常用方法…

最优化六:牛顿法(牛顿法、拟牛顿法、阻尼牛顿法)

牛顿法将目标函数近似为二阶函数,沿着牛顿方向进行优化(包含了Hession矩阵与负梯度信息)。 阻尼牛顿法在更新参数之前进行了一维搜索确定步长,确保沿着下降的方向优化。 拟牛顿法用常数矩阵近似替代Hession矩阵或Hession矩阵的逆…

quasi-Newton method 拟牛顿法

拟牛顿法是对牛顿法的改进,在看这一块内容以前,我们先来了解一下什么是 牛顿法。 拟牛顿法是求解非线性优化问题最有效的方法之一。 拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hess…

牛顿法与拟牛顿法

牛顿法 求函数的根 牛顿法的最初提出是用来求解方程的根的。我们假设点 x∗ 为函数 f(x) 的根,那么有 f(x∗)0 。现在我们把函数 f(x) 在点 xk 处一阶泰勒展开有: f(x)f(xk)f′(xk)(x−xk) 那么假设点 xk1 为该方程的根,则有 f(xk1)f(xk)f′…

最优化方法总结——梯度下降法、最速下降法、牛顿法、高斯牛顿法、LM法、拟牛顿法

目录 1 最优化方法的结构 2 常用最优化方法对比分析 3 相关计算公式 1 最优化方法的结构 最优化问题的一般形式为: 其中为决策变量,是目标函数,为约束集或可行域。特别地,如果,则最优化问题成为无约束最优化问题。 …

牛顿法与拟牛顿法学习笔记(二)拟牛顿条件

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

牛顿法与拟牛顿法学习笔记(一)牛顿法

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

最优化学习 拟牛顿法(Quasi-Newton Method)

拟牛顿法(Quasi-Newton Method) 拟牛顿法(Quasi-Newton Method)得到矩阵 B k 1 B_{k1} Bk1​获取 B k 1 B_{k1} Bk1​和 H k 1 H_{k1} Hk1​DFP方法(Davidon-Fletche Powell)BFGS方法(Broyden-Fletcher-Goldfarb-Shannon)Broyd…

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

1. 牛顿法 牛顿法(英语:Newton’s method)又称为牛顿-拉弗森方法(英语:Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法。 牛顿法的基本思想是使用函数 f ( x ) {\dis…

拟牛顿法(DFP、BFGS、L-BFGS)

拟牛顿法 一、牛顿法 1.1 基本介绍 牛顿法属于利用一阶和二阶导数的无约束目标最优化方法。基本思想是,在每一次迭代中,以牛顿方向为搜索方向进行更新。牛顿法对目标的可导性更严格,要求二阶可导,有Hesse矩阵求逆的计算复杂的缺…

Quasi-Newton拟牛顿法(共轭方向法)

Quasi-Newton拟牛顿法(共轭方向法) 1. Introduction2. 牛顿法2.1 不能保证收敛2.2 Hessian计算复杂3. 共轭方向法3.1 共轭方向3.2 共轭方向上可以收敛到极小3.3 共轭梯度法得到的是Q上的共轭方向3.4 算法效果4. 拟牛顿法4.1 拟牛顿法构造的是Q的共轭方向4.2 确定Hk - 秩1修正…

BFGS算法

今天,我来讲一种在机器学习中常用到的优化算法,叫做BFGS算法。BFGS算法被认为是数值效果最好的拟牛顿 法,并且具有全局收敛性和超线性收敛速度。那么接下来将会详细讲解。 Contents 1. 什么是拟牛顿法 2. 拟牛顿法原理 3. DFP算法原理 4. BF…

拟牛顿法及其matlab实现

目录 一.前言 二.拟牛顿法的基本思想 三.秩1矫正Hk公式 四.算法步骤 五.代码实现 1.秩1矫正算法 2.目标函数 3.目标函数梯度 4.主函数 六.仿真结果与分析 一.前言 上上上篇文章介绍了牛顿法和修正牛顿法。想看的话可以往后翻。牛顿法有二阶的收敛速度,但He…

InnoDB数据库死锁

目录 场景描述问题分析解决方法延伸:数据库死锁数据库死锁例子 正文 回到顶部 场景描述 在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction...)。 回到顶部 问题分析 这个异常并不会…

mysql数据库死锁原因分析

一、死锁模拟复现 1、当前自己电脑的mysql版本8.0.22 2、数据库的隔离级别--可重复读(默认隔离级别) 3、自动提交关闭 4、表结构,age为非唯一索引,对下面整个案例非常重要 5、 1、事务A执行更新操作,更新成功 2、事务…

处理数据库死锁问题

在实际的项目环境中碰到了如下的问题 Microsoft.Data.SqlClient.SqlException (0x80131904): 事务(进程 ID 98)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。 怀疑是因为数据库查询和修改中产生的死锁问题,造成的上述原因…

数据库死锁:原因和解决办法

理解数据库中的死锁 在数据库的上下文中,死锁是指两个或多个事务无法进行的情况,因为每个事务都在等待另一个事务释放资源。这可以类比为事务的循环链,每个事务都在等待链中的下一个事务释放资源。以下是一个死锁场景的视觉表示:…

Java面试必问:死锁(多线程死锁+数据库死锁)

死锁 接下来从几个方面介绍: 多线程死锁多线程死锁解决办法数据库死锁数据库死锁解决办法 多线程死锁是怎么造成的? 多线程锁定同一资源会造成死锁线程池中的任务使用当前线程池也可能出现死锁 参考连接: https://blog.csdn.net/qq_3506…