工程数学 计算方法 第二章 非线性方程的数值解法
写在前面:因为字太丑笔记自己都不想看,就用markdown记录一下工程数学这门课的学习。本学期本专业本课程课时较少,所以知识点都学得很浅,都是些最基础的东西。应试部分是根据老师划的考点整理的,仅针对本专业本学期本次期末考试。
非线性方程的数值解法
二次至四次方程有求根公式,但对于更高次幂的代数方程目前仍无有效的精确解法,对u与无规律的非代数方程的求解也无精确解法。转向求数值解。
基本概念:
方程 f ( x ) = 0 f(x)=0 f(x)=0的根 x ∗ x^* x∗称为 f ( x ) f(x) f(x)的零点,它使 f ( x ∗ ) = 0 f(x^*)=0 f(x∗)=0。若 g ( x ∗ ) ≠ 0 g(x^*)\neq 0 g(x∗)=0, f ( x ) f(x) f(x)可表示为 f ( x ) = ( x − x ∗ ) m g ( x ) f(x)=(x-x^*)^mg(x) f(x)=(x−x∗)mg(x),其中 m m m为正整数且 f ( x ∗ ) = 0 f(x^*)=0 f(x∗)=0。
当
m
=
1
m=1
m=1时,称
x
∗
x^*
x∗为单根。若
m
>
1
m>1
m>1,称
x
∗
x^*
x∗为
f
(
x
)
f(x)
f(x)的
m
m
m重根,或
f
(
x
)
f(x)
f(x)的
m
m
m重零点。若
x
∗
x^*
x∗是
f
(
x
)
f(x)
f(x)的
m
m
m重零点且
g
(
x
)
g(x)
g(x)充分光滑,则
f
(
x
∗
)
=
f
′
(
x
∗
)
=
f
′
′
(
x
∗
)
=
.
.
.
=
f
(
m
−
1
)
(
x
∗
)
=
0
,
f
(
m
)
(
x
∗
)
≠
0
f(x^*)=f'(x^*)=f''(x^*)=...=f^{(m-1)}(x^*)=0,\,f^{(m)}(x^*)\neq 0
f(x∗)=f′(x∗)=f′′(x∗)=...=f(m−1)(x∗)=0,f(m)(x∗)=0
二分法
零点存在性定理:若 f ∈ C [ a , b ] f\in C[a,b] f∈C[a,b],且 f ( a ) ⋅ f ( b ) < 0 f(a)·f(b)<0 f(a)⋅f(b)<0,则 f f f在 ( a , b ) (a,b) (a,b)上存在零点。称 [ a , b ] [a,b] [a,b]为方程的有根区间。
给定有根区间 [ a , b ] ( f ( a ) ⋅ f ( b ) < 0 ) [a,b](f(a)·f(b)<0) [a,b](f(a)⋅f(b)<0)和精度 ε \varepsilon ε或 δ \delta δ:
- 二分区间:令 x = a + b 2 x=\frac{a+b}2 x=2a+b
- 判断精度:如果 b − a < ε b-a<\varepsilon b−a<ε或 f ( x ) < δ f(x)<\delta f(x)<δ,停机,输出 x x x
- 选取区间:如果 f ( a ) ⋅ f ( x ) < 0 f(a)·f(x)<0 f(a)⋅f(x)<0,则令 b = x b=x b=x,否则令 a = x a=x a=x,返回第一步
给定精度
ε
\varepsilon
ε,可估计二分法所需步数
k
k
k:
b
−
a
2
k
<
ε
⟹
k
>
log
2
b
−
a
ε
取
k
=
⌈
log
2
b
−
a
ε
⌉
\frac{b-a}{2^k}<\varepsilon\,\,\Longrightarrow\,\, k>\log_2\frac{b-a}\varepsilon\\ 取k=\left\lceil\log_2\frac{b-a}\varepsilon\right\rceil
2kb−a<ε⟹k>log2εb−a取k=⌈log2εb−a⌉
优点:简单易用,且对
f
(
x
)
f(x)
f(x)要求不高,连续即可收敛;
缺点:收敛速度慢,仅适用于标量方程且需事先确定隔离区间,无法求复根及偶重根。
精度选择:若选取 f ( x ) < δ f(x)<\delta f(x)<δ为精度要求,则无法保证 x x x的精度( f ( x ) f(x) f(x)在 x ∗ x^* x∗附近可能斜率很小)
不动点迭代法/Picard迭代法
原理
f ( x ) = 0 ⟺ x = φ ( x ) f ( x ) 的 根 ⟺ φ ( x ) 的 不 动 点 \begin{array}{c} f(x)=0&\Longleftrightarrow&x=\varphi(x)\\ f(x)的根&\Longleftrightarrow&\varphi(x)的不动点\\ \end{array} f(x)=0f(x)的根⟺⟺x=φ(x)φ(x)的不动点
从初值 x 0 x_0 x0出发,迭代 x k + 1 = φ ( x k ) x_{k+1}=\varphi(x_k) xk+1=φ(xk)。若 { x k } k = 0 ∞ \{x_k\}_{k=0}^\infty {xk}k=0∞收敛,即存在 x ∗ x^* x∗使得 lim k → ∞ x k = x ∗ \underset{k\rightarrow\infty}{\lim}x_k=x^* k→∞limxk=x∗。
收敛性与停止条件
将 f ( x ) = 0 f(x)=0 f(x)=0改写为 x = φ ( x ) x=\varphi(x) x=φ(x)有很多形式,那么什么样的迭代格式存在不动点呢?什么样的迭代格式可以使得 { x k } k = 0 ∞ \{x_k\}_{k=0}^\infty {xk}k=0∞收敛到不动点呢?怎么判断收敛到何时可以停止呢?
不动点的存在性定理:设 φ ( x ) ∈ C [ a , b ] \varphi(x)\in C[a,b] φ(x)∈C[a,b]满足以下两个条件:
-
对于 ∀ x ∈ [ a , b ] \forall\, x\in [a,b] ∀x∈[a,b],有 a ⩽ φ ( x ) ⩽ b a\leqslant \varphi (x)\leqslant b a⩽φ(x)⩽b;
-
∃ 0 < L < 1 \exists\,\, 0<L<1 ∃0<L<1,使得 ∀ x , y ∈ C [ a , b ] \forall\, x,y\in C[a,b] ∀x,y∈C[a,b],有
∣ φ ( x ) − φ ( y ) ∣ ⩽ L ∣ x − y ∣ \vert\varphi(x)-\varphi(y)\vert\leqslant L\vert x-y\vert ∣φ(x)−φ(y)∣⩽L∣x−y∣
则 φ ( x ) \varphi(x) φ(x)在 [ a , b ] [a,b] [a,b]上存在唯一不动点 x ∗ x^* x∗。根据中值定理知: ∀ x ∈ [ a , b ] \forall\, x\in [a,b] ∀x∈[a,b],有
∣ φ ( x ) − φ ( y ) ∣ = ∣ φ ′ ( ξ ) ( x − y ) ∣ ⩽ L ∣ x − y ∣ , ξ ∈ ( a , b ) \vert\varphi(x)-\varphi(y)\vert=\vert \varphi'(\xi)(x-y)\vert\leqslant L\vert x-y\vert,\,\xi\in(a,b) ∣φ(x)−φ(y)∣=∣φ′(ξ)(x−y)∣⩽L∣x−y∣,ξ∈(a,b)
它表明条件2可由 ∣ φ ′ ( x ) ∣ ⩽ L < 1 \vert\varphi'(x)\vert\leqslant L<1 ∣φ′(x)∣⩽L<1替代。
收敛的充分条件:设
φ
(
x
)
∈
C
[
a
,
b
]
\varphi(x)\in C[a,b]
φ(x)∈C[a,b]满足上述定理的两个条件,则对于
∀
x
∈
[
a
,
b
]
\forall\, x\in [a,b]
∀x∈[a,b],由
x
k
+
1
=
φ
(
x
k
)
x_{k+1}=\varphi (x_k)
xk+1=φ(xk)得到的迭代序列
{
x
k
}
\{x_k\}
{xk}收敛到
φ
(
x
)
\varphi(x)
φ(x)的不动点
x
∗
x^*
x∗,并有误差估计
∣
x
k
−
x
∗
∣
⩽
L
k
1
−
L
∣
x
1
−
x
0
∣
\vert x_k-x^*\vert\leqslant\frac{L^k}{1-L}\vert x_1-x_0\vert
∣xk−x∗∣⩽1−LLk∣x1−x0∣
由定理得,收敛可由
∣
φ
′
(
x
)
∣
⩽
L
<
1
\vert\varphi'(x)\vert\leqslant L<1
∣φ′(x)∣⩽L<1判断。
对于精度要求
∣
x
k
−
x
∗
∣
<
ε
\vert x_k-x^*\vert<\varepsilon
∣xk−x∗∣<ε,只要
L
1
−
L
∣
x
k
−
x
k
−
1
∣
<
ε
\frac{L}{1-L}\vert x_k-x_{k-1}\vert<\varepsilon
1−LL∣xk−xk−1∣<ε
因此,当
∣
x
k
−
x
k
−
1
∣
<
1
−
L
L
ε
≈
ε
\vert x_k-x_{k-1}\vert<\frac{1-L}{L}\varepsilon\approx\varepsilon
∣xk−xk−1∣<L1−Lε≈ε
时,迭代就可以终止,
x
k
x_k
xk可以作为方程的近似解。
收敛速度
如何衡量算法的好坏呢?
设迭代过程
x
k
+
1
=
φ
(
x
k
)
x_{k+1}=\varphi(x_k)
xk+1=φ(xk)收敛于方程
x
=
φ
(
x
)
x=\varphi(x)
x=φ(x)的根
x
∗
x^*
x∗,如果迭代误差
ε
k
=
x
k
−
x
∗
\varepsilon_k=x_k-x^*
εk=xk−x∗,当
k
→
∞
k\rightarrow \infty
k→∞时,有
ε
k
+
1
ε
k
p
→
C
≠
0
\frac{\varepsilon_{k+1}}{\varepsilon_k^p}\,\rightarrow\,C\,\neq0
εkpεk+1→C=0
则称该迭代过程是
p
p
p阶收敛的。
p
=
1
p=1
p=1时称线性收敛,
p
>
1
p>1
p>1时称超线性收敛,
p
=
2
p=2
p=2时称平方收敛。
不动点迭代法依方程而异,收敛阶各不相同。
定理:设
φ
(
x
)
\varphi(x)
φ(x)在其不动点
x
∗
x^*
x∗的某邻域内
p
p
p阶连续可微,且
φ
(
i
)
(
x
∗
)
=
0
(
i
=
1
,
2
,
.
.
.
,
p
−
1
)
,
φ
(
p
)
(
x
∗
)
≠
0
\varphi^{(i)}(x^*)=0\,(i=1,2,...,p-1),\,\varphi^{(p)}(x^*)\neq0
φ(i)(x∗)=0(i=1,2,...,p−1),φ(p)(x∗)=0
则不动点迭代法是
p
p
p阶收敛的。
令
e
k
=
x
k
−
x
∗
e_{k}=x_{k}-x^*
ek=xk−x∗,有
e
k
+
1
=
x
k
+
1
−
x
∗
=
φ
(
x
k
)
−
φ
(
x
∗
)
=
φ
′
(
ξ
)
e
k
lim
k
→
∞
e
k
+
1
e
k
p
=
1
p
!
φ
(
p
)
(
x
∗
)
e_{k+1}=x_{k+1}-x^*=\varphi(x_k)-\varphi(x^*)=\varphi'(\xi)e_k\\ \underset{k\rightarrow\infty}{\lim}\frac{e_{k+1}}{e_k^p}=\frac1{p!}\varphi^{(p)}(x^*)
ek+1=xk+1−x∗=φ(xk)−φ(x∗)=φ′(ξ)ekk→∞limekpek+1=p!1φ(p)(x∗)
Newton迭代法
基本思想
将非线性方程 f ( x ) = 0 f(x)=0 f(x)=0逐步线性化而形成迭代公式。
取
x
0
≈
x
∗
x_0\approx x^*
x0≈x∗,将
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0做一阶Taylor展开:
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
o
)
(
x
−
x
0
)
+
f
′
′
(
ξ
)
2
!
(
x
−
x
0
)
,
ξ
在
x
0
和
x
之
间
f(x)=f(x_0)+f'(x_o)(x-x_0)+\frac{f''(\xi)}{2!}(x-x_0),\,\,\xi在x_0和x之间
f(x)=f(x0)+f′(xo)(x−x0)+2!f′′(ξ)(x−x0),ξ在x0和x之间
将
(
x
∗
−
x
0
)
2
(x^*-x_0)^2
(x∗−x0)2看成高阶小量,有:
0
=
f
(
x
∗
)
≈
f
(
x
0
)
+
f
′
(
x
0
)
(
x
∗
−
x
0
)
⟹
x
∗
≈
x
0
−
f
(
x
0
)
f
′
(
x
0
)
0=f(x^*)\approx f(x_0)+f'(x_0)(x^*-x_0)\,\, \Longrightarrow\,\, x^*\approx x_0-\frac{f(x_0)}{f'(x_0)}
0=f(x∗)≈f(x0)+f′(x0)(x∗−x0)⟹x∗≈x0−f′(x0)f(x0)
得迭代公式:
x
k
+
1
=
x
k
−
f
(
x
k
)
f
′
(
x
k
)
x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}
xk+1=xk−f′(xk)f(xk)
迭代停止条件与前同,即
∣
x
i
+
1
−
x
i
∣
<
ε
o
r
∣
f
(
x
i
)
∣
⩽
δ
\vert x_{i+1}-x_i\vert<\varepsilon\quad or\quad \vert f(x_i)\vert\leqslant\delta
∣xi+1−xi∣<εor∣f(xi)∣⩽δ
几何意义
切线法,取切线与x轴交点来作为迭代值。
割线法:
Newt需要计算
f
f
f和
f
′
f'
f′,相当于2个函数值,费时。用
f
f
f的值近似
f
′
f'
f′,可少算一个函数值。
切
线
斜
率
≈
割
线
斜
率
⟹
f
′
(
x
k
)
≈
f
(
x
k
)
−
f
(
x
k
−
1
)
x
k
−
x
k
−
1
⟹
x
k
+
1
=
x
k
−
f
(
x
k
)
(
x
k
−
x
k
−
1
)
f
(
x
k
)
−
f
(
x
k
−
1
)
\begin{array}{c} 切线斜率\approx 割线斜率&\Longrightarrow\quad f'(x_k)\approx\frac{f(x_k)-f(x_{k-1})}{x_k-x_{k-1}}\\ &\Longrightarrow\quad x_{k+1}=x_k-\frac{f(x_k)(x_k-x_{k-1})}{f(x_k)-f(x_{k-1})} \end{array}
切线斜率≈割线斜率⟹f′(xk)≈xk−xk−1f(xk)−f(xk−1)⟹xk+1=xk−f(xk)−f(xk−1)f(xk)(xk−xk−1)
需要两个初值
x
0
x_0
x0和
x
1
x_1
x1。
收敛比Newton迭代法慢,且对初值要求同样高。
收敛性
Newton迭代法收敛性依赖于
x
0
x_0
x0的选取。
收敛的充分条件:
设 f ∈ C 2 [ a , b ] f\in C^2[a,b] f∈C2[a,b],若
- f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0;(有根)
- 在整个 [ a , b ] [a,b] [a,b]上 f ′ ′ f'' f′′不变号且 f ′ ( x ) ≠ 0 f'(x)\neq0 f′(x)=0;(根唯一)
- 选取
x
0
∈
[
a
,
b
]
x_0\in[a,b]
x0∈[a,b]使得
f
(
x
0
)
f
′
′
(
x
0
)
>
0
f(x_0)f''(x_0)>0
f(x0)f′′(x0)>0;(序列单调有界,保证收敛)
则Newton迭代法产生的序列 { x k } \{x_k\} {xk}收敛到 f ( x ) f(x) f(x)在 [ a , b ] [a,b] [a,b]的唯一根。
局部收敛。
实际上是一种特殊的不动点迭代。
Newton下山法
若由
x
k
x_k
xk得到的
x
k
+
1
x_{k+1}
xk+1不能使
∣
f
∣
\vert f\vert
∣f∣减小,则在
x
k
x_k
xk和
x
k
+
1
x_{k+1}
xk+1之间找一个更好的点
x
k
+
1
‾
\overline{x_{k+1}}
xk+1,使得
∣
f
(
x
k
+
1
‾
)
∣
<
∣
f
(
x
k
)
∣
\vert f(\overline{x_{k+1}})\vert<\vert f(x_k)\vert
∣f(xk+1)∣<∣f(xk)∣。取
x
k
+
1
‾
=
λ
x
k
+
1
+
(
1
−
λ
)
x
k
=
λ
[
x
k
−
f
(
x
k
)
f
′
(
x
k
)
]
+
(
1
−
λ
)
x
k
=
x
k
−
λ
f
(
x
k
)
f
′
(
x
k
)
\begin{array}{c} \overline{x_{k+1}}=\lambda x_{k+1}+(1-\lambda)x_k\, =\lambda[x_k-\frac{f(x_k)}{f'(x_k)}]+(1-\lambda)x_k\, =x_k-\lambda\frac{f(x_k)}{f'(x_k)} \end{array}
xk+1=λxk+1+(1−λ)xk=λ[xk−f′(xk)f(xk)]+(1−λ)xk=xk−λf′(xk)f(xk)
λ
=
1
\lambda=1
λ=1时为Newton迭代公式。
当
λ
=
1
\lambda=1
λ=1带入效果不好时,
λ
\lambda
λ取半再代入计算。
效果不好:函数值序列没有递减。
加速迭代法
有的迭代过程虽然收敛,但收敛阶低,收敛速度慢,效果不好。
如何优化?
Aitken加速迭代法。
x ‾ k + 1 = x k − ( x k + 1 − x k ) 2 x k − 2 x k + 1 + x k + 2 ( k = 0 , 1 , ⋯ ) \overline x_{k+1} = x_k-\frac{(x_{k+1}-x_k)^2}{x_k-2x_{k+1}+x_{k+2}}\,(k=0,1,\cdots) xk+1=xk−xk−2xk+1+xk+2(xk+1−xk)2(k=0,1,⋯)
收敛速度:
可以证明:
lim
k
→
∞
x
‾
k
+
1
−
x
∗
x
k
−
x
∗
=
0
\underset{k\rightarrow\infty}{\lim}\frac{\overline x_{k+1}-x^*}{x_k-x^*}=0
k→∞limxk−x∗xk+1−x∗=0
它表明序列
{
x
‾
k
}
\{\overline x_k\}
{xk}的收敛速度比
{
x
k
}
\{x_k\}
{xk}的收敛速度快。
Aitken加速迭代法有 lim k → ∞ ∣ x k + 1 − x ∗ ∣ ∣ x k − x ∗ ∣ = 0 \underset{k\rightarrow\infty}{\lim}\frac{\vert x_{k+1}-x^*\vert}{\vert x_k-x^*\vert}=0 k→∞lim∣xk−x∗∣∣xk+1−x∗∣=0。 lim k → ∞ ∣ e k + 1 ∣ ∣ e k ∣ = 0 \underset{k\rightarrow\infty}{\lim}\frac{\vert e_{k+1}\vert}{\vert e_k\vert}=0 k→∞lim∣ek∣∣ek+1∣=0称为超线性收敛。
应试
牛顿迭代法
对单根:平方收敛(2阶收敛)。
收敛性取决于
x
0
x_0
x0的选取。一般给
x
0
x_0
x0或
x
0
x_0
x0的取值区间。给取值区间的时候如果不放心收敛性可以取端点。
套公式就完了。
x
k
+
1
=
x
k
−
f
(
x
k
)
f
′
(
x
k
)
x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}
xk+1=xk−f′(xk)f(xk)
考试不考Newton下山法,计算量太大,没必要。
收敛阶
好像是要考选择
ε
k
+
1
ε
k
p
→
C
≠
0
lim
k
→
∞
x
k
+
1
−
x
∗
x
k
−
x
∗
=
C
≠
0
\frac{\varepsilon_{k+1}}{\varepsilon_k^p}\,\rightarrow\,C\,\neq0\\\,\\ \underset{k\rightarrow\infty}{\lim}\frac{x_{k+1}-x^*}{x_k-x^*}=C\,\neq0
εkpεk+1→C=0k→∞limxk−x∗xk+1−x∗=C=0