文章目录
第一章——数值计算中的误差
误差来源
观测误差、模型误差、截断误差(方法误差)、舍入误差
绝对误差、相对误差和有效数字
设准确值为
x
x
x,计算近似值为
x
∗
x^*
x∗
绝对误差:
ε
=
∣
x
−
x
∗
∣
\varepsilon = |x - x^*|
ε=∣x−x∗∣
相对误差:
ε
r
=
∣
x
−
x
∗
∣
∣
x
∣
≈
∣
x
−
x
∗
∣
∣
x
∗
∣
\varepsilon_r = \frac{|x - x^*|}{|x|} \approx \frac{|x - x^*|}{|x^*|}
εr=∣x∣∣x−x∗∣≈∣x∗∣∣x−x∗∣
有效数字:若
∣
x
−
x
∗
∣
≤
0.5
×
1
0
−
n
|x - x^*| \leq 0.5\times10^{-n}
∣x−x∗∣≤0.5×10−n,则称
x
∗
x^*
x∗精确到小数点后n位,并把第一个非零位到这一位的所有数字称为有效数字
误差传播
加减:绝对误差累计
乘除:相对误差累计
数值计算时注意的问题
- 相近数相减
- 大数吃小数(相差大的数加减)
- 分母绝对值太小
第二章——线性方程组的直接解法
解决问题
小型线性方程组求解。
消去法
- 高斯(Gauss)消去法:只做行加
- 列主元素法:先通过换行使得主元最大,再用高斯消去法求解
- 全主元素法:先通过换列和换行使得主元最大,再高斯消去法求解
分解法
方法 | 格式 | 要求 |
---|---|---|
杜利特尔(Doolittle)分解 | A = L U A=LU A=LU | A A A对称正定 |
平方根法(Cholesky) | A = L L ⊤ A=LL^\top A=LL⊤ | A A A对称正定 |
改进平分根法 | A = L D L ⊤ A=LDL^\top A=LDL⊤ | A A A对称正定 |
追赶法 | A = L U A=LU A=LU | 三对角矩阵、严格对角占优 |
误差估计
向量范数
- 1范数: ∣ ∣ x ∣ ∣ 1 = ∑ i = 1 n ∣ x i ∣ ||x||_1 = \sum_{i=1}^n |x_i| ∣∣x∣∣1=∑i=1n∣xi∣
- 2范数: ∣ ∣ x ∣ ∣ 2 = ( ∑ i = 1 n x i 2 ) 1 2 ||x||_2 = (\sum_{i=1}^n x_i^2)^{\frac{1}{2}} ∣∣x∣∣2=(∑i=1nxi2)21
- 无穷范数: ∣ ∣ x ∣ ∣ ∞ = max 1 ≤ i ≤ n ∣ x i ∣ ||x||_{\infty} = \max_{1\leq i \leq n}|x_i| ∣∣x∣∣∞=max1≤i≤n∣xi∣
- p范数: ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n x i p ) 1 p ||x||_p = (\sum_{i=1}^n x_i^p)^{\frac{1}{p}} ∣∣x∣∣p=(∑i=1nxip)p1
矩阵范数
- 1(列)范数: ∣ ∣ A ∣ ∣ 1 = m a x 1 ≤ j ≤ n ( ∑ i = 0 n ∣ a i j ∣ ) ||A||_1 = max_{1 \leq j \leq n}(\sum_{i=0}^n|a_{ij}|) ∣∣A∣∣1=max1≤j≤n(∑i=0n∣aij∣)
- 无穷(行)范数: ∣ ∣ A ∣ ∣ ∞ = m a x 1 ≤ i ≤ n ( ∑ j = 0 n ∣ a i j ∣ ) ||A||_{\infty} = max_{1 \leq i \leq n}(\sum_{j=0}^n|a_{ij}|) ∣∣A∣∣∞=max1≤i≤n(∑j=0n∣aij∣)
- 2范数: ∣ ∣ A ∣ ∣ 2 = λ m a x ( A ⊤ A ) ||A||_2 = \sqrt {\lambda_{max}(A^\top A)} ∣∣A∣∣2=λmax(A⊤A)
- F范数: ∣ ∣ A ∣ ∣ F = ( ∑ i = 0 n ∑ j = 0 n a i j 2 ) 1 2 ||A||_F = ( \sum_{i=0}^n\sum_{j=0}^n a_{ij}^2)^{\frac{1}{2}} ∣∣A∣∣F=(∑i=0n∑j=0naij2)21
谱半径 ρ ( A ) = m a x ( λ i ) \rho(A) = max(\lambda_i) ρ(A)=max(λi), ρ ( A ) ≤ 范 数 \rho(A) \leq 范数 ρ(A)≤范数
条件数
c
o
n
d
(
A
)
=
∣
∣
A
∣
∣
⋅
∣
∣
A
−
1
∣
∣
cond(A) = ||A|| \cdot ||A^{-1}||
cond(A)=∣∣A∣∣⋅∣∣A−1∣∣
条件越大数大,矩阵越病态,系数矩阵或右侧常数项有微小扰动,会造成巨大的误差。
第三章——线性方程组的迭代解法
解决问题
利用迭代法求解大型方程组。
雅可比(Jacobi)迭代法
迭代公式:
{
x
1
(
k
+
1
)
=
(
b
1
−
a
12
x
2
(
k
)
−
a
13
x
3
(
k
)
)
/
a
11
x
2
(
k
+
1
)
=
(
b
2
−
a
21
x
1
(
k
)
−
a
22
x
2
(
k
)
)
/
a
22
x
3
(
k
+
1
)
=
(
b
3
−
a
31
x
1
(
k
)
−
a
32
x
2
(
k
)
)
/
a
33
\left\{ \begin{aligned} x_1^{(k+1)} & = (b_1 - a_{12}x_2^{(k)}-a_{13}x_3^{(k)}) / a_{11} \\ x_2^{(k+1)} & = (b_2 - a_{21}x_1^{(k)}-a_{22}x_2^{(k)}) / a_{22} \\ x_3^{(k+1)} & = (b_3 - a_{31}x_1^{(k)}-a_{32}x_2^{(k)}) / a_{33} \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧x1(k+1)x2(k+1)x3(k+1)=(b1−a12x2(k)−a13x3(k))/a11=(b2−a21x1(k)−a22x2(k))/a22=(b3−a31x1(k)−a32x2(k))/a33
迭代矩阵:
A
=
D
−
(
L
+
U
)
M
=
D
−
1
(
L
+
U
)
A = D - (L + U) \\ M = D^{-1}(L + U)
A=D−(L+U)M=D−1(L+U)
高斯赛德尔(Gauss-Sedel)迭代法
迭代公式:
{
x
1
(
k
+
1
)
=
(
b
1
−
a
12
x
2
(
k
)
−
a
13
x
3
(
k
)
)
/
a
11
x
2
(
k
+
1
)
=
(
b
2
−
a
21
x
1
(
k
+
1
)
−
a
22
x
2
(
k
)
)
/
a
22
x
3
(
k
+
1
)
=
(
b
3
−
a
31
x
1
(
k
+
1
)
−
a
32
x
2
(
k
+
1
)
)
/
a
33
\left\{ \begin{aligned} x_1^{(k+1)} & = (b_1 - a_{12}x_2^{(k)}-a_{13}x_3^{(k)}) / a_{11} \\ x_2^{(k+1)} & = (b_2 - a_{21}x_1^{(k+1)}-a_{22}x_2^{(k)}) / a_{22} \\ x_3^{(k+1)} & = (b_3 - a_{31}x_1^{(k+1)}-a_{32}x_2^{(k+1)}) / a_{33} \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧x1(k+1)x2(k+1)x3(k+1)=(b1−a12x2(k)−a13x3(k))/a11=(b2−a21x1(k+1)−a22x2(k))/a22=(b3−a31x1(k+1)−a32x2(k+1))/a33
迭代矩阵:
A
=
(
D
−
L
)
+
U
M
=
(
D
−
L
)
−
1
U
A = (D - L) + U \\ M = (D - L)^{-1}U
A=(D−L)+UM=(D−L)−1U
超松弛法
迭代公式:
{
x
1
(
k
+
1
)
=
(
1
−
w
)
x
1
(
k
)
+
w
(
b
1
−
a
12
x
2
(
k
)
−
a
13
x
3
(
k
)
)
/
a
11
x
2
(
k
+
1
)
=
(
1
−
w
)
x
2
(
k
)
+
w
(
b
2
−
a
21
x
1
(
k
+
1
)
−
a
22
x
2
(
k
)
)
/
a
22
x
3
(
k
+
1
)
=
(
1
−
w
)
x
3
(
k
)
+
w
(
b
3
−
a
31
x
1
(
k
+
1
)
−
a
32
x
2
(
k
+
1
)
)
/
a
33
\left\{ \begin{aligned} x_1^{(k+1)} & = (1-w)x_1^{(k) }+ w(b_1 - a_{12}x_2^{(k)}-a_{13}x_3^{(k)}) / a_{11} \\ x_2^{(k+1)} & = (1-w)x_2^{(k) }+ w(b_2 - a_{21}x_1^{(k+1)}-a_{22}x_2^{(k)}) / a_{22} \\ x_3^{(k+1)} & = (1-w)x_3^{(k) }+ w(b_3 - a_{31}x_1^{(k+1)}-a_{32}x_2^{(k+1)}) / a_{33} \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧x1(k+1)x2(k+1)x3(k+1)=(1−w)x1(k)+w(b1−a12x2(k)−a13x3(k))/a11=(1−w)x2(k)+w(b2−a21x1(k+1)−a22x2(k))/a22=(1−w)x3(k)+w(b3−a31x1(k+1)−a32x2(k+1))/a33
收敛条件
根据系数矩阵A判断(充分条件)
- 雅可比迭代法:A严格对角占优 ∪ \cup ∪ A弱对角占优且不可约
- 高斯赛德尔:A严格对角占优 ∪ \cup ∪ A弱对角占优且不可约 ∪ \cup ∪ A对称正定
- 超松弛:A严格对角占优 ( 0 < w < 1 ) (0 < w < 1) (0<w<1) ∪ \cup ∪ A对称正定 ( 0 < w < 2 ) (0 < w < 2) (0<w<2)
根据迭代矩阵判断(充要条件)
谱半径
ρ
(
M
)
<
1
\rho(M) < 1
ρ(M)<1是迭代收敛的充要条件
推论:若迭代矩阵范数
∣
∣
M
∣
∣
<
1
||M||<1
∣∣M∣∣<1,则迭代收敛
误差估计
估计迭代次数:
∣
∣
x
(
k
)
−
x
∗
∣
∣
≤
∣
∣
M
∣
∣
k
1
−
∣
∣
M
∣
∣
∣
∣
x
(
1
)
−
x
(
0
)
∣
∣
||x^{(k)} - x^*|| \leq \frac{||M||^k}{1 - ||M||}||x^{(1)} - x^{(0)}||
∣∣x(k)−x∗∣∣≤1−∣∣M∣∣∣∣M∣∣k∣∣x(1)−x(0)∣∣
停止条件:
∣
∣
x
(
k
)
−
x
∗
∣
∣
≤
∣
∣
M
∣
∣
1
−
∣
∣
M
∣
∣
∣
∣
x
(
k
)
−
x
(
k
−
1
)
∣
∣
||x^{(k)} - x^*|| \leq \frac{||M||}{1 - ||M||}||x^{(k)} - x^{(k-1)}||
∣∣x(k)−x∗∣∣≤1−∣∣M∣∣∣∣M∣∣∣∣x(k)−x(k−1)∣∣
第四章——矩阵的特征值与特征向量的数值计算
解决问题
快速求解矩阵的某一特征值和特征向量。
幂法
用于迭代求解矩阵A的最大特征值和特征向量。
核心思想
设矩阵
A
n
×
n
A_{n\times n}
An×n的特征向量为
u
1
,
u
2
,
.
.
.
,
u
n
u_1, u_2, ..., u_n
u1,u2,...,un且其对应的特征值满足
∣
λ
1
∣
>
∣
λ
2
∣
≥
∣
λ
3
∣
.
.
.
≥
∣
λ
n
∣
|\lambda_1|>|\lambda_2|\geq |\lambda_3|...\geq|\lambda_n|
∣λ1∣>∣λ2∣≥∣λ3∣...≥∣λn∣。任取初始化向量x,则x可以用A的特征向量表示:
x
=
a
1
u
1
+
a
2
u
2
+
.
.
.
+
a
n
u
n
x = a_1u_1 + a_2u_2 + ... + a_nu_n
x=a1u1+a2u2+...+anun
将x不断左乘A,得得到:
A
k
x
=
A
k
a
1
u
1
+
A
k
a
2
u
2
+
.
.
.
+
A
k
a
n
u
n
=
λ
1
k
a
1
u
1
+
λ
2
k
a
2
u
2
+
.
.
.
+
λ
n
k
a
n
u
n
=
λ
1
k
(
a
1
u
1
+
ε
)
≈
λ
1
k
a
1
u
1
\begin{aligned} A^kx & = A^ka_1u_1 + A^ka_2u_2 + ... + A^ka_nu_n \\ & = \lambda_1^ka_1u_1 + \lambda_2^ka_2u_2 + ... + \lambda_n^ka_nu_n \\ & = \lambda_1^k(a_1u_1 + \varepsilon) \\ & \approx \lambda_1^ka_1u_1 \end{aligned}
Akx=Aka1u1+Aka2u2+...+Akanun=λ1ka1u1+λ2ka2u2+...+λnkanun=λ1k(a1u1+ε)≈λ1ka1u1
所以,将x不断左乘A,可以将其转换成最大的特征向量且每次增大的倍数就为对应的特性值。
具体算法
- 输入矩阵A,误差 ϵ \epsilon ϵ,最大迭代次数N,初始化向量x,初始特征值 λ \lambda λ
- 归一化初始向量: y = x m a x ( x ) y = \frac{x}{max(x)} y=max(x)x
- 迭代: x = A y x = Ay x=Ay, β = m a x ( x ) \beta = max(x) β=max(x), y = x β y = \frac{x}{\beta} y=βx
- 判断终止条件:是否满足最大迭代次数 ∪ \cup ∪ ∣ β − λ ∣ < ϵ |\beta - \lambda| < \epsilon ∣β−λ∣<ϵ,不满足 ⇒ 3;满足 ⇒ 5
- 特征值为 β \beta β,特征向量为 y y y
反幂法
用于求解最小的特征值和特征向量 ⇒ 求接近 λ ∗ \lambda^* λ∗的特征值和特征向量
具体算法
- 输入矩阵A,误差 ϵ \epsilon ϵ,最大迭代次数N,初始化向量x,目标特征值 λ ∗ \lambda^* λ∗,初始特征值为 λ = 0 \lambda = 0 λ=0
- 设 B = A − λ ∗ I B = A - \lambda^*I B=A−λ∗I,求 B B B的LU分解
- 归一化初始向量: y = x m a x ( x ) y = \frac{x}{max(x)} y=max(x)x
- 迭代:用求解 L U x = y LUx=y LUx=y代替 x = B − 1 y x = B^{-1}y x=B−1y, β = m a x ( x ) \beta = max(x) β=max(x), y = x β y = \frac{x}{\beta} y=βx
- 判断终止条件:是否满足最大迭代次数 ∪ \cup ∪ ∣ β − λ ∣ < ϵ |\beta - \lambda| < \epsilon ∣β−λ∣<ϵ,不满足 ⇒ 4;满足 ⇒ 6
- 特征值为 λ ∗ + 1 β \lambda^* + \frac{1}{\beta} λ∗+β1,特征向量为 y y y
第五章——插值法
解决问题
给出离散数值点,用多项式函数做局部拟合。
拉格朗日(Lagrange)插值
结构规整,由方程组导出的函数通解形式:
L
n
(
x
)
=
∑
i
=
0
n
∏
j
=
0
,
j
≠
i
n
(
x
−
x
j
)
∏
j
=
0
,
j
≠
i
n
(
x
i
−
x
j
)
×
y
i
L_n(x) = \sum_{i=0}^{n} \frac{\prod_{j=0, j \neq i}^{n}(x-x_j)}{\prod_{j=0, j \neq i}^{n}(x_i-x_j)} \times y_i
Ln(x)=i=0∑n∏j=0,j=in(xi−xj)∏j=0,j=in(x−xj)×yi
n阶式需要n+1个节点,例如2阶式子如下:
L
2
(
x
)
=
(
x
−
x
1
)
(
x
−
x
2
)
(
x
0
−
x
1
)
(
x
0
−
x
2
)
y
0
+
(
x
−
x
0
)
(
x
−
x
2
)
(
x
1
−
x
0
)
(
x
1
−
x
2
)
y
1
+
(
x
−
x
0
)
(
x
−
x
1
)
(
x
2
−
x
0
)
(
x
2
−
x
1
)
y
2
L_2(x) = \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}y_0 + \frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}y_1 + \frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}y_2
L2(x)=(x0−x1)(x0−x2)(x−x1)(x−x2)y0+(x1−x0)(x1−x2)(x−x0)(x−x2)y1+(x2−x0)(x2−x1)(x−x0)(x−x1)y2
牛顿(Newton)插值法
可以逐次添加,可以使用先前的计算结果:
N
n
(
x
)
=
f
(
x
0
)
+
(
x
−
x
0
)
f
[
x
0
,
x
1
]
+
(
x
−
x
0
)
(
x
−
x
1
)
f
[
x
0
,
x
1
,
x
2
]
+
.
.
.
+
(
x
−
x
0
)
(
x
−
x
1
)
.
.
.
(
x
−
x
n
−
1
)
f
[
x
0
,
x
1
,
.
.
.
,
x
n
]
N_n(x) = f(x_0) + (x-x_0)f[x_0, x_1] + (x-x_0)(x-x_1)f[x_0, x_1, x_2] + ... + (x-x_0)(x-x_1)...(x-x_{n-1})f[x_0, x_1, ..., x_n]
Nn(x)=f(x0)+(x−x0)f[x0,x1]+(x−x0)(x−x1)f[x0,x1,x2]+...+(x−x0)(x−x1)...(x−xn−1)f[x0,x1,...,xn]
n阶式需要n+1个节点,通常在求解时会构造差商表进行求解。
埃尔米特(Hermite)插值法
利用导数信息做插值,常用降解法求解:
- 利用牛顿法或拉格朗日法求解普通插值
- 设一般式: H ( x ) = N n ( x ) + f ( x ) ( x − x 0 ) ( x − x 1 ) . . . ( x − x n ) H(x) = N_n(x) + f(x)(x-x_0)(x-x_1)...(x-x_n) H(x)=Nn(x)+f(x)(x−x0)(x−x1)...(x−xn),在代入导数信息求解
误差估计
对于n+1个节点,可以构造n阶多项式,其误差为(上述三种方法都适用):
R
n
(
x
)
=
f
(
x
)
−
ϕ
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
∏
i
=
0
n
(
x
−
x
i
)
R_n(x) = f(x) - \phi_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\prod^{n}_{i=0}(x-x_i)
Rn(x)=f(x)−ϕn(x)=(n+1)!f(n+1)(ξ)i=0∏n(x−xi)
第六章——函数逼近
解决问题
给出一些列点,拟合函数表达式的参数
多项式最小二乘法
记n个点的m阶多项式拟合误差为:
F
(
a
0
,
a
1
.
.
.
a
m
)
=
∑
i
=
0
n
(
y
i
−
∑
k
=
0
m
a
k
x
i
k
)
2
F(a_0, a_1...a_m) = \sum_{i=0}^{n}(y_i - \sum_{k=0}^ma_kx_i^k)^2
F(a0,a1...am)=∑i=0n(yi−∑k=0makxik)2
令各个
a
i
a_i
ai求偏导为0:
d
F
d
a
p
=
∑
i
=
0
n
[
2
(
y
i
−
∑
k
=
0
m
a
k
x
i
k
)
x
i
p
]
=
0
\frac{dF}{da_p} = \sum_{i=0}^{n}[2(y_i - \sum_{k=0}^ma_kx_i^k)x_i^p] = 0
dapdF=∑i=0n[2(yi−∑k=0makxik)xip]=0
由此可以得到m+1阶方程组:
∑
i
=
0
n
∑
k
=
0
m
a
k
x
i
k
+
p
=
∑
i
=
0
n
y
i
x
i
p
\sum_{i=0}^n\sum_{k=0}^ma_kx_i^{k+p} = \sum_{i=0}^{n}y_ix_i^p
∑i=0n∑k=0makxik+p=∑i=0nyixip,当m=2时,方程简记为:
[
S
n
S
x
S
x
2
S
x
S
x
2
S
x
3
S
x
2
S
x
3
S
x
4
]
[
a
0
a
1
a
2
]
=
[
S
y
S
y
x
S
y
x
2
]
\begin{bmatrix} S_n & S_x & S_{x^2} \\ S_x & S_{x^2} & S_{x^3} \\ S_{x^2} & S_{x^3} & S_{x^4} \end{bmatrix} \begin{bmatrix} a_0 \\ a_1 \\ a_2 \end{bmatrix} = \begin{bmatrix} S_y \\ S_{yx} \\ S_{yx^2} \end{bmatrix}
⎣⎡SnSxSx2SxSx2Sx3Sx2Sx3Sx4⎦⎤⎣⎡a0a1a2⎦⎤=⎣⎡SySyxSyx2⎦⎤
其中,
S
x
=
∑
i
=
0
n
x
i
S_x = \sum_{i=0}^{n}x_i
Sx=∑i=0nxi ,其它表达式同理
补充一些变换
求
y
=
b
e
a
x
y = be^{ax}
y=beax时,可以先两边取对数得到
ln
y
=
ln
b
+
a
x
\ln{y} = \ln{b} + ax
lny=lnb+ax,用
Y
=
a
0
+
a
1
x
Y=a_0 + a_1x
Y=a0+a1x拟合
求
y
=
a
x
x
+
b
y = a\frac{x}{x+b}
y=ax+bx时,先去倒数得到
1
y
=
b
a
x
+
1
a
\frac{1}{y} = \frac{b}{ax} + \frac{1}{a}
y1=axb+a1, 用
Y
=
a
0
+
a
1
X
Y=a_0 + a_1X
Y=a0+a1X拟合,再代会x, y
第七章——数值积分和数值微分
解决问题
利用数值计算的方法求某点处的微分和某个区间内的导数
数值微分
名称 | 公式 | 误差 |
---|---|---|
一阶向前差商 | f ′ ( x ) = f ( x + h ) − f ( x ) h f'(x) = \frac{f(x+h) - f(x)}{h} f′(x)=hf(x+h)−f(x) | h 2 f ′ ′ ( ξ ) \frac{h}{2}f''(\xi) 2hf′′(ξ) |
一阶向后差商 | f ′ ( x ) = f ( x ) − f ( x − h ) h f'(x) = \frac{f(x) - f(x-h)}{h} f′(x)=hf(x)−f(x−h) | h 2 f ′ ′ ( ξ ) \frac{h}{2}f''(\xi) 2hf′′(ξ) |
一阶中心差商 | f ′ ( x ) = f ( x + h ) − f ( x − h ) 2 h f'(x) = \frac{f(x+h) - f(x-h)}{2h} f′(x)=2hf(x+h)−f(x−h) | h 2 6 f ′ ′ ′ ( ξ ) \frac{h^2}{6}f'''(\xi) 6h2f′′′(ξ) |
二阶差商 | f ′ ( x ) = f ( x + h ) − 2 f ( x ) + f ( x − h ) h 2 f'(x) = \frac{f(x+h) - 2f(x) + f(x-h)}{h^2} f′(x)=h2f(x+h)−2f(x)+f(x−h) | h 2 12 f ( 4 ) ( ξ ) \frac{h^2}{12}f^{(4)}(\xi) 12h2f(4)(ξ) |
三点式1 | f ′ ( x 0 ) = − 3 f ( x 0 ) + 4 f ( x 1 ) + f ( x 2 ) 2 h f'(x_0) = \frac{-3f(x0) + 4f(x_1) + f(x_2)}{2h} f′(x0)=2h−3f(x0)+4f(x1)+f(x2) | h 2 3 f ( 3 ) ( ξ ) \frac{h^2}{3}f^{(3)}(\xi) 3h2f(3)(ξ) |
三点式2 | f ′ ( x 1 ) = f ( x 2 ) − f ( x 1 ) 2 h f'(x_1) = \frac{f(x_2) - f(x_1)}{2h} f′(x1)=2hf(x2)−f(x1) | h 2 6 f ( 3 ) ( ξ ) \frac{h^2}{6}f^{(3)}(\xi) 6h2f(3)(ξ) |
三点式3 | f ′ ( x 2 ) = f ( x 0 ) − 4 f ( x 1 ) + 3 f ( x 2 ) 2 h f'(x_2) = \frac{f(x_0) - 4f(x_1) + 3f(x_2)}{2h} f′(x2)=2hf(x0)−4f(x1)+3f(x2) | h 2 3 f ( 3 ) ( ξ ) \frac{h^2}{3}f^{(3)}(\xi) 3h2f(3)(ξ) |
牛顿-科特斯(Newton-Cotes)积分
按比例构造函数值的线性组合求出积分。
阶级 | 别名 | 比例 | 误差 |
---|---|---|---|
1 | 梯形公式 | 1 1 | ( b − a ) 3 12 f ′ ′ ( ξ ) \frac{(b-a)^3}{12}f''(\xi) 12(b−a)3f′′(ξ) |
2 | 辛普森(Simpsen)公式 | 1 4 1 | ( b − a ) 5 2880 f ( 4 ) ( ξ ) \frac{(b-a)^5}{2880}f^{(4)}(\xi) 2880(b−a)5f(4)(ξ) |
衡量准确性
利用代数精度衡量准确性:某式子能准备积分多少阶代数,则具有多少代数精度。
复化求积公式
通过减小积分区间来减小积分的误差。
名称 | 公式 | 误差 |
---|---|---|
梯形公式 | h 2 [ f ( a ) + f ( b ) + 2 ∑ i = 1 n − 1 f ( x i ) ] \frac{h}{2}[f(a) + f(b) + 2\sum_{i=1}^{n-1}f{(x_i)}] 2h[f(a)+f(b)+2∑i=1n−1f(xi)] | ( b − a ) 12 h 2 f ′ ′ ( ξ ) \frac{(b-a)}{12}h^2f''(\xi) 12(b−a)h2f′′(ξ) |
辛普森公式 | h 3 [ f ( a ) + f ( b ) + 2 ∑ f ( x 偶 ) + 4 ∑ f ( x 奇 ) ] \frac{h}{3}[f(a)+f(b)+ 2\sum f{(x_偶)} + 4\sum f(x_奇)] 3h[f(a)+f(b)+2∑f(x偶)+4∑f(x奇)] | b − a 180 h 4 f ( 4 ) ( ξ ) \frac{b-a}{180}h^4f^{(4)}(\xi) 180b−ah4f(4)(ξ) |
逐次半分法
合理缩小积分粒度,求得更准确的结果。
逐次半分梯形:
T
2
m
+
1
=
1
2
T
2
m
+
h
m
+
1
∑
f
(
x
新
)
T_{2^{m+1}} = \frac{1}{2}T_{2^m} + h_{m+1}\sum f(x_新)
T2m+1=21T2m+hm+1∑f(x新)
龙贝格(Romberg)积分法
在逐次半分法的基础上增加外推法(4倍)获得更准确的结果。
高斯(Gauss)型求积公式
具有2n-1阶代数精确度的求积式称为高斯型求积公式。
第八章——非线性方程的解法
解决的问题
f ( x ) = 0 f(x) = 0 f(x)=0
对分区间法
若f(x)在[a, b]上连续,且有 f ( a ) f ( b ) < 0 f(a)f(b)<0 f(a)f(b)<0,则可以依照零点定理通过每次取中点的方法迭代缩小范围。
迭代法
将原方程转换成 x n + 1 = ϕ ( x n ) x_{n+1} = \phi(x_n) xn+1=ϕ(xn)的形式迭代求解。注意不是所有的格式都收敛,可以根据下面定理判断。
判断收敛性
压缩印象原理
- 对于 x ∈ [ a , b ] x \in [a, b] x∈[a,b],有 ϕ ( x ) ∈ [ a , b ] \phi(x) \in [a, b] ϕ(x)∈[a,b]
- 对于 ∀ x , y ∈ [ a , b ] \forall x, y \in [a, b] ∀x,y∈[a,b], ∣ ϕ ( x ) − ϕ ( y ) ∣ ≤ L ( L < 1 ) |\phi(x) - \phi(y)| \leq L(L < 1) ∣ϕ(x)−ϕ(y)∣≤L(L<1)
则 ϕ ( x ) \phi(x) ϕ(x)在[a, b]中收敛到唯一解 x ∗ x^* x∗且误差满足 ∣ x ∗ − x n ∣ ≤ L n 1 − L ∣ x 1 − x 0 ∣ |x^* - x_n| \leq \frac{L^n}{1-L}|x_1 - x_0| ∣x∗−xn∣≤1−LLn∣x1−x0∣
推论
- 对于 x ∈ [ a , b ] x \in [a, b] x∈[a,b],有 ϕ ( x ) ∈ [ a , b ] \phi(x) \in [a, b] ϕ(x)∈[a,b]
- 对于 ∀ x , y ∈ [ a , b ] \forall x, y \in [a, b] ∀x,y∈[a,b], ϕ ( x ) ′ ≤ L ( L < 1 ) \phi(x)' \leq L(L < 1) ϕ(x)′≤L(L<1)
则 ϕ ( x ) \phi(x) ϕ(x)在[a, b]中收敛到唯一解 x ∗ x^* x∗且误差满足 ∣ x ∗ − x n ∣ ≤ L n 1 − L ∣ x 1 − x 0 ∣ |x^* - x_n| \leq \frac{L^n}{1-L}|x_1 - x_0| ∣x∗−xn∣≤1−LLn∣x1−x0∣
局部收敛定理
若 ϕ ( x ) \phi(x) ϕ(x)在 x ∗ x^* x∗的某邻域 O ( x ∗ , θ ) O(x^*, \theta) O(x∗,θ)中连续可微,且 ∣ ϕ ( x ) ′ ∣ < 1 |\phi(x)'| < 1 ∣ϕ(x)′∣<1,则 ϕ ( x ) \phi(x) ϕ(x)在局部收敛。
收敛速度
若 lim n → ∞ ∣ x n + 1 − x ∗ ∣ ∣ x n − x ∗ ∣ r = a \lim_{n \to \infty} \frac{|x_{n+1} - x^*|}{|x_{n} - x^*|^{r}} = a limn→∞∣xn−x∗∣r∣xn+1−x∗∣=a,则是r阶收敛,可以利用洛必达法则对 ϕ ( x ) \phi(x) ϕ(x)反复求导,求收敛阶。
牛顿法
设
f
(
x
)
=
0
f(x)=0
f(x)=0, 提供一种构造方法:
x
n
+
1
=
x
n
−
f
(
x
)
f
(
x
)
′
x_{n+1} = x_{n} - \frac{f(x)} {f(x)'}
xn+1=xn−f(x)′f(x)
牛顿弦截法
用差商代替导数,得到迭代公式:
x
n
+
1
=
x
n
−
f
(
x
n
)
f
(
x
n
)
−
f
(
x
n
−
1
)
(
x
n
−
x
n
−
1
)
x_{n+1} = x_{n} - \frac{f(x_{n})} {f(x_{n}) - f(x_{n-1})}(x_{n}-x_{n-1})
xn+1=xn−f(xn)−f(xn−1)f(xn)(xn−xn−1)
第九章——常微分方程的数值解法
解决的问题
{ d y d x = f ( x , y ) y ( a ) = y 0 \left\{ \begin{aligned} \frac{dy}{dx} & = f(x, y) \\ y(a) & = y_0 \end{aligned} \right. ⎩⎨⎧dxdyy(a)=f(x,y)=y0
欧拉(Euler)法
将该问题直接作为一个积分问题,从
x
=
a
x = a
x=a开始按定长
h
h
h积分:
y
n
+
1
=
y
n
+
h
×
f
(
x
n
,
y
n
)
y_{n+1} = y_n + h \times f(x_n, y_n)
yn+1=yn+h×f(xn,yn)
例题
改进欧拉法
先利用Euler法求得
y
n
+
1
y_{n+1}
yn+1的值,由
(
x
n
+
1
,
y
n
+
1
)
(x_{n+1}, y_{n+1})
(xn+1,yn+1)再做一次Euler进行修正:
{
y
p
=
y
n
+
h
×
f
(
x
n
,
y
n
)
y
q
=
y
n
+
h
×
f
(
x
n
+
1
,
y
q
)
y
n
+
1
=
y
p
+
y
q
2
\left\{ \begin{aligned} y_p & = y_n + h \times f(x_n, y_n) \\ y_q & = y_n + h \times f(x_{n+1}, y_q) \\ y_{n + 1} & = \frac{y_p + y_q}{2} \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧ypyqyn+1=yn+h×f(xn,yn)=yn+h×f(xn+1,yq)=2yp+yq