样条插值
- 样条函数对象的插值运算
- 图形绘制 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,':')