• matlab自带的插值函数interp1的四种插值方法


    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

  • 相关阅读:
    7、注解@Mapper、@MapperScan
    SpringBoot
    正则表达式"(^|&)" ,什么意思?
    JSON.NET的Self referencing loop detected with type的原因以及解决办法
    jquery ajax 中各个事件执行顺序
    Lucene BooleanQuery中的Occur.MUST与Occur.Should
    lucene中Field简析
    IDENTITY、SCOPE_IDENTITY、IDENT_CURRENT的分析
    HTML5学习(1)简介
    HTML学习(17)URL
  • 原文地址:https://www.cnblogs.com/yibeimingyue/p/15922309.html
Copyright © 2020-2023  润新知