实验背景
Runge 现象
1901年,数学家 Carl Runge 发现了一个令人困惑的现象:对于函数f(x)=1+25x21 在区间x∈[−1,1] 上,如果选择n+1 个 等间距 的节点对区间进行均匀剖分,并构造其 Lagrange 插值多项式Pn(x)。随着插值多项式阶次n 的递增,插值误差En(x)=∣f(x)−Pn(x)∣ 的行为表现出明显的两极分化:误差在区间中心x≈0 附近 递减 ,然而,误差在区间边缘x≈±1 附近却 递增,Pn(x) 在端点附近出现剧烈的振荡。这种在高次多项式等距插值中,误差在区间边缘迅速发散的现象,被称为 Runge 现象。
Runge 现象的数学解释
我们对Runge现象给出一个通俗的解释:
Runge 现象的根本原因是我们在使用等距节点进行高次插值时,插值误差项En(x) 表达式中的两个关键因子在高阶时共同发散。
设Pn(x) 为在节点{x0,x1,…,xn} 上插值函数f(x) 的n 次多项式。若f∈Cn+1[a,b],则对任意x∈[a,b],存在ξ=ξ(x)∈(a,b) 使得
其中ωn(x)=∏i=0n(x−xi) 称为节点多项式。因此,最大误差的上界为
Lebesgue常数Λn 定义为Lagrange基函数之和的最大值:
其中li(x)=∏j=ixi−xjx−xj。误差实际上可以表示为与Λn 相关的形式,因为max∣ωn(x)∣ 与Λn 在本质上决定了插值运算的放大效应。
在区间[−1,1] 上取等距节点xk=−1+n2k,k=0,…,n。此时Lebesgue常数以指数速度增长:
更精确的下界为
对于Runge函数f(x)=1+25x21,其在复平面有极点z=±i/5,高阶导数∣f(n+1)(x)∣ 的增长大致为O((n+1)!⋅cn) 量级,其中c 与极点距离相关。虽然高阶导数增长迅速,但仍无法抵消Lebesgue常数的2n 级指数增长,因此整体误差上界随n 的增大而指数发散,并在端点附近表现出剧烈的震荡。
实验过程
实验内容
本实验对函数f(x)=1+25x21 在区间x∈[−1,1] 上,选择n+1 个等间距的节点对区间进行均匀剖分,并构造其 Lagrange 插值多项式Pn(x)。我们取了n=2,4,6,8,10,12,14,16进行实验,绘制插值函数图像,并比较误差函数En(x)在x=−1,0,1三点附近函数值随n递增的趋势变化。
之后我们展示了其他几个具有Runge现象的函数:f1(x)=1/(1+100x2),f2(x)=1/(1+e−40x),f3(x)=sech2(20x),f4(x)=tanh(30x)。
实验原理
本实验的核心方法是构造 Lagrange 插值多项式Pn(x) 来逼近原函数f(x)。给定n+1 个互异的插值节点(x0,y0),(x1,y1),…,(xn,yn),其中yj=f(xj),存在唯一一个次数不超过n 的多项式Pn(x) 满足Pn(xj)=yj。该多项式Pn(x) 由一组基本多项式Lj(x) 线性组合而成。Lagrange 基本多项式Lj(x) 定义为在节点xj 处取值为 1,而在所有其他节点xk(其中k=j)处取值为 0 的n 次多项式:
基于此,Lagrange 插值多项式Pn(x) 的主公式为Pn(x)=∑j=0nyjLj(x)。然而,为了提高高阶插值的数值稳定性和计算效率,本实验采用了重心 Lagrange 插值公式。该公式首先计算重心权重wj:
然后,插值多项式Pn(x) 可以通过如下形式高效计算:
插值误差Rn(x)=f(x)−Pn(x) 的理论表达式为Rn(x)=(n+1)!f(n+1)(ξ)⋅ωn+1(x),其中
算法流程与实现
本实验采用 python程序 进行实现,通过程序来研究具有Runge性质的函数的误差函数En(x)在x=−1,0,1三点附近函数值随n递增的趋势变化。主要程序段就是通过一个循环对所有预设的阶数n 执行以下步骤:
节点生成: 在[−1,1] 上生成n+1 个等距节点xj 及其对应的函数值yj。
插值计算: 调用重心 Lagrange 插值函数,进行 Lagrange 插值。
误差计算: 计算插值多项式与原函数的绝对误差En(x)=∣Pn(x)−f(x)∣。
结果可视化: 绘制并保存插值对比图(原函数与Pn(x) 的比较),以及分区域(左端点、中心、右端点)的绝对误差对数图,以直观展示误差的发散特性。
主要程序段
以下代码框展示了实验中用于实现Lagrange插值计算的核心函数:
CodeBlock Loading...
CodeBlock Loading...
实验结果与分析
f(x)=1+25x21 的Runge现象
我们绘制了如下的不同n取值情况下的Lagrange插值函数曲线图、不同插值函数左、中、右侧区域插值误差分析图.
图见 PDF。
n=2
图见 PDF。
n=4
图见 PDF。
n=6
图见 PDF。
n=8
图见 PDF。
n=10
图见 PDF。
n=12
图见 PDF。
n=14
图见 PDF。
n=16
不同插值点数(n)下的Lagrange插值函数图
图见 PDF。
左侧区域 (x∈[−1,−0.8]) 误差分布
图见 PDF。
中心区域 (x∈[−0.1,0.1]) 误差分布
图见 PDF。
右侧区域 (x∈[0.5,8]) 误差分布
由以下误差图我们能很清楚看到:随着n的增大,误差En在区间中心x≈0 附近 递减 ,在区间边缘x≈±1 附近却 递增,即为 Runge 现象。
其他具有Runge现象的函数
f1(x)=1/(1+100x2)
图见 PDF。
f1(x)=1/(1+100x2) 插值函数汇总图
图见 PDF。
中心区域 (x∈[−0.1,0.1]) 误差分布
图见 PDF。
左侧区域 (x∈[−1,−0.8]) 误差分布
图见 PDF。
右侧区域 (x∈[0.8,1]) 误差分布
f1(x)=1/(1+100x2)的插值函数汇总图+不同插值函数中、左、右侧区域插值误差分析图
f2(x)=1/(1+e−40x)
图见 PDF。
f2(x)=1/(1+e−40x) 插值函数汇总图
图见 PDF。
中心区域 (x∈[−0.1,0.1]) 误差分布
图见 PDF。
左侧区域 (x∈[−1,−0.8]) 误差分布
图见 PDF。
右侧区域 (x∈[0.8,1]) 误差分布
f2(x)=1/(1+e−40x)的插值函数汇总图+不同插值函数中、左、右侧区域插值误差分析图
f3(x)=sech2(20x)
图见 PDF。
f3(x)=sech2(20x) 插值函数汇总图
图见 PDF。
中心区域 (x \in [-0.1, 0.1]) 误差分布
图见 PDF。
左侧区域 (x \in [-1, -0.8]) 误差分布
图见 PDF。
右侧区域 (x \in [0.8, 1]) 误差分布
f3(x)=sech2(20x) 的插值函数汇总图 + 不同插值函数中、左、右侧区域插值误差分析图
f4(x)=tanh(30x)
图见 PDF。
f4(x)=tanh(30x) 插值函数汇总图
图见 PDF。
中心区域 (x∈[−0.1,0.1]) 误差分布
图见 PDF。
左侧区域 (x∈[−1,−0.8]) 误差分布
图见 PDF。
右侧区域 (x∈[0.5,0.8]) 误差分布
f4(x)=tanh(30x)的插值函数汇总图+不同插值函数中、左、右侧区域插值误差分析图
PDF
Download the original write-up here.