非线性方程组的解法

3 minute read

Published:

本文包括了二分法及其变种,不动点迭代法,和基于不动点迭代法的Newton迭代法,以及Secant方法、Broyden方法等经典的伪Newton方法。

线性方程的解法通常基于高斯消元或者称为LU分解,本文关注于实际中更常见的非线性方程组。

Bisection Method

Naive Bisection

非线性方程组的解法本质为求根问题,也即寻找 $x$满足$f(x) = 0$.

二分法是最简单的求根方法,本质上利用的是零点存在性定理。

根据闭区间套定理,二分法的收敛性是显然的,且由于每次二分中点,设定数值精度$\tau$, 假定初始区间为$[a,b]$,二分法可以保证在$\log\frac{b-a}{\tau}$的步数内收敛。

False Position Bisection

如果每次不是二分其中点,而是采用线性插值点作为新的二分点,将得到一种二分法的变种。

也即,相较于原来的方法,二分$c = \frac{a+b}{2}$。在变种的方法中,二分的是,$c = \frac{a f(b) - b f(a)}{f(b)-f(a)}$

上式$c$可以根据三点共线的条件解得,

\[det \begin{pmatrix} a & f(a) & 1 \\ b & f(b) & 1 \\ c & 0 & 1 \end{pmatrix} = 0\]

上述方法基于的思想在于,若在$[a,b]$内$f(x)$为线性函数,则上述方法找到的$c$恰好是线性函数的根。而当$[a,b]$区间长度很小的时候,$f(x)$也是接近于线性的。

上述方法同样也是保证收敛性的,但却不能保证收敛步数,在实际中可能慢于或者快于普通的二分法。

Fixed Point Iteration

不动点迭代法是一种经典的解非线性方程组的方法,对于线性方程组不动点迭代法实际上为Jacobi迭代法。

不同于直接寻找$f(x)=0$的根,不动点迭代法将等式变形为,寻找$g(x)=x$的根。

并且基于不断将$g(x)$作用在原本的$x$上面进行迭代,

\[x_{k+1} = g(x_k)\]

简单的转换方法是,令$g(x) = f(x) +x$,但对于同个问题往往有多种转化方法,不同方法的效果取决于函数$g(x)$的性质。

下面根据$g(x)$的不同性质讨论其收敛性。

Global Linear Coverage

当$ \Vert g’(x) \Vert < 1$的时候,不动点迭代法保证全局收敛性。

假设理论解为$x_{\star}$,其满足$x_{\star} = g(x_{\star})$,且在$x_k$的邻域中,存在上界$L < 1$, $\Vert g’(x) \Vert \le L$,根据 Lagrange中值定理,

\[\Vert x_{k+1} - x_{\star} \Vert = \Vert g(x_{k}) - g(x_{\star}) \Vert \le L \Vert x_k - x_{\star} \Vert\]

由于$L <1 $,此时不动点迭代法收敛。

Local Quadratic Coverage

当$g(x)$满足一些额外条件时,通常可以在局部得到更高阶的收敛性,例如:

当$g’(x_{\star}) = 0$的时候,不动点迭代法满足局部二次收敛(Quadratic Coverage),证明在$x_{\star}$的邻域使用Taylor展开即可,

\[\Vert x_{k+1} - x_{\star} \Vert = \Vert g(x_{k}) - g(x_{\star}) \Vert = \Vert \frac{g''(x_{\star})}{2} (x_{k} - x_{\star})\Vert \le C\Vert x_{k} - x_{\star} \Vert^2,\exists C\]

Newton’s Method

Basic Newton Method

Newton法基于$x_k$的邻域的Taylor展开,

\[f(x_{k+1}) = f(x_k) + f'(x_k)(x_{k+1}-x_k) + o(\Vert x_{k+1} - x_k \Vert^2)\]

在$x_k$的邻域中,我们忽略二阶无穷小量,也即用切线近似函数。为了寻找到根,我们希望$f(x_{k+1})=0$,因此令,

\[0 = f(x_k) + f'(x_k)(x_{k+1}-x_k)\]

从而得到Newton法的迭代公式,

\[x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}\]

Newton法也可以看作一种不动点迭代法:

\[\begin{align} \text{Let } & g(x) = x - \frac{f(x)}{f'(x)} \\ \text{Then } & g(x_{\star}) =0 \\ &g'(x_{\star}) = 1- \frac{(f'(x_{\star}))^2 - f(x_{\star}) f''(x_{\star})}{(f'(x_{\star}))^2} = 0 \end{align}\]

因此,根据不动点迭代法的收敛条件,Newton迭代法也满足局部二次收敛。


Newton法有很多变种,比如在更新的时候加上系数$\lambda_k$作为阻尼因子也即带阻尼的牛顿法。

\[x_{k+1} = x_k - \lambda_k \frac{f(x_k)}{f'(x_k)}\]

如果对于一阶导数(Jacobi矩阵)采用某些近似方法,则称为伪牛顿法(Quasi-Newton Method),本节主要考虑几个经典的方法,并且证明其一些理论性质。

Secant Method

Secant方法的核心是将Newton法中的一阶微分用一阶差分代替:

\[\begin{align} \text{Since } f'(x_k) &\approx \frac{f(x_k)-f(x_{k-1})}{x_k - x_{k-1}} \\ \text{Let } x_{k+1}& = x_k - \frac{f(x_k)(x_k - x_{k-1})}{f(x_k)-f(x_{k-1})} \\ \end{align}\]

可以证明采用Secant方法,其收敛阶是黄金分割比例$\frac{1+\sqrt{5}}{2}$.

证明用到了Fibonacci数列形式的归纳递推,以及利用了Newton插值。

关于Newton插值,可以参见 插值

利用Newton插值,给定$x_{k},x_{k-1}$,可以对任意点$x_{\star}$进行插值, 下式的$f[x_1,x_2,..,x_n]$表示Newton插值中的$n$阶差分。

\[0 = f(x_{\star}) = f(x_{k}) + f[x_{k},x_{k-1}] (x_{\star}- x_k) + f[x_k,x_{k-1},x_{\star}] (x_\star - x_k) (x_{\star} - x_{k-1})\]

利用差分的符号重写Secant法中的迭代公式,

\[0 = f(x_k) + f[x_k,x_{k-1}] (x_{k+1}-x_k)\]

将两式相减可以得到,

\[x_{\star} - x_{k+1} = -\frac{f[x_k,x_{k-1},x_{\star}]}{f[x_k,x_{k-1}]} (x_{\star} - x_{k})(x_{\star}-x_{k-1})\]

根据中值定理,并且假设在$x_{\star}$的邻域内其一阶和二阶导数均有界,

\[\Vert x_{\star} - x_{k+1} \Vert \le M \Vert x_{\star} - x_{k} \Vert \Vert x_{\star}-x_{k-1} \Vert, \exists M\]

上式本质上和Fibonacci数列$F_k$非常相关,可以通过归纳法证明,归纳细节是显然的,只要注意参数的取值(包括归纳假设的满足等)

\[\Vert x_{\star} - x_k \Vert \le C \Vert x_{\star} - x_0 \Vert^{F_k}, \exists C\]

再根据$F_k$的通项公式,则可以得到Secant方法的收敛阶是黄金分割比例$\frac{1+\sqrt{5}}{2}$.

Good Broyden‘s Method

Broyden方法的思想是对Jacobi矩阵进行最小代价的秩一修正,使得Secant方法中的切线近似在修正后得到满足,

\[\begin{align} & J_k = J_{k-1} + \Delta J\\ & J_k \Delta x_k = \Delta f_k \\ \text{s.t. } & rank(\Delta J) = 1, \min \Vert \Delta J \Vert_F \end{align}\]

令$r = \Delta f_k - J_{k-1} \Delta x_k$, 则$\Delta J \Delta x = r$.

由于$rank(\Delta J)=1$, $\exists y, \Delta J = r y^T, y^T \Delta x = 1$

根据Frobenius范数和二范数的关系,有$ \Vert \Delta J \Vert_F = \Vert r \Vert_2 \Vert y \Vert_2$

也即要最小化$\Vert y \Vert_2$, 又根据Cauthy不等式,$\Vert y \Vert_2 \Vert \Delta x \Vert_ 2 \ge 1$,因此$\Vert y \Vert_2 \ge \frac{1}{\Vert \Delta x \Vert_2}$

当且仅当$y = \alpha \Delta x$ 也即共线的时候取等,此时$\alpha = \frac{1}{\Delta x^T \Delta x}$

得到最终Jacobi矩阵的更新公式,

\[J_k = J_{k-1} + (\Delta f_k - J_{k-1} \Delta x_k) \frac{\Delta x_k^T}{\Delta x_k^T \Delta x_k}\]

由于Newton法中需要计算Jacopbi矩阵的逆矩阵,对于秩一修正的矩阵求逆,使用Shermann–Morrison–Woodbury公式,

\[\begin{align} J_k^{-1} &= (J_{k-1} + (\Delta f_k - J_{k-1} \Delta x_k) \frac{\Delta x_k^T}{\Delta x_k^T \Delta x_k})^{-1} \\ &= J_{k-1}^{-1}- \frac{J_{k-1}^{-1} (\Delta f_k - J_{k-1} \Delta x_k) \Delta x_k^T J_{k-1}^{-1}}{\Delta x_k^T \Delta x_k+ \Delta x_k^T J_{k-1}^{-1}(\Delta f_k - J_{k-1} \Delta x_k)} \\ &= J_{k-1}^{-1} + \frac{(\Delta x_k - J_{k-1}^{-1} \Delta f_k) \Delta x_k^T J_{k-1}^{-1}}{\Delta x_k^T J_{k-1}^{-1}\Delta f_k} \end{align}\]

综上,得到了Good Broyden方法的迭代公式,

\[\begin{align} x_{k+1} &= x_k - J_k^{-1} f(x_k) \\ \text{With }J_k^{-1} &= J_{k-1}^{-1} + \frac{(\Delta x_k - J_{k-1}^{-1} \Delta f_k) \Delta x_k^T J_{k-1}^{-1}}{\Delta x_k^T J_{k-1}^{-1}\Delta f_k} \\ \Delta x_k & = x_k - x_{k-1}, \Delta f_k = f(x_k) - f(x_{k-1}) \\ \end{align}\]

Bad Broyden’s Method

Bad Broyden方法不同于Good Broyden方法先对$J$做秩一修正,再用Shermann–Morrison–Woodbury公式求逆,Bad Broyden方法直接对$J^{-1}$做秩一修正。(这里的Bad 和Good其实只是方法名字的区分,并不代表实际效果的好坏)

也即满足秩一修正条件为,

\[\begin{align} & J_k^{-1} = J_{k-1}^{-1} + \Delta J\\ & J_k \Delta x_k = \Delta f_k \\ \text{s.t. } & rank(\Delta J) = 1, \min \Vert \Delta J \Vert_F \end{align}\]

此时定义,$r_k = \Delta x_k - J_{k-1}^{-1} \Delta f_k$,类似Good Broyden方法中的推导,$\Delta J \Delta f_k = r_k$。

再根据最小化$\Vert \Delta J \Vert_F$的条件,同样类似地可以得到,$\Delta J = \frac{r_k \Delta f_k^T}{\Delta f_k^T \Delta f_k}$

综上得到,最终迭代公式为,

\[\begin{align} x_{k+1} &= x_k - J_k^{-1} f(x_k) \\ \text{With }J_k^{-1} &= J_{k-1}^{-1} + (\Delta x_k - J_{k-1}^{-1} \Delta f_k) \frac{\Delta f_k^T}{\Delta f_k^T \Delta f_k} \\ \Delta x_k & = x_k - x_{k-1}, \Delta f_k = f(x_k) - f(x_{k-1}) \\ \end{align}\]