分片线性插值函数最大误差(无穷范数误差)收敛阶的详细推导
假设我们要在区间 [ x i , x i + 1 ] [x_i, x_{i+1}] [xi,xi+1]上进行分片线性插值。我们用 L ( x ) L(x) L(x) 表示这个区间上的分片线性插值函数,用 (f(x)) 表示实际的函数。
泰勒展开与误差估计
为了估计误差,我们可以对
f
(
x
)
f(x)
f(x)进行泰勒展开。在
x
i
x_i
xi 处展开得到:
f
(
x
)
=
f
(
x
i
)
+
f
′
(
x
i
)
(
x
−
x
i
)
+
f
′
′
(
ξ
)
2
(
x
−
x
i
)
2
f(x) = f(x_i) + f'(x_i)(x - x_i) + \frac{f''(\xi)}{2}(x - x_i)^2
f(x)=f(xi)+f′(xi)(x−xi)+2f′′(ξ)(x−xi)2
其中,
ξ
\xi
ξ 是
x
x
x 和
x
i
x_i
xi 之间的某个点。
分片线性插值函数
L
(
x
)
L(x)
L(x) 在区间
[
x
i
,
x
i
+
1
]
[x_i, x_{i+1}]
[xi,xi+1] 上的表达式为:
L
(
x
)
=
x
i
+
1
−
x
x
i
+
1
−
x
i
f
(
x
i
)
+
x
−
x
i
x
i
+
1
−
x
i
f
(
x
i
+
1
)
L(x) = \frac{x_{i+1} - x}{x_{i+1} - x_i} f(x_i) + \frac{x - x_i}{x_{i+1} - x_i} f(x_{i+1})
L(x)=xi+1−xixi+1−xf(xi)+xi+1−xix−xif(xi+1)
因为
L
(
x
)
L(x)
L(x) 是线性的,可以将其表示为:
L
(
x
)
=
f
(
x
i
)
+
f
(
x
i
+
1
)
−
f
(
x
i
)
x
i
+
1
−
x
i
(
x
−
x
i
)
L(x) = f(x_i) + \frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i} (x - x_i)
L(x)=f(xi)+xi+1−xif(xi+1)−f(xi)(x−xi)
误差表达式
误差
E
(
x
)
E(x)
E(x) 是实际函数值
f
(
x
)
f(x)
f(x)和插值函数值
L
(
x
)
L(x)
L(x) 之间的差异:
E
(
x
)
=
f
(
x
)
−
L
(
x
)
E(x) = f(x) - L(x)
E(x)=f(x)−L(x)
我们将泰勒展开的表达式与线性插值函数进行比较,得到:
E
(
x
)
=
f
(
x
i
)
+
f
′
(
x
i
)
(
x
−
x
i
)
+
f
′
′
(
ξ
)
2
(
x
−
x
i
)
2
−
[
f
(
x
i
)
+
f
(
x
i
+
1
)
−
f
(
x
i
)
x
i
+
1
−
x
i
(
x
−
x
i
)
]
E(x) = f(x_i) + f'(x_i)(x - x_i) + \frac{f''(\xi)}{2}(x - x_i)^2 - \left[ f(x_i) + \frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i} (x - x_i) \right]
E(x)=f(xi)+f′(xi)(x−xi)+2f′′(ξ)(x−xi)2−[f(xi)+xi+1−xif(xi+1)−f(xi)(x−xi)]
简化得:
E
(
x
)
=
f
′
(
x
i
)
(
x
−
x
i
)
+
f
′
′
(
ξ
)
2
(
x
−
x
i
)
2
−
f
(
x
i
+
1
)
−
f
(
x
i
)
x
i
+
1
−
x
i
(
x
−
x
i
)
E(x) = f'(x_i)(x - x_i) + \frac{f''(\xi)}{2}(x - x_i)^2 - \frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i} (x - x_i)
E(x)=f′(xi)(x−xi)+2f′′(ξ)(x−xi)2−xi+1−xif(xi+1)−f(xi)(x−xi)
由于
f
(
x
i
+
1
)
f(x_{i+1})
f(xi+1)可以用泰勒展开表示为:
f
(
x
i
+
1
)
=
f
(
x
i
)
+
f
′
(
x
i
)
(
x
i
+
1
−
x
i
)
+
f
′
′
(
ξ
′
)
2
(
x
i
+
1
−
x
i
)
2
f(x_{i+1}) = f(x_i) + f'(x_i)(x_{i+1} - x_i) + \frac{f''(\xi')}{2}(x_{i+1} - x_i)^2
f(xi+1)=f(xi)+f′(xi)(xi+1−xi)+2f′′(ξ′)(xi+1−xi)2
其中
ξ
′
\xi'
ξ′ 是
[
x
i
,
x
i
+
1
]
[x_i, x_{i+1}]
[xi,xi+1]上的某个点。
因此,
f
(
x
i
+
1
)
−
f
(
x
i
)
x
i
+
1
−
x
i
\frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i}
xi+1−xif(xi+1)−f(xi) 可以近似表示为:
f
(
x
i
+
1
)
−
f
(
x
i
)
x
i
+
1
−
x
i
≈
f
′
(
x
i
)
+
f
′
′
(
ξ
′
)
2
(
x
i
+
1
−
x
i
)
\frac{f(x_{i+1}) - f(x_i)}{x_{i+1} - x_i} \approx f'(x_i) + \frac{f''(\xi')}{2}(x_{i+1} - x_i)
xi+1−xif(xi+1)−f(xi)≈f′(xi)+2f′′(ξ′)(xi+1−xi)
代入得到:
E
(
x
)
=
f
′
(
x
i
)
(
x
−
x
i
)
+
f
′
′
(
ξ
)
2
(
x
−
x
i
)
2
−
[
f
′
(
x
i
)
+
f
′
′
(
ξ
′
)
2
(
x
i
+
1
−
x
i
)
]
(
x
−
x
i
)
E(x) = f'(x_i)(x - x_i) + \frac{f''(\xi)}{2}(x - x_i)^2 - \left[f'(x_i) + \frac{f''(\xi')}{2}(x_{i+1} - x_i)\right](x - x_i)
E(x)=f′(xi)(x−xi)+2f′′(ξ)(x−xi)2−[f′(xi)+2f′′(ξ′)(xi+1−xi)](x−xi)
继续简化,我们得到:
E
(
x
)
=
f
′
′
(
ξ
)
2
(
x
−
x
i
)
2
−
f
′
′
(
ξ
′
)
2
(
x
i
+
1
−
x
i
)
(
x
−
x
i
)
E(x) = \frac{f''(\xi)}{2}(x - x_i)^2 - \frac{f''(\xi')}{2}(x_{i+1} - x_i)(x - x_i)
E(x)=2f′′(ξ)(x−xi)2−2f′′(ξ′)(xi+1−xi)(x−xi)
将误差整理成一个更简洁的形式:
E
(
x
)
≈
f
′
′
(
ξ
)
2
(
x
−
x
i
)
(
x
−
x
i
+
1
)
E(x) \approx \frac{f''(\xi)}{2} (x - x_i)(x - x_{i+1})
E(x)≈2f′′(ξ)(x−xi)(x−xi+1)
最大误差的估计
我们可以进一步分析这个误差表达式来找到最大误差的位置。在区间
[
x
i
,
x
i
+
1
]
[x_i, x_{i+1}]
[xi,xi+1] 上,
(
x
−
x
i
)
(
x
−
x
i
+
1
)
(x - x_i)(x - x_{i+1})
(x−xi)(x−xi+1) 在
x
=
x
i
+
x
i
+
1
2
x = \frac{x_i + x_{i+1}}{2}
x=2xi+xi+1 处取最大值。对于
[
x
i
,
x
i
+
1
]
[x_i, x_{i+1}]
[xi,xi+1] 上的中点
x
=
x
i
+
x
i
+
1
2
x = \frac{x_i + x_{i+1}}{2}
x=2xi+xi+1 ,我们可以计算误差:
E
(
x
i
+
x
i
+
1
2
)
=
f
′
′
(
ξ
)
2
(
x
i
+
x
i
+
1
2
−
x
i
)
(
x
i
+
x
i
+
1
2
−
x
i
+
1
)
E\left( \frac{x_i + x_{i+1}}{2} \right) = \frac{f''(\xi)}{2} \left( \frac{x_i + x_{i+1}}{2} - x_i \right) \left( \frac{x_i + x_{i+1}}{2} - x_{i+1} \right)
E(2xi+xi+1)=2f′′(ξ)(2xi+xi+1−xi)(2xi+xi+1−xi+1)
简化得:
E
(
x
i
+
x
i
+
1
2
)
=
f
′
′
(
ξ
)
2
(
x
i
+
1
−
x
i
2
)
(
−
x
i
+
1
−
x
i
2
)
E\left( \frac{x_i + x_{i+1}}{2} \right) = \frac{f''(\xi)}{2} \left( \frac{x_{i+1} - x_i}{2} \right) \left( -\frac{x_{i+1} - x_i}{2} \right)
E(2xi+xi+1)=2f′′(ξ)(2xi+1−xi)(−2xi+1−xi)
E ( x i + x i + 1 2 ) = − f ′ ′ ( ξ ) 2 ( x i + 1 − x i 2 ) 2 E\left( \frac{x_i + x_{i+1}}{2} \right) = -\frac{f''(\xi)}{2} \left( \frac{x_{i+1} - x_i}{2} \right)^2 E(2xi+xi+1)=−2f′′(ξ)(2xi+1−xi)2
E ( x i + x i + 1 2 ) = − f ′ ′ ( ξ ) 2 ⋅ ( x i + 1 − x i ) 2 4 E\left( \frac{x_i + x_{i+1}}{2} \right) = -\frac{f''(\xi)}{2} \cdot \frac{(x_{i+1} - x_i)^2}{4} E(2xi+xi+1)=−2f′′(ξ)⋅4(xi+1−xi)2
E ( x i + x i + 1 2 ) = − f ′ ′ ( ξ ) 8 ( x i + 1 − x i ) 2 E\left( \frac{x_i + x_{i+1}}{2} \right) = -\frac{f''(\xi)}{8} (x_{i+1} - x_i)^2 E(2xi+xi+1)=−8f′′(ξ)(xi+1−xi)2
总结
我们可以看到,在区间
[
x
i
,
x
i
+
1
]
[x_i, x_{i+1}]
[xi,xi+1] 上,分片线性插值的最大误差为:
∣
E
(
x
)
∣
max
≈
∣
f
′
′
(
ξ
)
∣
8
(
x
i
+
1
−
x
i
)
2
|E(x)|_{\text{max}} \approx \frac{|f''(\xi)|}{8} (x_{i+1} - x_i)^2
∣E(x)∣max≈8∣f′′(ξ)∣(xi+1−xi)2
这个结果表明分片线性插值的最大误差与区间长度的平方成正比,并且与函数的二阶导数成正比。这解释了为什么误差随区间变短而减少,因为误差是 Δ x 2 \Delta x^2 Δx2 的量级。
令 h = x i + 1 − x i h=x_{i+1} - x_i h=xi+1−xi,也就是说分片线性插值的最大误差是二阶收敛 O ( h 2 ) O(h^2) O(h2), 。
图示与直观理解
通过图示可以更直观地理解这个误差。设想一个光滑的函数 f ( x ) f(x) f(x) 和它的分片线性插值函数 L ( x ) L(x) L(x)。在每个区间的中点处,插值函数和实际函数之间的距离(误差)最大。通过减少区间长度(增加插值点),可以降低误差。
示例代码
我们可以用代码来验证这个结论,并通过图形展示误差的变化。
import numpy as np
import matplotlib.pyplot as plt
# 定义函数和插值点
x = np.linspace(0, np.pi, 100)
f = np.sin(x)
xi = np.linspace(0, np.pi, 10)
fi = np.sin(xi)
# 分片线性插值
L = np.interp(x, xi, fi)
# 计算误差
error = f - L
# 绘制函数和插值结果
plt.figure(figsize=(10, 5))
plt.plot(x, f, label='原函数 $\sin(x)$')
plt.plot(x, L, label='分片线性插值', linestyle='--')
plt.scatter(xi, fi, color='red', label='插值点')
plt.legend()
plt.title('分片线性插值和 $\sin(x)$ 的比较')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.grid(True)
plt.show()
# 绘制误差
plt.figure(figsize=(10, 5))
plt.plot(x, error, label='误差 $E(x)$')
plt.title('分片线性插值的误差')
plt.xlabel('x')
plt.ylabel('误差 $E(x)$')
plt.legend()
plt.grid(True)
plt.show()
# 输出最大误差
max_error = np.max(np.abs(error))
print(f'最大误差: {max_error}')
这个代码展示了 sin ( x ) \sin(x) sin(x) 的分片线性插值,并计算和绘制误差曲线。通过观察误差曲线,可以验证在中点附近误差最大,并且误差随着区间长度的平方减少。