插值介绍

信号插值,就是用已知点的测量值估计未知点的近似值。信号插值算法的应用范围有:

  • 提高显示效果;
  • 节省硬件成本,以软代硬;
  • 减少远距离、大量数据通信的需要;
  • 进行数据、图像解压缩
  • 求解微分方程、积分方程;
  • 计算函数值、零点、极值点、导数以及积分。

插值与拟合的异同点:

  • 相同点:插值已知一些离散点,在一定约束下,求取定义在连续集合上的未知连续函数。
  • 在图像上面不同:插值在图像上是一定得通过这些点,而拟合是拟合在图像上是逼近这些点。
  • 在几何含义上不同:插值是找到一个(或几个分片光滑的)连续曲面来穿过这些点,拟合是给定了空间中的一些点,找到一个已知形式 未知参数的连续曲面来最大限度地逼近这些点。

多项式插值

对于n+1个点,我们可以找到一个次数不超过n的插值多项式:java代码实现样条插值拟合 样条插值原理_多项式,可以通过求解n+1个方程组(如方程组\ref{多项式拟合方程组}),得到java代码实现样条插值拟合 样条插值原理_多项式_02
java代码实现样条插值拟合 样条插值原理_多项式_03
若方程组的解唯一,则对应的插值多项式具有唯一性。多项式拟合一般具有原理简单、计算复杂、难以得到简单的多项式等特点。

三次样条插值

函数定义在区间java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_04上,给定n+1个节点和一组与之对应的函数值,且函数满足:1,每个节点上满足java代码实现样条插值拟合 样条插值原理_matlab_05;2,在java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_04上有连续的二阶导数;3.在每个小区间java代码实现样条插值拟合 样条插值原理_算法_07上是一个三次多项式,则称java代码实现样条插值拟合 样条插值原理_算法_08为三次样条插值函数。

三次样条插值函数java代码实现样条插值拟合 样条插值原理_matlab_09是一个分段三次多项式,要求出java代码实现样条插值拟合 样条插值原理_matlab_09,在每个小区间java代码实现样条插值拟合 样条插值原理_多项式_11上要确定4个待定参数,若用java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_12表示它在第i个子区间java代码实现样条插值拟合 样条插值原理_多项式_11上的表达式,则:
java代码实现样条插值拟合 样条插值原理_多项式_14

举个例子

已知函数y=f(x)的一组数据如表表格:

x

0

1

2

3

4

5

6

7

8

9

10

y

12.34

13.02

13.98

13.52

12.81

11.08

9.96

9.51

10.23

11.14

12.25

对这些数据进行多项式插值和三次样条插值,并求:x= 3.5, 4.1, 6.2, 4.5时,y相应的多项式插值和三次样条插值函数值。
绘制函数y=f(x)在区间[0, 10]上的多项式插值函数图形,并将已知点用“java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_15”标出。
绘制函数y=f(x)在区间[0, 10]上的三次样条插值函数图形,并将已知点用“java代码实现样条插值拟合 样条插值原理_插值_16”标出。

分析

本题要求依据所给数据计算多项式插值和三次样条插值,并求出特定自变量下插值的函数值,以及绘制函数图像。使用matlab的多项式插值函数java代码实现样条插值拟合 样条插值原理_多项式_17和三次样条插值函数java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_18进行计算。其中java代码实现样条插值拟合 样条插值原理_多项式_19java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_20java代码实现样条插值拟合 样条插值原理_插值_21为原始数据点,java代码实现样条插值拟合 样条插值原理_多项式_22为拟合阶数,返回值为多项式的系数;java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_23java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_20java代码实现样条插值拟合 样条插值原理_插值_21为原始数据点。

求指定的y值

多项式插值

将给定的x和y数据导入matlab,并计算多项式系数。一共11个点,故选取10次多项式进行插值,使用polyfit命令。求得的插值系数用poly2str指令组装成插值多项式,多项式的函数表达式为:java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_26.将x=(3.5,4.1,6.2,4.5)带入,解得y的值为:13.3404,12.6595,9.8347,11.9664.将结果制表、绘图,如下表、下图:

x

3.5

4.1

6.2

4.5

y

13.3404

12.6595

9.8347

11.9664

java代码实现样条插值拟合 样条插值原理_matlab_27

样条插值

样条插值所用命令为spline,官方介绍spline函数的输入输出为yy = spline(x,y,xx);其中x和y为已知点,xx为待求点x轴坐标,yy即为输出对应待求点的y轴坐标。

故运行命令y3=spline(x,y,x1);即可得到待求点的样条插值。y3的值为: 13.2476, 12.6730, 9.8032, 11.9877.将结果制表、绘图,如下表、下图:

x

3.5

4.1

6.2

4.5

y

13.2476

12.6730

9.8032

11.9877

java代码实现样条插值拟合 样条插值原理_多项式_28

插值求函数图形

多项式插值

将x在0-10上间隔采样,得到的值带入上述求值函数中,可以得到对应的y值,再将(x,y)坐标用绘图命令绘制,即得插值函数图形。函数t=f(x)在区间[0,10]上的多项式插值函数图形如图所示:

java代码实现样条插值拟合 样条插值原理_matlab_29

样条插值

x在0-10上间隔采样,得到的值带入yy=spline(x,y,xx)的xx里面,返回值为与xx拥有相同维度的yy,yy为样条插值的输出结果。绘图,函数t=f(x)在区间[0,10]上的样条插值函数图形如图所示:

java代码实现样条插值拟合 样条插值原理_java代码实现样条插值拟合_30

总结

  • 多项式插值先设插值多项式函数,再将各节点的函数值代入多项式里,便得到个等式,得到一个关于多项式里系数的线性方程组,解此线性方程组,便得到所要求的插值多项式。
  • 样条插值是对每一个小区间进行插值,使得端点处满足某种条件的光滑(本文所用的三次样条插值则要满足二阶导数连续),根据这个要求,在未知导数的情况下推导出样条函数。
  • 本次作业练习了多种插值的求解方法,一定的数据求解让我对插值的含义和运用场景有了更多的认识。在插值求解函数图像时,似乎多项式插值比样条插值更光滑,但是多项式插值的求解涉及大型矩阵求逆,且过分强调每一个数据,在预测未知量时泛化能力可能有所欠缺。

程序

matlab的.m程序下载链接: 用matlab对一组数据求解多项式插值和三次样条插值.