插值问题
物理问题 → 离散化 → 计算机处理
离散的物理数据,但不知道实际函数→ 构造近似函数作为实际函数f(x)的逼近
插值问题的数学表述: f(x)是定义在区间[a,b]的函数,(x0,y0), (x1,y1), (x2,y2)..., (xn,yn)是该区间上n+1个不同的点。我们需要构造一个便于计算的函数P(x),s.t.
P(xi)=yi
则称P(x)是f(x)的插值函数,[a,b]是插值区间,(xi,yi)是插值节点。同时在其他x=xi点上,P(x)可以作为f(x)的近似。
多项式插值
设Pn(x)=a0+a1x+a2x2+...+anxn,a0,a1,...,an∈R
定理:对于n+1个互不相同的插值节点,满足插值条件的n次多项式插值函数存在且唯一。
多项式插值方法一 —— 拉格朗日插值法
引入:线性插值
给定两个点(x0,y0),(x1,y1)求解
{a0+a1x0=y0a0+a1x1=y1
可得
P1(x)=a0+a1x=x0−x1x−x1y0+x1−x0x−x0y1
推广:拉格朗日插值
Pn(x)=k=0∑nlk(x)⋅yk,lk(x)=j=k∏xk−xjx−xj
其中lk(x)被称作基函数。
拉格朗日插值基函数满足以下性质:
- 归一性:lk(xi)={1i=k0o/w
- 多项式次数:每个lk是n次多项式。
举例理解
上面的线性插值已经是一个例子。现在看n=2:
对于(x0,x1,x2),
l0(x)l1(x)l2(x)=(x0−x1)(x0−x2)(x−x1)(x−x2)=(x1−x0)(x1−x2)(x−x0)(x−x2)=(x2−x0)(x2−x1)(x−x0)(x−x1)
线性插值误差
定理:设 f(x) 一阶连续可导,且 f′′(x) 在区间 (a,b) 上存在,则对任意 x∈[a,b],存在 ξ∈[a,b] 使得:
R(x)=f(x)−P1(x)=2f′′(ξ)(x−x0)(x−x1)
证明过程:
定义误差函数:
R(x)=f(x)−P1(x)=k(x)(x−x0)(x−x1)
构造辅助函数:
ϕ(t)=f(t)−P1(t)−k(x)(t−x0)(t−x1)
ϕ(t) 在 x0,x,x1 处有零点,且ϕ′(t) 在 (ξ1,ξ2) 有零点
∴ 应用Rolle定理:ϕ′′(ξ)=0 ⇒ f′′(ξ)=2k(x)
一般形式的误差估计: 对于 n 次插值多项式 Pn(x):
Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξ)ωn+1(x)
其中:
ωn+1(x)=i=0∏n(x−xi)
∴
- 误差与高阶导数 f(n+1) 成正比
- 节点越密集 ((x−xi) 越小),误差越小
- 增加节点数 n 可提高精度
很多情况下,f(n+1) 未知,可采用以下方法估计:
使用 n+2 个数据点进行两次插值运算:前 n+1 点构造 Pn(x);后 n+1 点构造 P^n(x)。整理可得误差关系式:
f(x)−Pn(x)≈x0−xn+1x−x0(Pn(x)−P^n(x))
拉格朗日插值法的优点/缺点:
- 优点:
- 显示公式:无需解线性方程组,直接构造多项式。
- 理论直观
- 缺点:
- 计算效率低:新增节点需重新计算所有基函数。
- 数值不稳定:高次插值时可能因舍入误差放大失效。
多项式插值方法二——牛顿插值法
引入
避开了拉格朗日插值法“新增节点需重新计算所有基函数”这一问题。
由数学知识可知任何一个多项式都可以表示为:
Nn(x)=a0+k=1∑naki=0∏k−1(x−xi)
在牛顿形式下,我们可以认为此时ak对应的基函数是k的多项式∏i=0k−1(x−xi),它们相互独立。因此有更高阶数加入的时候只需计算相应新的多项式系数即可。
计算步骤
将插值条件P(xi)=yi写成线性方程组的形式:
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧y0=a0=f(x0)y1=y0+a1(x1−x0)=f(x1)y2=y0+a1(x2−x0)+a2(x2−x0)(x2−x1)=f(x2)...yn=y0+a1(xn−x0)+a2(xn−x0)(xn−x1)+...+an(xn−x0)(xn−x1)...(xn−xn−1)=f(xn)
引入差商的概念:
由(y0,y1)我们引入一阶差商
F(x0,x1)=x1−x0f(x1)−f(x0)
类似可得更高阶的差商公式:
F(x2,x1)=x2−x1f(x2)−f(x1)F(x0,x1,x2)=x2−x0F(x2,x1)−F(x0,x1)...F(x0,...,xn)=xn−x0F(x1,...,xn)−F(x0,...,xn−1)
根据以上公式我们可以改写差商形式的牛顿插值多项式:
Pn(x)=F(x0)+k=1∑nF(x0,...,xk)⋅i=0∏k−1(x−xi)
示例
P3(x)=F(x0)+F(x0,x1)(x−x0)+F(x0,x1,x2)(x−x0)(x−x1)+F(x0,x1,x2,x3)(x−x0)(x−x1)(x−x2)
牛顿差商的性质
- 线性性:
若h(x)=αf(x)+βg(x),则:
H(x0,...,xn)=αF(x0,...,xn)+βG(x0,...,xn)
- 对称性
差商值与节点排列顺序无关:
F(x0,x1,...,xn)=F(xσ(0),xσ(1),...,xσ(n))
其中σ是任意排列
-
差商和导数关系:
若f(x)∈Cn[a,b],则存在ξ∈(a,b)使得:
-
差商表可加性:
新增节点xn+1时:
F(x0,...,xn+1)=xn+1−x0F(x1,...,xn+1)−F(x0,...,xn)
F(x0,...,xn)=n!f(n)(ξ)
荣格(Runge)现象
指在高次多项式插值中,随着插值节点数量的增加,插值结果在区间端点附近出现剧烈振荡的现象。这种现象由德国数学家Carl Runge在研究多项式插值时首次发现。
解决方法:多次线性插值
将插值区间划分为若干子区间,在每个子区间上用线性多项式进行插值的方法。给定节点(x0,y0),(x1,y1),...,(xn,yn),我们构造的插值函数应该满足:
- S(xi)=yi (通过所有节点)
- S(x)在每个[xi,xi+1]上是线性函数
- 整体函数连续(C0连续)
具体实现步骤:
- 找到待插值点x及其所在的区间[xk,xk+1]
- 计算:$ P_1(x) = \frac{x-x_{k+1}}{x_k - x_{k+1}}y_k + \frac{x-x_k}{x_{k+1} - x_k}y_{k+1} $
缺陷:C1不连续
样条插值
样条插值(Spline Interpolation)是一种分段低次多项式插值方法,通过强制拼接点处的光滑条件来保证整体曲线的平滑性。
插值函数需要满足:
- Si(xi)=yi, Si(xi+1)=yi+1(插值条件)
- 连续性:
- C0: Si−1(xi)=Si(xi)
- C1: Si−1′(xi)=Si′(xi)
- C2: Si−1′′(xi)=Si′′(xi)
最常用:三次样条插值函数,即在每段[xi,xi+1]上构造:
Si(x)=ai+bi(x−xi)+ci(x−xi)2+di(x−xi)3
对n+1个插值点,总共有n个区间,那么总参数有4n个。
约束条件:
- 插值条件:提供 n+1 个
- 连续性:提供 3(n−1) 个
- 边界条件:提供n个
对于x∈[xk,xk+1):
Sk(x)Sk′(x)Sk′′(x)=ak+bkh+ckh2+dkh3(h=x−xk)=bk+2ckh+3dkh2=2ck+6dkh
应满足条件:
- Sk(xk)=yk⇒ak=yk
- $ S_k(x_{k+1}) = y_{k+1} \Rightarrow a_k + h_k b_k + h_k^2 c_k + h_k^3 d_k = y_{k+1} $ (其中 hk=xk+1−xk)
- $ b_k + 2h_k c_k + 3h_k^2 d_k = b_{k+1} $
- $ 2c_k + 6h_k d_k = 2c_{k+1} $
求解该方程组:
令 mk=2ck,则:
- 由二阶导数连续条件:
dk=6hkmk+1−mk
- 代入插值方程得:
bk=hkyk+1−yk−2hkmk−6hk(mk+1−mk)
- 将系数代入一阶导数连续条件,得到:
hkmk+2(hk+hk+1)mk+1+hk+1mk+2=6(hk+1yk+2−yk+1−hkyk+1−yk)
- 将上两个边界条件的约束 ⇒ 建立起线性方程组即可求解。
数据拟合
数据拟合是通过数学模型近似描述离散数据点的方法,与插值的区别在于:
- 插值:强制通过所有数据点
- 拟合:允许存在偏差,追求整体趋势匹配
最小二乘法拟合
数学原理:最小化残差平方和:
mini=1∑n(yi−f(xi))2
线性拟合:
考虑f(x)=a+bx。
残差平方和:$$Q(a,b) = \sum_{i=1}^n (f(x_i) - y_i)^2 = \sum_{i=1}^n (a + b x_i - y_i)^2$$
Q(a,b)最小,需满足:
{∂a∂Q=2∑i=1n(a+bxi−yi)=0∂b∂Q=2∑i=1n(a+bxi−yi)xi=0
将方程组整理为矩阵形式:
[n∑xi∑xi∑xi2][ab]=[∑yi∑xiyi]
求解(a,b)即可。
多项式拟合
k次多项式模型:
f(x)=j=0∑kajxj
残差平方和:
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧a0∑1+a1∑xi+⋯+am∑xim=∑yia0∑xi+a1∑xi2+⋯+am∑xim+1=∑xiyi⋮a0∑xim+a1∑xim+1+⋯+am∑xi2m=∑ximyi
整理成矩阵形式:
⎣⎢⎢⎢⎢⎡n∑xi⋮∑xim∑xi∑xi2⋮∑xim+1⋯⋯⋱⋯∑xim∑xim+1⋮∑xi2m⎦⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎡a0a1⋮am⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡∑yi∑xiyi⋮∑ximyi⎦⎥⎥⎥⎥⎤
求解即可。
非线性拟合
模型类型 |
变换方法 |
线性形式 |
指数模型 y=aebx |
取对数 |
lny=lna+bx |
幂函数 y=axb |
取对数 |
lny=lna+blnx |
对数模型 y=alnx+b |
- |
直接拟合 |
倒数模型 y=a+bxx |
取倒数 |
y1=xa+b |
容易出现的问题:欠拟合&过拟合。
数值微分
用离散点进行数值微分:
假设数据点均匀分布,xi=x0+i⋅h,在xi−1、xi、xi+1附近Taylor展开:
fi+1=fi+hfi′+2h2fi′′+6h3fi′′′+O(h4)
fi−1=fi−hfi′+2h2fi′′−6h3fi′′′+O(h4)
就可以得到以下公式:
类型 |
公式 |
误差阶 |
前向差分 |
f′(x)≈hf(x+h)−f(x) |
O(h) |
后向差分 |
f′(x)≈hf(x)−f(x−h) |
O(h) |
中心差分 |
f′(x)≈2hf(x+h)−f(x−h) |
O(h2) |
再在xi−2、xi+2处展开:
fi+2=fi+2h⋅fi′+2!4h2fi′′+3!8h3fi′′′+...
fi−2=fi−2h⋅fi′+2!4h2fi′′−3!8h3fi′′′+...
又 ∵
fi+1=fi+hfi′+2h2fi′′+6h3fi′′′+O(h4)
fi−1=fi−hfi′+2h2fi′′−6h3fi′′′+O(h4)
消去fi′′′,可得:
数值积分
数据滤波