MATLAB数据的插值示例

在已知数据中,用较简单的插值函数f(x)通过所有样本点,并对临近数据进行估值计算称为插值。
插值函数f(x)必须通过所有样本点。然而在有些情况下,样本点的取得本身就包含着实验中的测量误差,这一要求无疑是保留了这些测量误差的影响,满足这一要求虽然使样本点处"误差"为零,但会使非样本点处的误差变得过大,很不合理。为此,提出了另一种函数逼近方法----数据拟合发,它不要求构造的近似函数f(x)全部通过样本点,而是"很好逼近"它们。
1.一维插值
在MATLAB中提供interp1函数实现函数的一维插值。其调用格式如下:
Y1=interp(x,y,X1,‘method’)
%根据已知的数据(x,y),用method方法进行插值,然后计算X1对应的函数值Y1
式中,x、y是已知的数据向量,其中x应以升序或降序来排;X1是插值点的自变量坐标向量:"method"是用来选择插值算法的,它可以取:“linear”(线性插值)、“cubic”(三次多项式插值)、"nearest”(最邻近插值)、“Spline”(三次样条插值)、“previous”(提前插值)、“next”(延后插值)、“cubic”(立方插值)、“pchip”(分段三阶插值法)、“makima”(玛其玛插值)、“v5cubic”(v5立方插值).

clear all;
x1=-6:0.2:6;
y1=1./(2+x1.^2);
x2=-6:10/(11-1):6;
y2=1./(2+x2.^2);
x=-6:0.3:6;
y3=interp1(x2,y2,x,'linear');
y4=interp1(x2,y2,x,'spline');
y5=interp1(x2,y2,x,'nearest');
y6=interp1(x2,y2,x,'makima');
y7=interp1(x2,y2,x,'next');
y8=interp1(x2,y2,x,'previous');
y9=interp1(x2,y2,x,'pchip');
y10=interp1(x2,y2,x,'cubic');
y11=interp1(x2,y2,x,'v5cubic');
subplot(221);
plot(x1,y1,'m:',x,y3);
title('线性');
subplot(222);
plot(x1,y1,'m:',x,y4);
title('三次样条插值')
subplot(223);
plot(x1,y1,'m:',x,y5);
title('最邻近插值');
subplot(224);
plot(x1,y1,'m:',x,y6);
title('玛奇玛');

在这里插入图片描述

subplot(221);
plot(x1,y1,'m:',x,y7);
title('next');
subplot(222);
plot(x1,y1,'m:',x,y8);
title('previous')
subplot(223);
plot(x1,y1,'m:',x,y9);
title('pchip');
subplot(224);
plot(x1,y1,'m:',x,y10);
title('cubic');

在这里插入图片描述

subplot(221);
plot(x1,y1,'m:',x2,y2,'o');
title('y=1/(2+x^2)');
subplot(222);
plot(x1,y1,'m:',x,y8);
title('previous');
subplot(223);
plot(x1,y1,'m:',x,y9);
title('pchip');
subplot(224);
plot(x1,y1,'m:',x,y11);
title('v5cubic');

在这里插入图片描述
开发工具:MATLAB 2022b和微信Alt+A截屏工具

参考文献
[1] 张德峰.MATLAB/Simulink建模与仿真实例精解[M]北京:机械工业出版社,第39页

猜你喜欢

转载自blog.csdn.net/m0_38127487/article/details/133193547