MATLAB 数据插值

一维插值

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

  • 其中,x、y为已知的数据点,xi为想要插值数据点的横坐标,返回对应的纵坐标yi。method为插值方法,总共有四种。

'nearest'

  • 最近邻点插值,即若$x_i$离$x$最近,则 \(y_i=y\)

‘linear’

  • 线性插值,即插值的结果是一条条线段。

‘spline’

  • 进行三次样条插值,所得图形为光滑曲线,并且是二阶光滑的。

‘pchip’

  • 进行保形分段三次插值。插值是分段进行的,所以不会出现‘spline’曲线上下震动的情况。

实例

x = linspace(0,2*pi,13);
y = sin(x);
xi = linspace(0,2*pi,50);

subplot(2,3,1)
plot(x,y,'*')
hold on
yi1 = interp1(x,y,xi,'nearest');
plot(xi,yi1)
title('nearest')

subplot(2,3,2)
plot(x,y,'*')
hold on
yi2 = interp1(x,y,xi,'linear');
plot(xi,yi2)
title('linear')

subplot(2,3,3)
plot(x,y,'*')
hold on
yi3 = interp1(x,y,xi,'spline');
plot(xi,yi3)
title('spline')

subplot(2,3,4)
plot(x,y,'*')
hold on
yi4 = interp1(x,y,xi,'pchip');
plot(xi,yi4)
title('pchip')

u = -3:1:3;
v = [0 0 0 0 1 2 3];
ui = -3:0.1:3;
subplot(2,3,5)
plot(u,v,'*')
hold on
vi1 = interp1(u,v,ui,'spline');
plot(ui,vi1)
title('spline')

subplot(2,3,6)
plot(u,v,'*')
hold on
vi2 = interp1(u,v,ui,'pchip');
plot(ui,vi2)
title('pchip')

在这里插入图片描述

二维线性插值

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

  • x、y、z是空间中点的坐标,xi、yi是插值点x、y轴坐标,返回对应z轴坐标。在interp2中,没有‘pchip’,对应方法改为‘cubic’。

实例

X = linspace(-2*pi,2*pi,10);
[X,Y] = meshgrid(X);
Z = Y*sin(X) - X*cos(Y);
Xi = linspace(-2*pi,2*pi,50);
[Xi,Yi] = meshgrid(Xi);

figure
subplot(2,2,1)
Zi1 = interp2(X,Y,Z,Xi,Yi,'nearest');
plot3(X,Y,Z,'*')
hold on
surf(Xi,Yi,Zi1)
title('nearest')

subplot(2,2,2)
Zi2 = interp2(X,Y,Z,Xi,Yi,'linear');
plot3(X,Y,Z,'*')
hold on
surf(Xi,Yi,Zi2)
title('linear')

subplot(2,2,3)
Zi3 = interp2(X,Y,Z,Xi,Yi,'spline');
plot3(X,Y,Z,'*')
hold on
surf(Xi,Yi,Zi3)
title('spline')

subplot(2,2,4)
Zi4 = interp2(X,Y,Z,Xi,Yi,'cubic');
plot3(X,Y,Z,'*')
hold on
surf(Xi,Yi,Zi4)
title('cubic')

在这里插入图片描述


本文章使用limfx的vsocde插件快速发布