跳转至

Chapter 2 一元方程的求解 | Solutions of Equations in One Variable

约 1520 个字 5 张图片 预计阅读时间 8 分钟

2.0 停机程序 | Stopping procedure

我们可以选择一个精度要求ϵ,逐步迭代,直到满足下列条件之一:

  1. |xi+1xi|<ϵ
  2. |f(xi+1)|<ϵ
  3. |xi+1xi||xi+1|<ϵ

如果|xi+1xi|收敛于0而序列本身发散 ,1号会失效。

也有可能f(x)与0很接近,但是xnx差别很大,2号也不行了。

3号条件是能运用的最好的停机准则,因为它最接近测试相对误差。

2.1 二分法 | Bisection Method

Bisection Method

为什么要用a+(b-a)/2,而不用(b+a)/2?

  1. 因为a和b可能是很大的数,相加可能会溢出。
  2. 因为a和b可能是很小的数,相加可能会产生舍入误差。用此方法可以确保a+(b-a)/2落在a和b之间。
  3. 例如,用截断保留2位有效数字,a=0.91,b=0.93,(a+b)/2=1.8/2=0.9,而a+(b-a)/2=0.91+(0.93-0.91)/2=0.92。

2.2 不动点迭代 | Fixed-Point Iteration

Fixed-Point Iteration

不动点的存在性和唯一性的充分条件:

a. gC[a,b]g(x)[a,b],x[a,b],则g[a,b]上有不动点。

b. |g(x)|k<1,x(a,b),则该不动点是唯一的。

则对于任意p0[a,b],不动点迭代序列pn+1=g(xn)收敛于不动点。

且我们有误差限|pnp|kn1k|p1p0|,这将收敛速率和一阶导数的界联系起来。

误差界分析

|pn+1pn|=|g(pn)g(pn1)|=|g(ξ)||pnpn1|k|pnpn1|k2|pn1pn2|kn|p1p0|
|pnp|=|pnpn1+pn1pn2++p1p0||pnpn1|+|pn1pn2|++|p1p0|(kn1+kn2++1)|p1p0|=kn1k1|p1p0|kn1k|p1p0|

2.3 牛顿迭代法 | Newton's Method

就是用切线逼近零点,然后求切线与x轴的交点,作为下一个点,如此往复。

xn+1=xnf(xn)f(xn)

Newton

定理:设fC2[a,b],如果p[a,b]满足f(p)=0f(p)0,则存在δ>0,使得对任何初始值p0(pδ,p+δ),牛顿迭代法产生收敛于p的序列{pn}n=1

证明:

Alt text

牛顿迭代法的收敛性取决于初始近似值的选择。

2.4 迭代法的误差分析 | Error Analysis for Iterative Methods

假设{pn}n=0收敛于p,其中对pnp。如果存在正数λα,使得

limn|pn+1p||pnp|α=λ

则称{pn}n=0α阶收敛的(converges to p of order α),λ称为渐进误差常数(asymptotic error constant)。

一般具有高阶收敛性的序列收敛速度更快。

  • 如果α=1,则该序列是线性收敛的(linearly convergent)。

  • 如果α=2,则该序列是二次收敛的(quadratically convergent)。

不动点法

不动点法的收敛阶和渐进误差常数:

pn+1p=g(pn)g(p)=g(ξ)(pnp)|pn+1p||pnp|=|g(ξ)|limn|pn+1p||pnp|=limn|g(ξ)|=|g(p)|

因此,如果g(p)0,则不动点迭代法是线性收敛的,且渐进误差常数为|g(p)|

牛顿迭代法

牛顿迭代法的收敛阶和渐进误差常数:

由泰勒展开:

0=f(p)=f(pn)+f(pn)(ppn)+f(ξ)2(ppn)2p=pnf(pn)f(pn)f(ξ)2f(pn)(ppn)2limn|pn+1p||pnp|2=limn|f(ξ)|2|f(pn)|=|f(p)|2|f(p)|

因此,牛顿迭代法是二次收敛的,且渐进误差常数为|f(p)|2|f(p)|

不动点法的多重根情况

如果pg(x)的不动点,存在正整数m,使得g(p)=g(p)==g(m1)(p)=0,且g(m)(p)0,则称pn=g(pn1)以阶m收敛于p,渐进误差常数为|g(m)(p)|m!

pn+1=g(pn)=g(p)+g(p)(pnp)+g(ξ)2(pnp)2++g(m)(ξ)m!(pnp)mlimn|pn+1p||pnp|m=limn|g(m)(ξ)|m!=|g(m)(p)|m!

牛顿法的多重根情况

如果pfm重零点,则有f(x)=(xp)mq(x),记g(x)=xf(x)f(x),牛顿法即为 pn=g(pn1)

g(x)=1f(x)2f(x)f(x)(f(x))2=f(x)f(x)(f(x))2=(xp)mq(x)(m(m1)(xp)m2q(x)+2m(xp)m1q(x)+q(x)(xp)m)(m(xp)m1q(x)+q(x)(xp)m)2=(xp)2m2q(x)(m(m1)q(x)+2m(xp)q(x)+q(x)(xp)2)(xp)2m2(mq(x)+q(x)(xp))2=q(x)(m(m1)q(x)+2m(xp)q(x)+q(x)(xp)2)(mq(x)+q(x)(xp))2

所以

g(p)=q(p)m(m1)q(p)(mq(p))2=11m<1

由不动点法的迭代情况可知,此时为线性收敛,不为二次收敛。

牛顿法多重根下的优化

定义

μ(x)=f(x)f(x)

如果pfm重零点,f(x)=(xp)mq(x),则

μ(x)=(xp)mq(x)m(xp)m1q(x)+q(x)(xp)m=(xp)q(x)mq(x)+q(x)(xp)

q(p)0,且

q(p)mq(p)+q(p)(pp)=1m0

所以pμ(x)的单根,那么我们对μ应用牛顿迭代法,就有

pn+1=g(pn)=pnμ(pn)μ(pn)=pnf(pn)f(pn)f(pn)f(pn)f(pn)f(pn)(f(pn))2=pnf(pn)f(pn)f(pn)2f(pn)f(pn)

这就是让有多重根的牛顿法二次收敛的方法。

  1. 要求二阶导
  2. 分母由两个接近于0的数相减,会引起严重的舍入误差。

2.5 加速收敛 | Accelerating Convergence

二次收敛是很少可以得到的,我们在日常中总会碰到线性收敛。为了考虑如何加速线性收敛序列的收敛速度,下面介绍——AITKENΔ2方法

AITKENΔ2方法

Δ

对于给定的序列,向前差分(forward difference)定义为Δpn=pn+1pn,对于更高的幂,我们有Δkpn=Δ(Δk1pn),比如Δ2pn=Δ(Δpn)=Δ(pn+1pn)=(pn+2pn+1)(pn+1pn)

假设{pn}n=0是线性收敛的,其极限为p

为了便于构造比{pn}n=0收敛更快的序列{p^n}n=0,我们假设pnp,pn+1p,pn+2p的符号一致,又假设n足够大,有

pn+1ppnppn+2ppn+1p

从而

pn+122pn+1p+p2pn+2pn(pn+pn+2)p+p2

解出p,得到

ppn+2pnpn+12pn+22pn+1+pnpn(pn+1pn)2pn+22pn+1+pn

于是,我们可以构造序列{p^n}n=0,其中

p^n=pn(pn+1pn)2pn+22pn+1+pn=pn(Δpn)2Δ2pn

这样定义序列的方法就是AITKENΔ2

为什么说更快?

可以证明

limnpn^ppnp=0

怎么迭代?

其实还是用序列本身的迭代法,不过在计算值的时候采取了AITKENΔ2法。

构造按如下顺序:

p0,p1=g(p0),p2=g(p1)p0^={Δ2}(p0)p3=g(p2)p1^={Δ2}(p1)

Steffensen 方法

这个方法假设p0^p2更好地逼近p,从而把上述过程第三行的不动点迭代应用到p0^

p0(0),p1(0)=g(p0(0)),p2(0)=g(p1(0))p0(1)={Δ2}(p0(0))p1(1)=g(p0(0))

算法如下:

Steffensen

注意Δ2pn可能为0,如果发生,则终止并选取p2(n1)为近似解。

我们一般要求g(p)0,则在邻域内Steffensen法是二次收敛的