非线性方程和方程组的数值解法
1. 引言
对于n次多项式方程,必定有n个复数根(代数基本定理)。
判断一个根是几重根,可以用导数来判断,如果 f ( m − 1 ) ( x ∗ ) = 0 f^{(m-1)}(x^*) = 0 f(m−1)(x∗)=0但是 f ( m ) ( x ∗ ) ≠ 0 f^{(m)}(x^*) \neq 0 f(m)(x∗)=0,那么 x ∗ x^* x∗是 f ( x ) = 0 f(x)=0 f(x)=0的m重根。
2. 二分法和割线法
2.1 二分法
基本原理就是《高等数学》中的 零点定理:只要连续函数在一个闭区间上端点的函数值异号,那么在这个闭区间内至少存在一个零点。
对这个区间进行二分,每次迭代都使区间长度缩小一半,始终保持两个端点函数值异号,当然这样能够求出一个解,所以为了保证在二分的过程中不漏解,需要保证区间内只存在唯一解。保证方法就是保证函数在区间内单调。
假设初始时区间为 [ a , b ] [a,b] [a,b],那么在第n次(初始算第一次)迭代后区间长度为:
b n − a n = 1 2 n − 1 ( b − a ) b_n-a_n=\frac{1}{2^{n-1}} (b-a) bn−an=2n−11(b−a)
令区间
[
a
n
,
b
n
]
[a_n,b_n]
[an,bn]的中点为
x
n
x_n
xn,而方程的精确解为
x
∗
x^*
x∗,那么 绝对误差界
ϵ
\epsilon
ϵ 为:
∣
x
n
−
x
∗
∣
≤
1
2
n
(
b
−
a
)
=
ϵ
|x_n-x^*| \leq \frac{1}{2^{n}} (b-a) = \epsilon
∣xn−x∗∣≤2n1(b−a)=ϵ
2.2 割线法
割线法的图像理解即为下图,即取区间端点构成的直线与x轴的交点作为新的区间长度。
割线法的公式可以由Newton迭代法推导出来。
上图中红线框的即为割线法迭代公式。
3. 不动点迭代法
3.1 不动点和不动点迭代法
设
f
(
x
)
f(x)
f(x)是一元连续函数,要解的方程是:
f
(
x
)
=
0
f(x )= 0
f(x)=0
为进行迭代,上式变成等价形式
x
=
φ
(
x
)
x=\varphi(x)
x=φ(x)
其中
φ
(
x
)
\varphi(x)
φ(x)是连续函数。当然,这种等价形式有无穷多个。
构造迭代公式:
x
k
+
1
=
φ
(
x
k
)
x_{k+1}=\varphi(x_k)
xk+1=φ(xk)
如果 lim k → ∞ x k = x ∗ \underset{k\rightarrow \infty}{\lim}x_k=x^* k→∞limxk=x∗,则: x ∗ = φ ( x ∗ ) x^*=\varphi(x^*) x∗=φ(x∗)。称 φ \varphi φ为 迭代函数, x ∗ x^* x∗为函数 φ \varphi φ的一个 不动点。 上述方法也称为 不动点迭代法。
显然并不是任何迭代函数都能式 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk)收敛。
当
φ
(
x
)
\varphi(x)
φ(x)满足以下两个条件时,迭代法必定收敛:
映内性 保证必定存在不动点。
压缩性 保证不动点在此区间内唯一,并且不动点迭代法必定收敛。
注意映内性和压缩性都是对区间 [ a , b ] [a,b] [a,b]上的任意一点成立。
对定理2.1的五个备注:
注意在第二备注中,Lipschitz 条件 并不容易判断,因为它要对区间 [ a , b ] [a,b] [a,b]上任意两点成立。没有导数判别法方便。
一些常见的不动点迭代的图像如下所示:
3.2 全局收敛性
满足上述定理2.1,就说明了在区间
[
a
,
b
]
[a,b]
[a,b]上的 全局收敛性。且有如下误差估计公式:
3.3 局部收敛性
通常全局收敛性因为对整个区间 [ a , b ] [a,b] [a,b]有要求,所以不易检验,为了缩小区间长度,引出了 局部收敛性 的定义和定理。
定义:
定理:
注意定义强调的是一个
δ
\delta
δ的小区间,而定理强调的是一个点
x
∗
x^*
x∗。
关于局部收敛定理,有两点需要注意:
-
这个定理仍然说明了 映内性 和 压缩性 ,“ x ∗ x^* x∗为 φ \varphi φ的不动点”就代替了映内性,并且比映内性还强,因为它说明了唯一性。可以证明 ∣ φ ′ ( x ∗ ) ∣ < 1 |\varphi'(x^*)| < 1 ∣φ′(x∗)∣<1与压缩性等价。
-
在使用这个定理进行判别时需要注意,我们并不知道真解 x ∗ x^* x∗的值,因为要求解的就是 x ∗ x^* x∗,所以 ∣ φ ′ ( x ∗ ) ∣ < 1 |\varphi'(x^*)| < 1 ∣φ′(x∗)∣<1这个也判定不了。
局部收敛性的好处是,这个 x ∗ x^* x∗的邻域可以自己定,只要在这个邻域内的导数绝对值小于1,那么它就是局部收敛的。
为了说明 局部收敛的速度 ,有如下 收敛阶 (收敛速度)的定义:
通过定义可以推导如下定理:
上述定理有两点需要注意:
- 真解 x ∗ x^* x∗仍然是不知道的
- 上述定理只能判断2阶收敛及2阶收敛以上的局部收敛,无法判断1阶收敛。
总结:
判断收敛阶的步骤:
假设我们知道了真解 x ∗ x^* x∗,计算得到:
(1) ∣ φ ′ ( x ∗ ) ∣ > 1 |\varphi'(x^*)| > 1 ∣φ′(x∗)∣>1,那么不动点迭代法必定发散
(2) ∣ φ ′ ( x ∗ ) ∣ = 1 |\varphi'(x^*)| = 1 ∣φ′(x∗)∣=1,那么不动点迭代法可能收敛可能发散
(3) 0 < ∣ φ ′ ( x ∗ ) ∣ < 1 0<|\varphi'(x^*)| < 1 0<∣φ′(x∗)∣<1,那么不动点迭代法收敛,且为1阶收敛。
(4) ∣ φ ′ ( x ∗ ) ∣ = 0 |\varphi'(x^*)|=0 ∣φ′(x∗)∣=0,那么继续计算导数,直到求导某一阶导数 ∣ φ ( m ) ( x ∗ ) ∣ ≠ 0 |\varphi^{(m)}(x^*)|\neq0 ∣φ(m)(x∗)∣=0,那么不动点迭代法收敛,且为m阶收敛。
4. Newton迭代法
4.1 Newton迭代法思路
Newton迭代法的思路:
显然
x
∗
x^*
x∗是公式(3.1)的解,即为
φ
(
x
)
=
x
−
f
(
x
)
/
f
′
(
x
)
\varphi(x)=x-f(x)/f'(x)
φ(x)=x−f(x)/f′(x)的不动点。Newton迭代法就是不动点迭代。
Newton迭代法的图像解释:
可以看到就是不断做曲线的切线,来逼近曲线与x轴的交点。
4.2 收敛性与收敛阶
对于Newton迭代法的收敛性与收敛阶,有如下定理:
注意定理中要求
x
∗
x^*
x∗为单重根,即
f
′
(
x
∗
)
≠
0
f'(x^*)\neq0
f′(x∗)=0。一旦
f
′
(
x
∗
)
=
0
f'(x^*)=0
f′(x∗)=0,那么就说明
x
∗
x^*
x∗为多重根,Newton迭代法仍然能够收敛,且为线性收敛(即一阶收敛)。
为了让Newton迭代法对重根仍然是平方收敛,有以下两种处理方式:
处理方式一:
但这个处理方式一需要知道
x
∗
x^*
x∗是
f
(
x
)
f(x)
f(x)的m重根,实际上
x
∗
x^*
x∗就是我们要求解的,因此根本不可能知道m。因此处理方式一一般用不了。
处理方式二:
5. 迭代加速收敛的方法
5.1 Aitken加速方法
如果一个序列 { x k } \{x_k\} {xk}线性收敛,那么可以通过Aitken加速方法,构造一个新的序列 { x ˉ k } \{\bar{x}_k\} {xˉk}使得它更加快地收敛。
构造方法如下:
值得注意的是,这个构造方法的前提是序列 { x k } \{x_k\} {xk}线性收敛,如果序列 { x k } \{x_k\} {xk}发散,那么加速方法不成立。并且这个加速方法只是说比序列 { x k } \{x_k\} {xk}收敛更快,但是不知道快多少,即有以下定理:
5.2 steffensen迭代方法
steffensen迭代方法可以看做是从Aitken加速方法演化而来的,根据不动点的迭代公式
x
k
+
1
=
φ
(
x
k
)
x_{k+1} = \varphi(x_k)
xk+1=φ(xk)
可以把
x
k
+
2
x_{k+2}
xk+2看做
φ
(
φ
(
x
k
)
)
\varphi(\varphi(x_k))
φ(φ(xk)),可以把
x
k
+
1
x_{k+1}
xk+1看做
φ
(
x
k
)
\varphi(x_k)
φ(xk),因此根据上式(4.1),可以构造迭代函数
ψ
(
x
)
\psi(x)
ψ(x)为:
关于steffensen迭代方法有如下定理:
注意,定理没要求
φ
(
x
)
\varphi(x)
φ(x)收敛,只要
x
∗
x^*
x∗为
φ
(
x
)
\varphi(x)
φ(x)的不动点即可,因此如果
φ
(
x
)
\varphi(x)
φ(x)不收敛,最后构造出来的
ψ
(
x
)
\psi(x)
ψ(x)能让它收敛到
x
∗
x^*
x∗。
6. 非线性方程组的数值解法
对于一个一元方程 f ( x ) = 0 f(x)=0 f(x)=0,我们可知其Newton迭代法为:
进一步改写一下,即为:
那么,对于二元方程组:
Newton迭代法的公式为:
其中:
那么对于n个n元非线性方程组,解法也与上面类似,求出雅可比矩阵后还需要对雅可比矩阵求逆。
参考文献:
关治,陆金甫《数值方法》