本文主要介绍几种用于解非线性方程f(x)=0
(1) Bisection Method.
算法:
step 1: 初始化a,b(b>a)
a,b(b>a) ,使f(a),f(b)f(a),f(b) 异号。step 2: while (停止条件不满足)
p=a+\frac{b-a}{2}
p=a+b?a ;2
若 f(p)f(a)<0
f(p)f(a)<0 ,b=pb=p ;否则a=pa=p 。end while
step 3: 返回的p
p 为方程f(x)=0f(x)=0 的解。
停止条件:
若采用式子\ref{equ:bisection1}n
?p
n?1
)=0
n
}
n
)
n
=∑
n
k=1
1
k
n
)|<?
n
|
1
0
n
=3
2
n
)|<10
?3
n
2
缺点:收敛太慢,为线性收敛。
(2) 固定点迭代(Fix-point iteration)。
定理:1)函数g
g 的定义域为[a,b][a,b] ,且对\forall x\in[a,b], g(x)\in [a,b]?x∈[a,b],g(x)∈[a,b] ,那么gg 一定有fixed-point。2)在(a,b)
(a,b) 中g^\prime(x) 存在,且存在|g^\prime(x)|\leq k<1 ,对\forall x\in (a,b) 成立,那么在[a,b] 内fixed-point唯一。
证明:1)如果g(a)=a 或者g(b)=b ,定理 1)成立。否则g(a)>a,g(b)<b ,令h(x)=g(x)-x, h(a)=g(a)-a, h(b)=g(b)-b<0 ,根据中值定理,必然存在p 使h(p)=g(p)-p=0 。
2)假设p,q 都是固定点,则\exists\xi, \frac{g(p)-g(q)}{p-q}=g^\prime(\xi) 。因此:
|p-q|=|g(p)-g(q)|=|g^\prime(\xi)||p-q|\leq k|p-q|<|p-q|
于k<1 矛盾,故p=q 。
算法:
step 1: 初始化p_0,\epsilon,N_0 ;
step 2: for i=1,...,N_0
p=g(p_0) ;
if |p-p_0|<\epsilon
break;
p_0=p ;
end for
step 3: 输出解p .
例子:
如果要解决f(x)=x^3+4x^2-10=0 这个方程,则可转化成x=x+f(x)=x^3+4x^2+x-10 。
收敛分析:
满足在定义域[a,b] 内g(x)\in[a,b] ,并且|g^\prime(x)|\leq k<1 ,那么固定点算法一定收敛。
证明:|p_n-p|=|g(p_{n-1})-g(p)|=|g^\prime(\xi_n)||p_{n-1}-p|\leq k|p_{n-1}-p|
迭代|p_n-p|\leq k^n(p_0-p) ,即\lim_{n\to\infty}|p_n-p|\leq \lim_{n\to\infty}k^n|p_0-p|=0
其中k 的大小可以用来表示收敛的快慢,若k 接近与1,则收敛的慢;若k 接近于0则收敛的快。
(3)Newton-Raphson Method.
从Taylor展开式看:
f(x)=f(\bar{x})+(x-\bar{x})f^\prime(\bar{x})+\frac{(x-\bar{x})^2}{2}f^{\prime\prime}(\xi(x))
其中\xi(x) 介于x 与\bar{x} 之间。所以:
f(p)=0=f(\bar{x})+(p-\bar{x})f^\prime(\bar{x})+\frac{(p-\bar{x})^2}{2}f^{\prime\prime}(\xi(x))
由于|p-\bar{x}| 很小\Longrightarrow |p-\bar{x}|^2 更小 \Longrightarrow 故可以近似成:
0\approx f(\bar{x})+(p-\bar{x})f^\prime(\bar{x})\Longrightarrow p=\bar{x}-\frac{f(\bar{x})}{f^\prime(\bar{x})}
从上式可以得到如下迭代式:
p_n=p_{n-1}-\frac{f(p_{n-1})}{f^\prime(p_{n-1})}
当f^\prime(p_{n-1})=0 时就无法进行。有定理证明Newton-Raphson 方法在区间[p-\delta,p+\delta] 内时一定会收敛到p ,但并未给出如何寻找这样的\delta 。
由于f^\prime(x) 往往很难计算,故提供一种计算f^\prime(x) 的近似方法。根据导数的定义:f^\prime(p_{n-1})=\lim_{x\to p_{n-1}}\frac{f(x)-f(p_{n-1})}{x-p_{n-1}} 。
令x=p_{n-2} ,得到f^\prime(p_{n-1})=\frac{f(p_{n-2})-f(p_{n-1})}{p_{n-2}-p_{n-1}} ,故其对应的迭代式子:
p_n=p_{n-1}-\frac{f(p_{n-1})(p_{n-1}-p_{n-2})}{f(p_{n-1})-f(p_{n-2})}
这种方法称为正割法(Secant method)。从直观上看:
根据Bisection方法的启示下可以得到一种新的迭代,称为试位法(False Position)。它的迭代式与Secant
method一样,但在确定迭代式中的p_0
与p_1
时采用Bisection method中的方法,即保证新得到的点在p_0
与p_1
之间。
(4)关于收敛.
定义:假定\{p_n\}_{n=0}^\infty 是一个收敛与p 的序列,且p_n\neq p ,如果存在正整数\lambda 和\alpha ,使\lim_{n\to\infty}\frac{|p_{n+1}-p_n|}{|p_n-p|^\alpha}=\lambda
,那么\{p_n\}_n^\infty 以order为\alpha 收敛于p ,\lambda 为渐进错误。当\alpha=1 时为线性收敛;
当\alpha=2 时为二次收敛。
理解:
假设\{p_n\}_{n=0}^\infty 是线性收敛于0,\lim_{n\to\infty}\frac{|p_{n+1}|}{|p_n|}=0.5 ;若\{p_n\}_{n=1}^\infty 是二次收敛于0,则\lim_{n\to\infty}\frac{|p_{n+1}|}{|p_n|^2}=0.5 。很显然,二次收敛的速度要快于线性收敛。
Bisection method是线性收敛。Fixed-point iteration的收敛速度是根据函数g(x) 而定,最优的情况下可以达到二次收敛。Newton-迭代在初始值选择合理的情况下可以达到二次收敛,但若初始值不合理,可能使Newton迭代发散,所以通常较好的做法是先用Bisection迭代一定次数得到的值作为Newton迭代的初始值。Secant Method的迭代order \alpha=1.62 .
加速收敛:采用Aitken‘s \Delta^2 method加速收敛序列。
当n 足够大时,对\{p_n\}_{n=0}^\infty 有:
\frac{p_{n+1}-p}{p_n-p}\approx\frac{p_{n+2}-p}{p_{n+1}-p}\Longrightarrow (p_{n+1}-p)^2\approx(p_{n+2}-p)(p_n-p)
所以p_{n+1}^2-2p_{n+1}p+p^2\approx p_{n+2}p_n-(p_n+p_{n+2})p+p^2
\Longrightarrow (p_{n+2}+p_n-2p_{n+1})p\approx p_{n+2}p_n-p_{n+1}^2
\begin{align*}\Longrightarrow p&\approx \frac{p_{n+2}p_n-p_{n+1}^2}{p_{n+2}-2p_{n+1}+p_n}\\&\approx \frac{p_{n+2}p_n-2p_{n+1}p_n+p_n^2+2p_{n+1}p_n-p_n^2-p_{n+1}^2}{p_{n+2}-2p_{n+1}+p_n}\\&\approx \frac{p_n(p_{n+2}-2p_{n+1}+p_n)-(p_n^2-2p_{n+1}p_n+p_{n+1}^2)}{p_{n+2}-2p_{n+1}+p_n}\\&\approx p_n-\frac{(p_n-p_{n+1})^2}{p_{n+2}-2p_{n+1}+p_n}\end{align*}
Aitken‘s \Delta^2 method 的迭代序列为:
\begin{equation}\tilde{p_n}=p_n-\frac{(p_{n+1}-p_n)^2}{p_{n+2}-2p_{n+1}+p_n}\label{equ:aitken}\end{equation}
大概的证明过程如下:
由\lim_{n\to\infty}\frac{p_{n+1}-p}{p_n-p}=\lambda 且\lim_{n\to\infty}\frac{\tilde{p_{n+1}}-p}{p_{n+1}-p}=0, \tilde{p_{n+1}}-p=\mathcal{O}(p_{n+1}-p)
\Longrightarrow \lim_{n\to\infty}\frac{\tilde{p_{n+1}}-p}{\tilde{p_n}-p}=0\Longrightarrow \exists\alpha>0,\lambda, \lim_{n\to\infty}\frac{\tilde{p_{n+1}}-p}{(\tilde{p_n}-p)^\alpha}=\lambda
由于Aitken‘s \Delta^2
method 需要初始化三个值,故结合fixed-point method得到 Steffensen‘s method。初始化一个p_0^{(0)},
p_1^{(1)}=g(p_0^{(0)}), p_2^{(0)}=g(p_1^{(0)})
, 用Aitken‘s \Delta^2
method迭代式计算p_0^{(1)}
......
(5)Fisher Scoring迭代。
它是用于解决最大似然方程的一种迭代。由于Newton-Raphson迭代算法对初始值的要求很高,当初始值选的不合理时会产生震荡现象,导致算法无法收敛,而用Fisher Scoring迭代则解决了上诉问题。
使用Newton-Raphson求最大似然估计值,设log似然函数为l(\theta) ,
其梯度向量:\nabla l(\theta^t)=[\frac{\partial l}{\partial \theta}]_{\theta^t} ;
海森矩阵:H(\theta^t)=[\frac{\partial^2l}{\partial\theta_i\partial\theta_j}]_\theta^t
l(\theta) 在\theta^t 处的泰勒展开:
l(\theta)=l(\theta^t)+\nabla l(\theta^t)(\theta-\theta^t)+\frac{1}{2}H(\theta^t)(\theta-\theta^t)^2
求导:\frac{\partial l}{\partial\theta}=\nabla l(\theta^t)+H(\theta^t)(\theta-\theta^t)=0
\Longrightarrow \theta^{t+1}=\theta^t-[H(\theta^t)]^{-1}\nabla l(\theta^t)
上述方法的缺点:
Jordan Lecture Note-6: The Solutions of Nonlinear Equation.
原文:http://www.cnblogs.com/boostable/p/lec_solutions_of_nonlinear_equation.html