三次样条插值函数:

被插值函数:f(x)=1/(1+x^2)    -5<=x<=5

插值点-5,-4,-3,-2,-1,0,1,2,3,4,5



clc;clear;
x=-5:5;
y=1./(1+x.^2);
figure(1);hold on;plot(x,y,'r-o');
xi=-5:.05:5;
yi=spline(x,y,xi);
plot(xi,yi,'b-o');


三次样条插值_样条

 



官方文档:

https://ww2.mathworks.cn/help/matlab/ref/spline.html

语法




​s = spline(x,y,xq)​


​pp = spline(x,y)​


 


说明





​​s​​ = spline(​​x​​,​​y​​,​​xq​​)​​ 返回与 ​​xq​​ 中的查询点对应的插值 ​​s​​ 向量。​​s​​ 的值由 ​​x​​ 和 ​​y​​ 的三次样条插值函数确定。



​​pp​​ = spline(​​x​​,​​y​​)​​ 返回一个分段多项式结构体以用于 ​​ppval​​ 和样条实用工具 ​​unmkpp​​。

例1






正弦数据的样条插值




使用 ​​spline​​ 基于非均匀分布的样本点对正弦曲线插值。






clc;clear;

x = [0 1 2.5 3.6 5 7 8.1 10];

y = sin(x);

xx = 0:.25:10;

yy = spline(x,y,xx);

plot(x,y,'bo',xx,yy,'rp--')


三次样条插值_插值_02

注:蓝色圆圈是插值点,红色五角星是点带入插值函数后的结果。


 

例2



具有指定端点斜率的分布的样条插值




当端点斜率已知时,使用 clamped 或 complete 样条插值。此示例在插值的终点处强制实施零斜率。



x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');


三次样条插值_插值_03

注:

cs = spline(x,[0 y 0]);%这一句注明了插值点坐标和第一类边界条件,即提供端点处的一阶导数值。


 返回的插值结果是一个结构体,


 


三次样条插值_样条_04

 

cs.coefs是每一段插值函数的系数,9个插值点,共8段样条函数,每个样条函数有4个系数。

三次样条插值_html_05