数值分析-方程迭代求根
前言
有时候我们需要知道非线性方程在某个区间内是否存在根,存在的话有几个等问题,直接求解往往是困难,可以通过迭代的思想去逼近根,比如经典的二分法和牛顿迭代法。
具体内容详见 《数值分析》 李庆扬、王能超、易大义(华中科大出版社)第六章
迭代过程及其收敛性分析
-
设有待求根方程 f ( x ) f(x) f(x),将其写成隐式方程格式: x = ϕ ( x ) x=\phi(x) x=ϕ(x),给出根的某个猜想值 x 0 x_0 x0代入得到 x 1 = ϕ ( x 0 ) x_1=\phi(x_0) x1=ϕ(x0),重复这个过程, x k + 1 = ϕ ( x k ) , ( k = 0 , 1 , . . . , n ) x_{k+1}=\phi(x_k),(k=0,1,...,n) xk+1=ϕ(xk),(k=0,1,...,n),若 { x k } \{ x_k \} {xk}存在极限 x ∗ = lim k → ∞ x k x^*=\lim_{k \rightarrow \infty} x_k x∗=limk→∞xk,则称此迭代过程收敛, x ∗ x^* x∗即为方程的根。
-
为了避免迭代过程发散,对迭代方程 x = ϕ ( x ) x=\phi(x) x=ϕ(x)作出以下约束:若存在定数 0 < L < 1 0< L <1 0<L<1,使对于任意 x ∈ [ a , b ] x \in [a,b] x∈[a,b]均有 ∣ ϕ ( x ) ′ ∣ ≤ L |\phi(x)^{'}| \leq L ∣ϕ(x)′∣≤L 则该迭代过程收敛,且存在唯一根。
-
证明存在零点:
由假设可知,对于 x ∈ [ a , b ] x \in [a,b] x∈[a,b],总有 ϕ ( x ) ∈ [ a , b ] \phi(x) \in [a,b] ϕ(x)∈[a,b],记 f ( x ) = ϕ ( x ) − x f(x)=\phi(x)-x f(x)=ϕ(x)−x,有 f ( a ) = ϕ ( a ) − a ≥ 0 , f ( b ) = ϕ ( b ) − b ≤ 0 f(a)=\phi(a)-a \geq0, f(b)=\phi(b)-b \leq 0 f(a)=ϕ(a)−a≥0,f(b)=ϕ(b)−b≤0,即 f ( x ) f(x) f(x)在 [ a , b ] [a,b] [a,b]上有根。
-
证明零点唯一:
设存在两个零点, x ∗ = ϕ ( x ∗ ) , x ˉ = ϕ ( x ˉ ) x^*=\phi(x^*), \bar{x}=\phi(\bar{x}) x∗=ϕ(x∗),xˉ=ϕ(xˉ), x ∗ − x ˉ = ϕ ( x ∗ ) − ϕ ( x ˉ ) = ϕ ′ ( ξ ) ( x ∗ − x ˉ ) x^*-\bar{x}=\phi(x^*)-\phi(\bar{x})=\phi^{'}(\xi)(x^*-\bar{x}) x∗−xˉ=ϕ(x∗)−ϕ(xˉ)=ϕ′(ξ)(x∗−xˉ),由于 ϕ ′ ( ξ ) ≤ 1 \phi^{'}(\xi) \leq 1 ϕ′(ξ)≤1,则 ( x ∗ − x ˉ ) (x^*-\bar{x}) (x∗−xˉ)只能为0,即只有一个零点。
-
证明收敛:
∣ x ∗ − x k ∣ = ∣ ϕ ( x ∗ ) − ϕ ( x k ) ∣ = ∣ ϕ ′ ( ξ ) ∣ ∣ x ∗ − x k ∣ ≤ L ∣ x ∗ − x k ∣ ≤ . . . ≤ L k ∣ x ∗ − x 0 ∣ |x^*-x_k|=|\phi(x^*)-\phi(x_k)|=|\phi^{'}(\xi)||x^*-x_k| \leq L|x^*-x_k| \leq ... \leq L^k |x^*-x_0| ∣x∗−xk∣=∣ϕ(x∗)−ϕ(xk)∣=∣ϕ′(ξ)∣∣x∗−xk∣≤L∣x∗−xk∣≤...≤Lk∣x∗−x0∣,又 lim k → ∞ L k = 0 \lim_{k \rightarrow \infty} L^k=0 limk→∞Lk=0,当k足够大时,迭代过程收敛。
-
给出误差估计式:
∣ x k − x ∗ ∣ ≤ L k 1 − L ∣ x 1 − x 0 ∣ ∣ x k − x ∗ ∣ ≤ 1 1 − L ∣ x k + 1 − x k ∣ |x_k-x^*| \leq \frac{L^k}{1-L}|x_1-x_0|\\|x_k-x^*| \leq \frac{1}{1-L}|x_{k+1}-x_k| ∣xk−x∗∣≤1−LLk∣x1−x0∣∣xk−x∗∣≤1−L1∣xk+1−xk∣即若两次迭代的结果相差足够小,就可以保证结果的精度。
迭代公式改进
- 记 x 0 x_0 x0是迭代初值,用迭代公式迭代一次得到: x 1 = ϕ ( x 0 ) x_1=\phi(x_0) x1=ϕ(x0),此时有微分中值定理: x 1 − x ∗ = ϕ ( x 0 ) − ϕ ( x ∗ ) = ϕ ′ ( ξ ) ( x 0 − x ∗ ) x_1-x^*=\phi(x_0)-\phi(x^*)=\phi^{'}(\xi)(x_0-x^*) x1−x∗=ϕ(x0)−ϕ(x∗)=ϕ′(ξ)(x0−x∗)若 ϕ ′ ( ξ ) \phi^{'}(\xi) ϕ′(ξ)是一个小量,用L去近似代替,则有 x 1 − x ∗ ≈ L ( x 0 − x ∗ ) x_1-x^* \approx L(x_0-x^*) x1−x∗≈L(x0−x∗),得 x ∗ = 1 1 − L x 1 − L 1 − L x 0 x^*=\frac{1}{1-L}x_1-\frac{L}{1-L}x_0 x∗=1−L1x1−1−LLx0即 x 2 = 1 1 − L x 1 − L 1 − L x 0 = x 1 + L 1 − L ( x 1 − x 0 ) x_2=\frac{1}{1-L}x_1-\frac{L}{1-L}x_0=x_1+\frac{L}{1-L}(x_1-x_0) x2=1−L1x1−1−LLx0=x1+1−LL(x1−x0)是比 x 1 x_1 x1更好的迭代值。
Aitken方法
- 上面的改进格式中存在近似值L不好估计,若再通过迭代公式迭代一次即可联系消去L,设
x
1
=
ϕ
(
x
0
)
,
x
2
=
ϕ
(
x
1
)
x_1=\phi(x_0),x_2=\phi(x_1)
x1=ϕ(x0),x2=ϕ(x1),有
x
1
−
x
∗
≈
L
(
x
0
−
x
∗
)
x
2
−
x
∗
≈
L
(
x
1
−
x
∗
)
x_1-x^* \approx L(x_0-x^*)\\ x_2-x^* \approx L(x_1-x^*)
x1−x∗≈L(x0−x∗)x2−x∗≈L(x1−x∗)
联立可得, x 1 − x ∗ x 2 − x ∗ ≈ x 0 − x ∗ x 1 − x ∗ \frac{x_1-x^*}{x_2-x^*} \approx \frac{x_0-x^*}{x_1-x^*} x2−x∗x1−x∗≈x1−x∗x0−x∗
解出 x ∗ x^* x∗, x ∗ ≈ x 0 x 2 − x 1 2 x 0 − 2 x 1 + x 2 = x 2 − ( x 2 − x 1 ) 2 x 0 + 2 x 1 + x 2 x^* \approx \frac{x_0x_2-x_1^2}{x_0-2x_1+x_2}=x_2-\frac{(x_2-x_1)^2}{x_0+2x_1+x_2} x∗≈x0−2x1+x2x0x2−x12=x2−x0+2x1+x2(x2−x1)2,同理, x 3 = x 2 − ( x 2 − x 1 ) 2 x 0 + 2 x 1 + x 2 x_3=x_2-\frac{(x_2-x_1)^2}{x_0+2x_1+x_2} x3=x2−x0+2x1+x2(x2−x1)2是更好的迭代值。