三次样条插值

平稳的数据的三次样条插值

假设你要插一些平稳的数据,例如,以

RNG(6)中,x =(4 * PI)* [0 1兰特(1,15)];Y =的sin(x);

您可以使用所获得的三次样条插值

c = csapi (x, y);

并画出花键,与数据一起,用下面的代码:

fnplt (cs);hold on plot(x,y,'o')图例('三次样条','data') hold off

这将产生类似下面的图。

平稳的数据的三次样条插值

这是更准确地说,三次样条插值与不-A-结结束条件,这意味着它是唯一分段三次多项式具有两个连续的衍生物与在所有场所内部除了最左边和最右边的一个数据点。这是相同的插值由MATLAB产生®样条命令,样条(x, y)

周期性数据

正弦函数是2π周期。要检查你的插值如何以及是否在这一点上,计算,例如,区别在它的一阶导数的值在两个端点,

的diff(fnval(fnder(CS),[0 4 *π))ANS = -.0100

这不是很好。如果你想要得到一个在两个端点处都有一阶和二阶导数的插值函数,04 * PI,则使用命令csape它允许指定许多不同种类的结束条件,包括周期结束条件。所以,使用相反

件= csape(X,Y, '周期性');

为此你

的diff(fnval(fnder(PCS),[0 4 *π))

输出是ANS = 0为端部斜率之差。即使是二阶导数的差值也很小:

的diff(fnval(fnder(个,2),[0 4 *π))

输出是ans = -4.6074 e - 015

另一端的条件

其他结束条件也可以处理。例如,

CS = csape(X,[3,Y,-4],[1 2]);

为三次样条插值提供断点并用其在最左边的数据站点斜率等于3,其在最右边的数据站点二阶导数等于-4。

一般的样条插值

如果你想要在除断点和/或用三次样条以外的样条插值结,然后使用spapi命令。你会说,这是最简单的形式sp = spapi (k, x, y);在第一个论证中,ķ,指定订单插值样条的;这是每个多项式的系数,即。,比多项式项的名义次数大1。例如,下一个图显示了一个线性的、二次的和四次样条插值到您的数据中,正如这些语句所得到的

sp2 = spapi (x, y);fnplt(sp2,2), hold on sp3 = spapi(3,x,y);fnplt(sp3,2,'k——'),sp5 = spapi(5,x,y);fnplt (sp5 2 r -。),情节(x, y,“o”)传说(“线性”,“二次”,“四次”、“数据”),推迟

不同阶光滑数据的样条插值

从插值得到甚至三次样条spapi是从所提供的一个不同的CSAPI样条。为了强调他们的差异,计算并绘制它们的二阶导数,具体如下:

fnplt(fnder(spapi(4,x,y),2)), hold on, fnplt(fnder(csapi(x,y),2),2,'k—'),plot(x, 0 (size(x)),'o') legend('from spapi','from csapi','data sites'), hold off

如下图所示:

二阶导数同样流畅数据的两种三次样条插值的

由于三次样条的二阶导数是一条折线,其中在花键的断裂顶点,就可以很清楚地看到CSAPI在数据点的地方休息,而spapi没有。

结选择

这是,事实上,可以明确指定只在此样条插值应该有休息,使用命令SP = spapi(节,X,Y);在这个序列中耗材,以一定的方式,所使用的中断。例如,回顾,你已经选择ÿ成为sin (x),命令

ch = spapi(augknt(x,4,2),[x x],[y cos(x)]);

提供三次埃尔米特插值正弦函数,即分段三次函数,与所有的休息x(我)它的值与正弦函数的值相匹配斜率为x(我)的。这使得插值连续连续一阶导数,但在一般情况下,它已经跨越其二阶导数的休息跳跃。究竟这是否命令知道数据值阵列的哪一部分(y cos (x))提供值和哪个斜率?注意,这里的数据站点数组被指定为[x],即,每个数据站点出现两次。还要注意,y(我)是否与第一次发生的x(我),COS(X(i))的与第二次出现的相关联的x(我)。与数据站点的首次出现相关联的数据值被视为函数值;与第二次外观相关的数据值被视为斜率。如果该数据点出现第三次,则以对应的数据值作为该数据点匹配的二阶导数值。看到构建和工作与B型样条来讨论这个命令augknt用于生成适当的“结序列”。

平滑

如果什么数据吵?例如,假设给定的值是

嘈杂= Y + 0.3 *(兰特(大小(X)) -  5);

那么你可能更喜欢近似。例如,您可以尝试使用命令获得的三次平滑样条

scs = csaps (x,嘈杂的);

和策划

fnplt(scs,2), hold on, plot(x, noise, o), legend(smooth spline, noise data), hold off

这会产生这样的数字:

噪声数据的三次样条函数

如果你不喜欢平滑的程度csaps (x, y),你可以通过指定平滑参数来改变它,p作为任选的第三个参数。选择0和1之间由于这个数值的任何地方p从0到1的变化,平滑样条曲线相应的变化,从一个极端,数据的最小二乘直线近似,到另一个极端,数据的“自然”三次样条插值。自csaps返回平滑参数实际上作为一个可选的第二个输出,你现在可以实验,如下:

[考察,P] = csaps(X,嘈杂);fnplt(SCS,2),保持上fnplt(csaps(X,嘈杂,P / 2),如图2所示, 'K--'),fnplt(csaps(X,噪音大,(1 + P)/ 2),2,'R:'),图(X,嘈杂, 'O')说明( '平滑样条', '更平滑', '少平滑',... '噪声数据'),推迟

这将产生以下图片。

噪声数据或多或少地平滑了

有时,你可能更喜欢简单地获得最流畅的三次样条SP即在规定范围托尔在这个意义上,给定的数据范数(嘈杂 - fnval(SP中,x))^ 2 <= TOL。使用命令创建这个样条SP = spaps(X,嘈杂,TOL)对于你定义的公差托尔

最小二乘

如果你喜欢一个最小二乘逼近,可以由语句获得它SP = spap2(节中,k,X,Y);其中两个序列的结和订单ķ必须提供样条。

最常见的顺序是4,这样就得到了一个三次样条。如果你不知道如何选择结,简单地指定你想要使用的多项式片的数量。例如,

sp = spap2 (3 4 x, y);

给出了一个三次样条由三个多项式件。如果所产生的误差是不均匀的,你可以尝试通过使用更好的节点分布newknt如下:

sp = spap2 (newknt (sp), 4, x, y);