Matlab-样本插值

Command

Posted by Kingtous on January 23, 2019

样条插值

  • 样条函数对象的插值运算
    • 图形绘制 fnplt(S)
    • 插值计算 yp=fnval(S,Xp)

结论:三样条插值差于B样条插值

  • 三次样条函数类

    1
    
    S=csapi(x,y)
    

    其中,样本点

    x=[x1,x2…xn], y=[y1,y2,…,yn]

  • 网格数据三次样条插值类

    • 1
      2
      3
      4
      
      S=csapi({x1,x2,...,xn},z)
      %zi为网格数据的样本点
      %xi为自变量的网格数据
      %S为三次样条的函数对象
      
  • B样条函数

    • 1
      2
      
      S=spapi(k,x,y)
      %k为用户选定的阶次,一般为4或5
      

代码合集:

1
2
3
4
5
6
7
8
%单样本插值
>> x0=[0,0.4,1 2,pi]; y0=sin(x0); sp=csapi(x0,y0), fnplt(sp,':'); hold on, ezplot('sin(t)',[0,pi]); plot(x0,y0,'o')
%网络数据的样条插值
>> x0=-3:.6:3; y0=-2:.4:2; [x,y]=ndgrid(x0,y0); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y); sp=csapi({x0,y0},z); fnplt(sp);
%效果比较-1
>> x0=[0,0.4,1 2,pi]; y0=sin(x0); ezplot('sin(t)',[0,pi]); hold on, sp1=csapi(x0,y0); fnplt(sp1,'--'); sp2=spapi(5,x0,y0); fnplt(sp2,':')
%效果比较-2
>> x=0:.12:1; y=(x.^2-3*x+5).*exp(-5*x).*sin(x); ezplot('(x^2-3*x+5)*exp(-5*x)*sin(x)',[0,1]), hold on, sp1=csapi(x,y); fnplt(sp1,'--'); sp2=spapi(5,x,y); fnplt(sp2,':')