主要内容

三次样条插值

三次样条Interpolant平滑数据

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

rng (6), x = (4 * pi) *[0 1兰特(15)];y = sin (x);

您可以使用三次样条interpolant获得的

c = csapi (x, y);

和绘制样条,以及数据,使用以下代码:

fnplt (cs);抓住情节(x, y,“o”)传说(“三次样条”,“数据”)持有

这产生一个图如下。

三次样条Interpolant平滑数据

更准确地说,这是立方样条与not-a-knot interpolant结束条件,这意味着它是独特的分段三次多项式和两个连续的衍生品优惠室内数据除了最左边的和最右边的一个网站。它是由MATLAB interpolant一样®样条命令,样条(x, y)

定期的数据

2π-periodic正弦函数。检查你的interpolant确实在这一点上,计算,例如,一阶导数的值的差异在两个端点,

diff (fnval(曾经(cs),[0 4 *π]))ans = -.0100

这是不太好。如果你喜欢得到一个interpolant第一和第二衍生品的两个端点,04 *π、匹配使用的命令csape允许规范的许多不同种类的结束条件,包括周期结束条件。所以,使用相反

电脑= csape (x, y,“周期性”);

你得到

diff (fnval(曾经(pc),[0 4 *π]))

输出是ans = 0不同的斜坡。甚至结束二阶导数很小的差异:

diff (fnval(曾经(电脑,2),[0 4 *π]))

输出是ans = -4.6074 e - 015

另一端的条件

另一端也可以处理条件。例如,

c = csape (x, [3, 4], [1 - 2]);

提供了三次样条interpolant与休息在最左边的数据站点,其斜率等于3,在最右边的数据站点及其二阶导数等于4。

一般的样条插值

如果你想插入在网站之外的其他优惠和/或以外的样条函数三次样条函数和简单结,然后使用spapi命令。在其最简单的形式,你会说sp = spapi (k, x, y);第一个参数,k,指定了订单插值样条;这是在每个多项式系数块的数量,即。1超过名义多项式的次数。例如,下一个图显示了一个线性、二次,和四次样条interpolant你的数据,所获得的语句

sp2 = spapi (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”)传说(“线性”,“二次”,“四次”、“数据”),推迟

花键Interpolants各种订单的平滑数据

甚至三次样条interpolant获得spapi不同于一个提供的csapi样条。强调他们的差异,计算和绘制他们的二阶导数,如下:

fnplt(曾经(spapi (4, x, y), 2)),等等,fnplt(曾经(csapi (x, y), 2), 2 k,),情节(x) 0(大小(x))、“o”)传说(“从spapi”,“从csapi”,“数据网站”),推迟

这给下面的图:

两个三次样条曲线的二阶导数Interpolants相同的平滑数据

由于三次样条曲线的二阶导数是折线,顶点在花键的优惠,你可以清楚地看到这一点csapi地方破坏了数据的网站,spapi没有。

结的选择

事实上,可以指定显式地在花键interpolant应该休息,使用命令sp = spapi(节,x, y);的序列用品,以某种方式,使用的优惠。例如,回忆,你选择了ysin (x),命令

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

提供了一个立方埃尔米特interpolant正弦函数,即分段三次函数,打破所有的x(我)的年代,正弦函数相匹配的值坡的x(我)。这使得interpolant连续和连续一阶导数,但总的来说,它有跳跃在休息时间的二阶导数。这个命令是如何知道哪一部分数据值的数组(y cos (x))供应的价值观和斜坡吗?注意,这里的数据网站数组作为[x],即,每个数据网站出现两次。还要注意,y(我)与第一次出现的x(我),cos (x (i))与第二个出现的x(我)。与第一次出现相关的数据值的数据网站是被一个函数值;与第二个外观是相关的数据值是一个斜坡。如果有三分之一的数据网站,相应的数据值将作为二阶导数值匹配的网站。看到构建和使用b形式样条函数讨论的命令augknt这里使用生成适当的“结序列”。

平滑

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

嘈杂的= y + 3 *(兰德(大小(x)));

然后你可能更喜欢近似代替。例如,您可能尝试立方平滑样条,获得的命令

scs = csaps (x,嘈杂的);

和策划

fnplt (scs), 2),等等,情节(x,嘈杂的,“o”),传说(“平滑样条”,“数据”),推迟

这产生一个图是这样的:

立方平滑样条的噪声数据

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

(scs, 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 < =托尔。你用命令创建这个样条sp = spaps (x,吵闹,tol)为你的公差定义托尔

最小二乘

如果你喜欢一个最小二乘近似式,你可以得到它的声明sp = spap2(节,k, x, y);两个结的序列和订单k必须提供的样条。

订单是4,的受欢迎的选择,给你一个三次样条。如果你不清楚如何选择节,简单地指定使用多项式部分你想要的数量。例如,

sp = spap2 (3 4 x, y);

给出了三次样条多项式组成的三块。如果由此产生的错误是不均匀的,你可能会尝试通过使用更好的结分布newknt如下:

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