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,'^');