插值简介
插值(interpolation)是数值分析领域的一种处理数据的方法,用以从一系列离散的数据点中,构造出新的数据点。
插值的一般场景为:我们有一个已知或未知表达式的函数 f,以及它的一系列采样点 我们要找到一个函数 P,使得
寻找这一函数 的过程便称作插值(interpolate), 便被称作插值函数(interpolant)。
使用插值的目:
- 当具体表达式未知时,用以估计中间点处的函数值 。
- 当表达式比较复杂时,用比较简单的函数 来估计。
- 也可用于预测
多项式插值(Polynomial interpolation)拉格朗日插值多项式(Lagrange Interpolation Polynomial)牛顿插值多项式(Newton Interpolation Polynomial)埃尔米特插值多项式(Hermite Interpolation Polynomial)分段插值(Piecewise Interpolation)龙格效应(Runge's phenomenon)样条插值(Spline Interpolation)三次样条插值(Cubic Spline Interpolation)n维数据的插值例题机床加工数据处理补全总结参考文献扩展资料一篇本科论文华北理工大学数值计算方法免费公开课参考书:现代数值计算方法
注意事项:
- 插值要求插值函数完全进过采样点,若允许在采样点处出现误差以获得更好的性质,则被称为拟合(fitting)。
- 插值一般指内插,即中间点位于采样点之间,根据插值函数估计采样点范围之外的函数值的过程称为外插(extrapolation)。
有多种不同的方法来进行插值,从简单到复杂可分为多项式插值、分段插值和样条插值。
多项式插值(Polynomial interpolation)
给定 n + 1 个点及函数值 ,使用 n 次多项式
来进行插值的方法称作多项式插值。
考率到解一个个变量的线性方程组,可以考到插值多项式总是存在且唯一的,但直接解方程来求解过于繁复,有两种较好的方法来求这一多项式,即拉格朗日插值多项式和牛顿插值多项式。
拉格朗日插值多项式(Lagrange Interpolation Polynomial)
介绍
n 次拉格朗日插值多项式可表示为:
其中
是拉格朗日插值多项式的基项(基函数)。易知
即 经过所有采样点。
例如n=1时的简单情形(参考资料2),假定给定区间,及端点函数值,要求线性插值多项式满足
的几何意义就是通过两点与的直线,可以给出其表达式
即直线的两点式表达。可以看出是由插值基函数和线性组合得到的,即
问题
龙格现象
代码实现
Python中有可以直接使用的函数
MATLAB实现:
牛顿插值多项式(Newton Interpolation Polynomial)
牛顿插值多项式 是 的递推形式,相较拉格朗日插值法,其优点是计算过程具有继承性。
随着新的采样点加入,可从原本的 的基础上获得新的插值函数,而不像 一样需要重新计算整个表达式。
可递归地表示为:
其中为 n 阶差商(n-th divided difference),递归地定义为
当采样点之间距离相等为 时,递归表达式可以进一步化简为
其中为阶前向差分(n-th forward difference),递归地定义为
埃尔米特插值多项式(Hermite Interpolation Polynomial)
介绍
牛顿多项式和拉格朗日多项式都不能对插值多项式的导数值加以限制,若想要求插值多项式在采样点的导数取某个值,应当使用埃尔米特多项式。
问题描述如下:给定 n + 1 个点及限制条件构造 次插值多项式。
满足要求的 可以被这样构造出来:
其中
其中 是拉格朗日插值多项式的基项。
易知
即, 满足对于采样点函数值及导数值的所有限制条件。
代码实现
Python实现:
MATLAB实现
分段插值(Piecewise Interpolation)
龙格效应(Runge's phenomenon)
龙格效应指的是当 增大时,插值函数在远离采样点处发生剧烈震荡的现象。因此在使用多项式插值时,次数不宜过大 (以 n < 7 为宜)。
为了减缓龙格效应,可以使用分段插值的方法,可以以某些采样点为边界,把采样点分为几个区间,在各个区间上使用常规手段(拉格朗日、牛顿、埃尔米特)分别进行低次插值。
分段插值的问题在于插值函数在边界处不光滑,为了获得光滑的插值函数,可以考虑增加限制条件,使得插值函数在边界处导数连续,这样的插值方法称作样条插值。
一般来说,分段时每个区间可以包含任意数量的采样点,但出于计算的简便,一般每个区间包含采样点数量相同。特别地,当提及样条插值时,一般每个区间都是最小的,即只包含两个端点。
样条插值(Spline Interpolation)
所谓样条(Spline)本来是工程设计中使用的一种绘图工具,它是富有弹性的细木条或细金属条。绘图员利用它把一些已知点连接成一条光滑曲线(称为样条曲线),并使连接点处有连续的曲率。
数学上, 次样条插值问题指的是:
给定个点及函数值构造 k 次分段多项式 ,使其满足:
多项式的次数和连续性条件的强度是息息相关的。要满足 阶导数连续,共有 个限制条件,加上条件(1)要求的 个,共有 个限制条件。而要确定k 次样条,需要在每个区间确定 个待定系数,即一共需要 个限制条件才能解出。
因此,要满足阶导数连续,需要求解 次样条,并提供个额外的边界条件。
在实际使用中,三次样条最为常用。
三次样条插值(Cubic Spline Interpolation)
介绍
通过待定系数法,待定边界处的一阶导数值而后通过分段埃尔米特插值可给出插值函数在每个分区上的待定表达式。结合边界条件,可获得关于的三对角线性方程组。解出 m_k,代回待定表达式,即可获得三次样条函数。详细计算过程参考3。
三次样条插值需要 2 个额外的边界条件,较常用的边界条件包括(命名来自于 Scipy 的实现):
- not-a-knot: 第一二结点三阶导相等,且倒数一二结点处相等,没有特殊的限制时,最常用的边界条件。
- clamped: 曲线开始与结束时导数为 0,即趋近于水平线
- natural: 曲线开始与结束时二阶导数为 0,即趋近于直线
代码实现
样条插值作为最常用的插值方法在 Python 和 MATLAB 中都有直接实现。
Python实现:
MATLAB实现:
n维数据的插值
MATLAB实现
x1,x2,...,xn是已知的样本点的横坐标
y是已知的样本点的纵坐标坐标
new_x1,new_x2,...,new_xn是要插入点的横坐标
method是要插值的方法
‘linear’:线性插值(默认算法);
‘cubic’:三次插值;
‘spline’:三次样条插值法;(最为精准)
‘nearest’:最邻近插值算法
例题
机床加工
待加工零件的外形根据工艺要求由一组数据给出(在平面情况下),用程控
铣床加工时每一刀只能沿 方向和 方向走非常小的一步,这就需要从已知数据得到加 工所要求的步长很小的坐标。
表 1 中给出的 数据位于机翼断面的下轮廓线上,假设需要得到 x 坐标每改变 时的 坐标。试完成加工所需数据,画出曲线,并求出 处的曲线斜率和 范围内 y 的最小值。
x | 0 | 3 | 5 | 7 | 9 | 11 | 12 | 13 | 14 | 15 |
y | 0 | 1.2 | 1.7 | 2.0 | 2.1 | 2.0 | 1.8 | 1.2 | 1.0 | 1.6 |
解:使用三次样条插值。
Python实现:
MATLAB实现:
可以自行尝试其他插值方法,一般三次样条插值结果较好。
数据处理补全
MathorCup第六届A题 淡水养殖池塘水华发生及池水净化处理
附件一给的是1‐15周数据
附件二给的是奇数1,3,5,…,15周数据
总结
插值往往在数据处理的过程中发挥作用。实际使用中,样条插值的效果要远好于多项式插值和普通的分段插值,因此没有特别的理由的话,样条插值总是优先考虑的方法,其中又以三次样条插值最为常用。
可能的需要选择其他插值方法的原因是
- 需要进行理论推导,此时样条插值的公式过于繁琐,不方便使用
- 需要进行高维插值,或是数据数量巨大,此时样条插值耗时较长
注:如需要分析插值余项和误差,或学习详细公式与更多算例,可查阅末尾列出的任一参考文献。
参考文献
[1] 沈艳. 高等数值计算. 清华大学出版社, 2014. \
[2] 数值分析(第5版). 李庆扬. 清华大学出版社. 2008.\
[3] 黄明游. 数值计算方法. 科学出版社, 2005.
扩展资料
一篇本科论文
华北理工大学数值计算方法免费公开课
bilibili搜索:数值计算方法
课件:
链接:https://pan.baidu.com/s/1gpX9OGhVjwOmv3HNFp1wrw
提取码:o6ky
参考书:现代数值计算方法
下载链接:https://pan.baidu.com/s/1L9ppMj3xyi3HjiaZFM9O-w
提取码:h2sl