本文关注非线性方程(组)的解法,包括一元情况下非线性方程的bisetion, regula falsi, 不动点迭代, Newton法, 多元情况下非线性方程组的Newton法, Broyden法。与之对比的是线性方程组的求解,如LU分解、QR分解等。
Bisection
求解线性方程组 f(x)=0 相当于求解函数 f(x) 的零点。
利用零点存在性定理来求解的方法就是二分法。根据闭区间套定理,二分法的收敛性很容易证明。
同时,区间的长度每次减半,精度等于最终区间的长度。
Regula Falsi
Regula falsi 也即 false position bisection,是二分法的一种变种,与二分法的区别是采用线性插值零点作为新的二分点。与二分法一样,它也是能保证收敛性的。
这种方法相当于用线性函数来逼近原函数 f(x),那么很显然,当 f(x) 与线性函数越接近,regula falsi的效果越好;反之,它的效果差于二分法。
Fixed Point Iteration
不动点迭代是一种经典的求解非线性方程的方法。在求解线性方程组的问题中,不动点迭代法相当于 Jacobi 迭代法。
不动点迭代的核心思想是将 f(x)=0 转化为 x=g(x), 然后不断地进行迭代
xk+1=g(xk)
对于同一个问题,可以找到多个 g(x), 不动点迭代的效果取决于 g(x) 的好坏。
Linear Convergence
假设精确解为 x∗,其满足 x∗=g(x∗). 那么
xk+1−x∗=g(xk)−g(x∗)=g′(ξk)(xk−x∗)≤∣g′(ξk)∣∣xk−x∗∣
当 ∣g′(x)∣<1,∀x 时, 具有全局线性收敛性。
假设仅有 ∣g′(x∗)∣<1, 且 g′(x) 连续,则有局部线性收敛性。
Quadratic Convergence
当 g′(x∗)=0 时,在 x∗ 的邻域进行泰勒展开,有
xk+1−x∗=g(xk)−g(x∗)=2!g′′(ξ)(x−x∗)2≤C(xk−x∗)2,∃C
具有局部二次收敛性
Newton’s Method
Basic Newton’s Method
Newton 法的思想是用切线来近似 f(x), 即 f(x)≈f(x0)+f′(x0)(x−x0)
Newton 法的迭代公式为
xk+1=xk−f′(xk)f(xk)
实际上,它是一种精心构造的不动点迭代法。令
g(x)=x−f′(x)f(x)
g′(x)=1−(f′(x))2(f′(x))2−f(x)f′′(x)=(f′(x))2f(x)f′′(x)
当 f′(x∗)=0 时,根据前面的结论可以知道此时 Newton 法具有局部二次收敛。
可以证明当 x∗ 为重根(i.e. f(x∗)=f′(x∗)=⋯=f(m)(x∗)) 时,依然具有局部线性收敛性。
对于重根,可以做以下修正
xk+1=xk−f′(xk)(m+1)f(xk)
这样也有局部二次收敛性,读者可以自行证明。
Secant Method
当求导的操作很贵时,可以考虑用割线来代替割线
f′(xk)≈xk−xk−1f(xk)−f(xk−1)
xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1)
可以证明采用割线法,收敛阶为黄金分割比例 21+5≈1.618
引入 Newton 插值中 n 阶差商的记号 f[x1,x2,…,xn]=i=1∑k+1f(xi)j=i∏(xi−xj)−1
这样,已知给定 xk,xk−1,加入 x∗ 进行插值,可以得到
0=f(x∗)=f(xk)+f[xk,xk−1](x∗−xk)+f[xk,xk−1,x∗](x∗−xk)(x∗−xk−1)
利用差商重写迭代公式
0=f(xk)+f[xk,xk−1](xk+1−xk)
两式相减可以得到
x∗−xk+1=−f[xk,xk−1]f[xk,xk−1,x∗](x∗−xk)(x∗−xk−1)
根据 Roole 中值定理,n 阶差商具有以下性质
f[x1,…,xn+1]=f(n)(ξ)/n!
所以当 f 的一阶和二阶导数均有界时,有
∣x∗−xk+1∣≤M∣x∗−xk∣∣x∗−xk−1∣,∃M
这与 Fibonacci 数列 Fk 十分相关,可以证明
∣x∗−xk∣≤C∣x∗−x0∣Fk
根据 Fk 的通项公式,可以知道收敛阶为黄金分割比例 21+5≈1.618
Steffensen’s Method
迭代公式如下
xk+1=xk−f(xk)f(xk+f(xk))−f(xk)f(xk)=xk−f(xk+f(xk))−f(xk)(f(xk))2
这种方法二次收敛
非线性方程组的求解
以上的都是求解一元非线性方程的方法。以下讨论非线性方程组的解法 (特别指 Rn↦Rn).
Newton’s Method
与一元的类似,将导数换成了Jacobi矩阵
xk+1=xk−Jk−1f(xk)
Good Broyden Method
在 Newton 法中,可以看出一个缺点是每一步迭代都要求解一次线性方程组,时间复杂度是 O(n3),很不划算。Broyden 方法就是为了解决这一问题。
它的目标是近似地求 Jk,从而使得求逆变得方便。很容易联想到 Sherman-Morrison-Woodbury 公式
(A+uvT)−1=A−1−1+vTA−1uA−1uvTA−1
假如每次更新 Jk 都只加入秩一修正,那么就好办了
JK=Jk−1+[rank 1]
因为 Jk 为 Jacobi 矩阵,所以它应该满足 JkΔxk=Δfk,这样当迭代足够多次后,Jk 能较好地近似真实的 Jacobi 矩阵。
令 rk=Δfk−Jk−1Δxk=ΔJΔxk
因为 rank(ΔJ)=1, ∃yk,ΔJ=rkykT,ykTΔxk=1. 同时,要使得 ∣∣ΔJ∣∣F=∣∣rk∣∣2∣∣yk∣∣2 最小.
由 Cauchy 不等式可知 ∣∣yk∣∣2∣∣Δxk∣∣2≥1, 因此 ∣∣yk∣∣2≥∣∣Δxk∣∣21, 当且仅当 yk=ΔxkTΔxkΔx时,等号成立
所以可以知道 Jk 的更新公式
Jk=Jk−1+ΔxkTΔxk(Δfk−Jk−1Δxk)ΔxkT
代入 Sherman-Morrison-Woodbury 公式可得
Jk−1=Jk−1−1−ΔxkTΔxk+ΔxkTΔxk(Δfk−Jk−1Δxk)Jk−1−1(Δfk−Jk−1Δxk)ΔxkTJk−1−1=Jk−1−1+ΔfkTΔfk(Δxk−Jk−1−1Δfk)ΔxkTJk−1−1
Bad Broyden Method
所谓 Good 和 Bad,其实并不表示实际效果的好坏,只是两种方法名字的区分。Bad Broyden 方法是直接对 Jk−1 做秩一修正,也就是要满足
Jk−1=Jk−1−1+ΔJ
Δxk=Jk−1Δfk
相同的处理,最终可以得到更新公式
Jk−1=Jk−1−1+ΔfkTΔfk(Δxk−Jk−1Δfk)ΔfkT