python 拟牛顿法 求非线性方程_多元非线性最优化、极值、解方程组

本文介绍了非线性优化中的几种迭代方法,包括最速下降法、牛顿法、高斯牛顿法、拟牛顿法以及LM(Levenberg-Marquardt)算法。牛顿法利用二阶导数信息,但要求较高;拟牛顿法则对Hessian矩阵的逆进行近似;LM算法则在高斯牛顿法基础上解决奇异问题。文章还提供了Python代码示例,帮助理解这些方法的实现。
摘要由CSDN通过智能技术生成

牛顿、拟牛顿、高斯牛顿、LM迭代法

约束非线性最优化的数值算法大致可以分为 基于梯度的方法和直接搜索方法,基于梯度的方法使用一阶导数 (梯度) 或二阶导数(黑塞(Hessians)矩阵)。通常情况下,算法只建立问题的局部模型。此外,许多这种算法总是寻求目标函数,或者由目标函数和约束条件合成的一个优值函数的某种减小,来确保迭代过程的收敛。如果收敛的话,这种算法只找到局部最优解,因此被称为局部最优化算法。

基本概念

  • 方向导数:函数在自变量的某个方向上的导数。以一个二元函数为例,自变量有x和y,该函数在某一点方向有(x,y)这个向量组成的无穷多个。

  • 梯度:梯度是一个矢量,在这个方向上的方向导数达到最大值。某一点的梯度就是某一点方向导数的最大值,也就是从该点出发函数值变化最剧烈的方向(梯度方向代表增加最快的方向,负梯度方向代表减少最快的方向)。梯度的求法即为该点所有方向的偏导数组成的向量。

  • Jacobian矩阵:Rn→Rm是一个从欧式n维空间转换到欧式m维空间的函数。(注意理解方式)可以理解为这个函数由m个实函数组成: y1(x1,…,xn), …, ym(x1,…,xn),或者理解为这个函数的输出形式为这样的m维的向量。这些函数的偏导数(如果存在)可以组成一个m行n列的矩阵,这就是所谓的Jacobian矩阵,这个矩阵的第i行是由第i个函数的梯度函数的转置yi(i=1,…,m)表示的。

  • Hessian矩阵:

    对于这样的一个函数: a7a882844a69320c73076bbb0979c7bb.png,Hessian矩阵是它的二阶偏导数组成的方块矩阵。Hessian矩阵只针对一个函数,而不像Jacobian矩阵可以针对一个函数组。

优化思想

我们知道,泰勒公式是为了求解一个复杂的函数在某处附近(x0附近)的近似函数。最常用的是泰勒公式的前两阶展开式。从函数逼近的角度理解

8d77bc6aa842800e002579415ee6e3ec.png

利用上面的两个式子,我们知道,我们可以用x0(x0理解为一个离x很近的数)处的值,去逼近离x0不远的x处的值。也就是说,泰勒公式可以用一个离目标点近处的点,去求大概的目标点的值。

从迭代的角度理解,x可以写成x_k,而 x0可以写成x_k-1,意思就是第k次迭代f(x_k)的值,可以由不远处第k-1次迭代时候f(x_k-1)的值逼近而来

迭代方法

最速下降法(一阶梯度法)——用梯度直接当Δx

顾名思义,我们是每次找一个函数值下降最快的方向,不断更新x的值,最终下降到最优值。

我们给一个函数f(x)我们要求f(x)的最小值,我们需要打破初等数学学习的函数的概念,认识到f(x)可能是一个1à1的函数,也可能是Nà1的函数。

但对于解优化的问题,f(x)不可能是NàM的函数,原因在于如果输出是一个M维的向量,我们没办法定义输出的最值,所以必须输出是一个标量数字,我们这个问题才可以解。

我们已经讨论了,给定一点,该点下降最快的方向,就是反梯度的方向,而梯度的求法我们之前已经给出。所以,下一个逼近的x的值应该是:

bb06c20d99573eec56d50ddea5f267c9.png

其中α是步长,决定了每次迭代需要往反梯度方向走多远。f是多元函数时,梯度用Jacobian矩阵来表示。

牛顿迭代法

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f&#

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值