数据插值可以根据有限个点的取值情况,合理估算出附近其它点的取值,从而节约大量的实验和测试资源,节省大量的人力物力和财力。
从数学上讲,数据插值是一种函数逼近的方法。
interp1()
一维插值函数
例:
Y1=interp1(X,Y,X1,method)
根据X、Y的值,计算函数在X1处的值,其中,X、Y是两个等长的已知向量,分别表示采样点和采样值,X1是一个向量或标量,表示要插值的点。
method函数:
1.linear线性插值,默认方法,将于插值点靠近的两个数据点用直线链接,然后在直线上选取对应插值点的数据。
2.nearest最近点插值,选择最近样本点的值作为插值数据。
3.pchip分段三次埃尔米特插值,除满足插值条件之外,还需要满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保型性。(就是说曲线连续)
4.spline三次样条插值,每个分段内构造一个三次多项式,使其插值函数除了满足插值条件以外,还要求在个结点处具有连续的一阶和二阶导数。
为什么不用更高阶的多项式?
多项式并非越高越好,次数越高,越容易产生震荡而偏离原函数,这种现象称为龙格(Runge)现象。
函数插值的简单使用范例:
我用y=x^2来作为示范
>> x=-2:1:2;
>> y=[4,1,0,1,4];
>> x1=-2:0.01:2;
>> y1=interp1(x,y,x1,'spline');
>> plot(x1,y1)
我们先给定了x和y的五个相对应的函数值,然后用数据插值函数得到步长为0.01的很多不同的x对应的y值
效果图:
作为对比,如果不进行插值,图像 plot(x,y)是这样的:
所以插值函数确实很神奇,也在数据分析中及其有用,这也是我做这个博客的目的。
tips:x,y必须是取值一一对应的,否则会返回
错误使用 griddedInterpolant
网格矢量未定义与给定值匹配的点网格。
四种method函数的比较
先看一个实例:
>> x=[0,3,5,7,9,11,12,13,14,15];
>> y=[0,1.2,1.7,2.0,2.1,1.8,1.2,1.0,1.6];
>> x1=0:0.1:1.5;
>> y1=interp1(x,y,x1,'spline');
错误使用 griddedInterpolant
网格矢量未定义与给定值匹配的点网格。
出错 interp1 (line 161)
F = griddedInterpolant(X,V,method);
>> y=[0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
>> y1=interp1(x,y,x1,'spline');
>> plot(x1,y1);
>> x1=0:0.1:15;
>> y1=interp1(x,y,x1,'spline');
>> plot(x1,y1);
>>
机动车刹车距离问题
来源:https://blog.csdn.net/treblez/article/details/102753497