主要内容

立方样条插值

平滑数据的立方样条嵌段

假设您想插入一些平滑的数据,例如,

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);