0%

插值拟合算法

用于处理数据缺失,基本思想是根据周围点建立联系,以补充缺失数据,或者预测未来的数据。

插值与拟合的应用方向区别

每隔一个小时测一次温度,测12小时

  • 如果第6个小时忘记测了,根据规律补上一个—–> 插值
  • 如果想要得知12小时以后的 ——> 拟合

插值问题

归结为已知函数在某区间内若干点处的值,求函数在该区间内其他点处的值。
已知函数$x_0,x_1,x_2\cdots x_n$处的值为$y_0,y_1,y_2\cdots y_n$求简单函数$p(x)$,使得$p(x_i)=y_i$.

拉格朗日插值法

具体可参考知乎-如何直观地理解拉格朗日插值法?

牛顿插值

高次插值的Runge现象

warning
插值多项式并不是次数越高越好

Runge现象:使用高次插值的时候在边缘产生的震荡现象

所以再实际中不应该使用七次以上的插值

避免Runge现象
将插值区间分为若干小区间,在每个小区间呗用地刺插值,分段低次插值。

Matlab插值

一维

官方文档

yi=interp1(x,y,xi,'method');

x,y为插值点(已知),xi,yi为被插值点和插值结果(可以试单一点,也可以是向量)method为插值方法可以选用:

  • nearest 最邻近插值
  • linear 线性插值(默认方法)
  • spline 三次样条插值(效果相对好)
  • cubic 立方插值

matlab拉格朗日插值需要手写。代码如下

function y=lagrange(x0,y0,x)   %x0,y0为初始坐标,x为需要插值的点,返回的y为插值结果
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=0;
for j=1:n
p=1;
for k=1:n
if k~=j
p=p*((z-x0(j))/(x0(k)-x0(j)));
end
end
s=p*y0(k)+s;
end
y(i)=s;
end

二维

可以将三维图变得更加平缓圆润

zi=interp2(x,y,z,xi,yi,’method’)

method:

  • nearest 最邻近插值
  • linear 双线性插值
  • spline 双上次样条插值
  • cubic 双立方插值

散乱插值

二维插值插值点都在网格点上,但是有时可能需要在格子内部插入散乱点,此时使用 散乱插值

griddata(x,y,z,xi,yi,’method’)