huangzhiye 发表于 2013-7-4 10:50:25

三次样条拟合函数 疑问_求解答!

本帖最后由 huangzhiye 于 2013-7-5 08:24 编辑

一个很简单的例子,取4个点(0,0)(1,1)(2,0)(3,1)进行三次样条函数拟合,要求:绘制出拟合曲线并求出拟合函数的表达式。
提交命令:

x1=
y1=
sp=csapi(x1,y1)
fnplt(sp) ;

可以生成三次样条拟合曲线,求出三次多项式系数sp.coefs<3×4 double>
sp.coefs 如下:

0.6667   -3.000      3.3333       0
0.6667   -1.000   -0.6667      1
0.6667      1         -0.6667       0

应该分别为多项式 y=ax^3+bx^2+cx+d 的系数按降幂排列,区间依次为 ,
但是,将按区间得到的分段函数重新绘图,发现与拟合出的三次样条曲线完全不符,并且分段函数不通过间断点。不知道是什么原因?
期待高手解答!

悠悠为谁 发表于 2013-7-6 19:23:40

matlab插值函数一般是这样表示的:>> x=;
y=;
pp=spline(x,y);
k=pp.coefs;
>> fun=@(x)(k(1,1)*(x-0).^3+k(1,2)*(x-0).^2+k(1,3)*(x-0)+k(1,4)).*(x<1)+...
(k(2,1)*(x-1).^3+k(2,2)*(x-1).^2+k(2,3)*(x-1)+k(2,4)).*(x>=1&x<2)+...
(k(3,1)*(x-2).^3+k(3,2)*(x-2).^2+k(3,3)*(x-2)+k(3,4)).*(x>=2&x<=3);
>> xx=0:0.1:3;
yy=fun(xx);
>> plot(x,y,'*')
>> hold on
>> plot(xx,yy,'r')
>>

huangzhiye 发表于 2013-7-7 20:58:09

悠悠为谁 发表于 2013-7-6 19:23 static/image/common/back.gif
matlab插值函数一般是这样表示的:

正解!!感谢"悠悠为谁"的热心回帖解答,关键是自己把多项式的表达式形式写错了。非常感谢!!
并感谢liuyalong008版主!

huangzhiye 发表于 2013-7-8 11:27:59

追问一下 "悠悠为谁",如果想求得分段插值函数在4个间断点(0,0)(1,1)(2,0)(3,1)处的斜率,是先对分段插值函数求导,再求导函数多项式在各点的值吗?该如何写命令?
页: [1]
查看完整版本: 三次样条拟合函数 疑问_求解答!