x=0:2*pi; y=sin(x); xx=0:0.5:2*pi; %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx); figure plot(x,y,\'o\',xx,y1,\'r\') title(\'分段线性插值\') %临近插值 y2=interp1(x,y,xx,\'nearest\'); figure plot(x,y,\'o\',xx,y2,\'r\'); title(\'临近插值\') %球面线性插值 y3=interp1(x,y,xx,\'spline\'); figure plot(x,y,\'o\',xx,y3,\'r\') title(\'球面插值\') %三次多项式插值法 y4=interp1(x,y,xx,\'cubic\'); figure plot(x,y,\'o\',xx,y4,\'r\'); title(\'三次多项式插值\')
(1) Nearest方法速度最快,占用内存最小,但一般来说误差最大,插值结果最不光滑。
(2) Spline三次样条插值是所有插值方法中运行耗时最长的,插值函数及其一二阶导函数都连续,是最光滑的插值方法。占用内存比cubic方法小,但是已知数据分布不均匀的时候可能出现异常结果。
(3) Cubic三次多项式插值法中,插值函数及其一阶导数都是连续的,所以插值结果比较光滑,速度比Spline快,但是占用内存最多。
更新日志2020-11-3
有个小老弟问我,怎么把这个插值函数获取到,后续调用,然后去看了一眼官方文档,有一句话
pp = interp1(x,v,method,\'pp\')
分段多项式,以可传递到 ppval 函数进行计算的结构体的形式返回。
也就是说这个插值函数可以使用上述代码获取到函数,然后使用ppval执行这个函数在某个特定位置的插值结果,比如
%test interpolate clear;clc;close all N=1200; x = 1:0.5:6; y = sin(x); pp = interp1(x,y,\'pchip\',\'pp\'); xq= 1:0.1:6; result = ppval(pp,xq); plot(x,y,\'o\',xq,result,\'-.\')
上述代码就是将函数以`pp`变量返回,然后使用ppval调用此函数,获取在xq处的值
————————————————
版权声明:本文为CSDN博主「风翼冰舟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zb1165048017/article/details/48343507