假设您想插入一些平滑的数据,例如,
rng(6),x =(4 * pi)* [0 1 rand(1,15)];y = sin(x);
您可以使用通过的立方样条插值
cs = csapi(x,y);
并绘制样条曲线以及数据,具有以下代码:
fnplt(cs);握住绘图(x,y,'o')图例('立方样条','data')阻止
这会产生如下的图。
平滑数据的立方样条嵌段
这更确切地说,如,立方样条与非结局条件的立方样条翻入,这意味着它是独特的分段立方多项式,其中两个连续衍生物根本室内数据站点除了最左边和最右边的网站。它是由matlab产生的与同时立方®花键
命令,样条(x,y)
。
正弦函数是2π周期性的。检查您的Interpolant在该得分上是否有多良好,计算,例如,在两个端点处的第一个导数的值差异,
差异(fnval(fnder(cs),[0 4 * pi]))ans = -.0100
这不是那么好。如果您更喜欢在两个端点处获得其第一和第二衍生物的立体愿,0.
和4 * pi.
,匹配,使用而不是命令csape.
这允许规范许多不同类型的最终条件,包括定期结束条件。所以,使用
PCS = CSAPE(X,Y,'定期');
你得到了
差异(fnval(fnder(pcs),[0 4 * pi]))))
产出是ans = 0.
作为末端斜坡的差异。即使是最终第二衍生物的差异也很小:
差异(fnval(fnder(pcs,2),[0 4 * pi])))
产出是ans = -4.6074e-015
。
其他最终条件也可以处理。例如,
cs = csape(x,[3,y,-4],[1 2]);
提供立方样条插值与休息并且其斜率在最左侧数据站点等于3,其第二衍生物在最右边的数据站点等于-4。
如果要在休息和/或立方样条以外的样条件中插入以外的网站,那么简单结,然后你使用spapi.
命令。最简单的形式,你会说sp = spapi(k,x,y)
;其中第一个参数,K.
,指定订购插补样条曲线;这是每个多项式件中的系数的数量,即,超过其多项式件的标称度。例如,下图显示了由陈述所获得的数据的线性,二次和四分之一的样条插值
sp2 = spapi(2,x,y);fnplt(sp2,2),保持在sp3 = spapi(3,x,y);fnplt(sp3,2,'k-'),sp5 = spapi(5,x,y);fnplt(sp5,2,'r-。'),绘图(x,y,'o')传奇('linear','二次','四芳烃','data'),阻止
各种顺畅数据秩序的样条嵌段
甚至从中获得的立方样条嵌段spapi.
与提供的不同CSAPI.
和花键
。要强调他们的差异,计算和绘制第二衍生物,如下:
fnplt(fnder(spapi(4,x,y),2)),保持,fnplt(fnpl(csapi(x,y),2),2,'k-'),plot(x,zeros(尺寸(x)),'o')传奇('来自spapi','来自csapi','数据站点'),撤销
这提供了以下图:
两个立方样条嵌段的第二阶导数相同的平滑数据
由于立方样条的第二阶导数是虚线,并且在样条的突破处具有顶点,因此可以清楚地看到CSAPI.
在数据站点处休息,而休息spapi.
没有。
事实上,它可以使用命令来明确地指定样条嵌段的位置。sp = spapi(结,x,y)
;其中序列结
以某种方式提供供应的休息。例如,回顾你选择的y
是罪(x)
,命令
CH = spapi(奥克纳(x,4,2),[x x],[y cos(x)]);
为正弦函数提供立方Hermite Interpolator,即分段立方体功能,并在所有的中断x(i)
's,与价值中的正弦函数匹配和所有的坡度x(i)
s。这使得跨跨性的连续与连续的第一衍生物连续,但通常,它在其第二衍生物中跳过突破。此命令如何知道数据值数组的哪个部分[Y COS(x)]
提供值和哪些斜率?请注意,这里的数据站点数组是给出的[x x]
,即,每个数据站点都显示了两次。还注意到y(i)
与第一次发生有关x(i)
,和cos(x(i))
与第二次发生相关x(i)
。与数据站点的第一个外观相关联的数据值被认为是函数值;与第二外观相关联的数据值被认为是斜率。如果该数据站点的第三个出现,则将相应的数据值作为在该站点匹配的第二衍生值。看构造和使用B形状样条讨论命令奥克纳特
用于此用于生成适当的“结序列”。
noisy = y + .3 *(rand(尺寸(x)) - 。5);
然后你可能更喜欢近似。例如,您可以尝试通过命令获得的立方平滑样条曲线
SCS = CSAPS(x,嘈杂);
并绘制
fnplt(scs,2),坚持,绘图(x,noisy,'o'),传说('平滑样条','嘈杂数据'),阻止
这会产生这样的数字:
噪声数据的立方平滑花条
如果您不喜欢平滑的水平csaps(x,y)
,您可以通过指定平滑参数来更改它,P.
作为一个可选的第三个论点。在0到1之间选择此数字。P.
从0变为1,平滑样条曲线相应地从一个极端变化到数据到数据的直线近似,到另一个极端,“自然”立方样条翻入数据。自从CSAPS.
返回实际用作可选第二个输出的平滑参数,您现在可以进行实验,如下所示:
[SCS,P] = CSAPS(x,嘈杂);fnplt(scs,2),保持fnplt(csaps(x,noisy,p / 2),2,'k-'),fnplt(csaps(x,noisy,(1 + p)/ 2),2,'r:'),绘图(x,吵,'o')传奇('平滑样条曲线','更平滑','较少平滑',...'嘈杂的数据'),阻止
这会产生以下图片。
嘈杂的数据或多或少平滑
有时,您可能更喜欢获取最平滑的立方样条曲线SP.
这在特定的公差范围内托
在意义上的给定数据常态(嘈杂 - fnval(sp,x))^ 2 <= tol
。您使用命令创建此样条曲线sp = spaps(x,noisy,tol)
对于您定义的公差托
。
如果您喜欢最小二乘近似值,则可以通过该声明获取它sp = spap2(结,k,x,y)
;其中结序列结
和订单K.
必须提供花键。
订单的流行选择是4,这为您提供了一个立方样条。如果您没有清楚地了解如何选择结,只需指定所使用的多项式块数。例如,
sp = spap2(3,4,x,y);
给出由三个多项式件组成的立方样条曲线。如果产生的错误是不均匀的,您可能会尝试使用更好的结分布纽knt.
如下:
sp = spap2(newknt(sp),4,x,y);