23、matlab一维数据插值:interp1 函数

时间:2024-06-08 07:02:13

1、一维数据插值:interp1() 函数

语法

语法1:vq = interp1(x,v,xq) 使用线性插值返回一维函数在特定查询点的插入值。
语法2:vq = interp1(x,v,xq,method) 指定备选插值方法

参数

x:样本点  v:对应值   xq:查询点的坐标

method:'linear'(线性插值)、'nearest'(最近邻点插值)、'next'(下一个邻点插值)、

'previous'(上一个邻点插值)、'pchip'(保形分段三次插值)、'cubic'、'v5cubic'、'makima' 或 'spline'(样条插值)

2 、粗略采样插值

1)linear插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(1)
vq1 = interp1(x,v,xq);%xq表示插入点的坐标索引
plot(x,v,'-*',xq,vq1,':^');
title('linear插值');
legend('原数据','插值数据')

视图效果

2)Spline插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(2)
vq2 = interp1(x,v,xq,'spline');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('Spline插值');
legend('原数据','插值数据')

视图效果

3) cubic插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(3)
vq2 = interp1(x,v,xq,'cubic');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('cubic插值');
legend('原数据','插值数据')

视图效果

4) nearest插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(3)
vq2 = interp1(x,v,xq,'nearest');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('nearest插值');
legend('原数据','插值数据')

视图效果

5) next插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(3)
vq2 = interp1(x,v,xq,'next');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('next插值');
legend('原数据','插值数据')

视图效果

6)previous插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(3)
vq2 = interp1(x,v,xq,'previous');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('previous插值');
legend('原数据','插值数据')

视图效果

 

 7)pchip插值

代码

x = 0:pi/6:2*pi; 
v = sin(x);
xq = 0:pi/16:2*pi;
figure(3)
vq2 = interp1(x,v,xq,'pchip');
plot(x,v,'-*',xq,vq2,':^');
xlim([0 2*pi]);
title('pchip插值');
legend('原数据','插值数据')

视图效果

3、 复数值插值

代码

x = 1:10;
v = (5*x)+(x.^2*1i);
xq = 1:0.25:10;
vq = interp1(x,v,xq);
figure(1)
plot(x,real(v),'*r',xq,real(vq),'-r');
hold on
plot(x,imag(v),'*b',xq,imag(vq),'-b');
legend('实部插值结果','虚部插值结果')

视图效果

4、 在一个传递点插入多组数据

代码

x = (-5:5)';
v1 = x.^2;
v2 = 2*x.^2 + 2;
v3 = 3*x.^2 + 4;
v = [v1 v2 v3];
xq = -5:0.1:5;
vq = interp1(x,v,xq,'pchip');
figure(1)
plot(x,v,'o',xq,vq,'^');

视图效果