主要内容

三次样条插值

这个例子展示了如何使用csapicsape命令从构造三次样条曲线拟合工具箱™interpolants。

CSAPI命令

命令

值= csapi (x, y, xx)

返回值xx三次样条的interpolant给定数据(x, y),使用not-a-knot结束条件。这个interpolant分段三次函数,打破序列x立方的片段连接在一起形成一个函数有两个连续的衍生品。“not-a-knot”结束条件意味着,在第一个和最后一个室内休息,甚至连三阶导数是连续的(舍入误差)。

只有两个数据点指定直线interpolant结果。

x = [0 1);y = 0 [2];xx = linspace (0, 6121);情节(xx csapi (x, y, xx),“k -”,x, y,“罗”)标题(“Interpolant两点”)

图包含一个坐标轴对象。坐标轴对象与标题Interpolant两点包含2线类型的对象。

指定三个数据点为抛物线。

x = [2 3 5];y = [1 0 4];情节(xx csapi (x, y, xx),“k -”,x, y,“罗”)标题(“Interpolant三分”)

图包含一个坐标轴对象。坐标轴对象与标题Interpolant三分包含2线类型的对象。

更普遍的是,四个或更多的数据点三次样条。

x = [1 4.1 1.5 - 2 5];y = (1 1 1 1 1);情节(xx csapi (x, y, xx),“k -”,x, y,“罗”)标题(“立方样条Interpolant 5分”)

图包含一个坐标轴对象。坐标轴对象与标题三次样条Interpolant 5分包含2线类型的对象。

如何检查CSAPI的输出

这些看起来像interpolants不错,但是我们如何检查csapi执行广告吗?

我们已经看到,csapi插入,因为我们绘制数据点和interpolant顺利通过这些点。但可以肯定的是,我们得到一个立方样条,最好是开始的数据立方样条的预期和检查是否排序csapi繁殖三次样条,即。,gives back that cubic spline from which the data were taken.

例如:截断幂函数

三次样条函数来检查的一个简单的例子对截断三次方,即。,函数

f ( x ) = ( ( x - - - - - - x ) + ) 3 ,

在哪里是一个休息和“+”下标表示截断函数,提供的命令subplus:

帮助subplus
SUBPLUS积极的部分。x,如果x > = 0 y = subplus (x): = (x) _{+} = 0,如果x < = 0返回x的积极的部分用于计算截断的权力。

下面的截3次方是绘制的特定选择=2。正如所料,这是0到2的左边,升起像(x - 2) ^ 3右边的2。

情节(xx subplus (xx-2)。^ 3,“y”,“线宽”3)轴([0,-10,70])

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象。

现在我们插入这个特殊的三次样条0:6数据网站,和情节上interpolant花键,在黑色的。

x = 0:6;y = subplus (x - 2) ^ 3;值= csapi (x, y, xx);持有情节(xx,价值观,“k”,x, y,“罗”)举行标题(((x - 2) _ +)的Interpolant ^ 3 ')

图包含一个坐标轴对象。坐标轴对象标题I n t e r p o l n t空白t o空白((x - 2) indexOf +基线)立方基线包含3线类型的对象。

插值误差

当比较两个函数时,它通常是更有益的情节不同。

情节(xx,价值观——subplus (xx-2)。^ 3)标题(的三次样条插值误差((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我n空白C u b C S p l n E空白我n t E r p o l t i o n空白t o空白((x - 2) indexOf +基线)立方基线包含一个类型的对象。

融入不同的大小,还可以计算出最大的数据值。这显示了错误并不比不可避免的舍入误差。

max_y = max (abs (y))
max_y = 64

截断电力无法复制

进一步的测试,我们插入一个截断的力量csapi那里的冲击波interpolant 0:6无法配合。例如,第一个室内打破插值样条的并不是一个结csapi使用“not-a-knot”条件,因此interpolant在那个网站有三个连续的衍生品。这意味着我们不应该能够重现截断第三力量集中在那个网站以来三阶导数不连续在该网站。

值= csapi (x, subplus (x - 1) ^ 3, xx);情节(xx,价值观——subplus (xx-1)。^ 3)标题(的错误Not-a-Knot Interpolant ((x - 1) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白i n空白n o t - a - K n o t空白我n t E r p o l n t空白t o空白((x - 1) indexOf +基线)立方基线包含一个类型的对象。

因为1是第一个室内结,这个interpolant并不活跃。

不同的是只要一样大,但衰减迅速,我们远离1所示。这说明三次样条插值基本上是当地的

使用ppform代替值

可以保留插值三次样条的形式适合后续评估,计算其衍生品或其他操作。这是通过调用来完成的csapi在表单中

页= csapi (x, y)

它返回的ppform interpolant。你可以评估这种形式在一些新的点xx由命令

值= fnval (pp、xx)

你可以区分interpolant的命令

民进党=曾经(pp)

或由命令集成

ipp = fnint (pp)

它返回ppform微分或积分,分别。

例如:Interpolant分化和整合

显示interpolant分化,我们绘制的导数截断的力量

f 2 ( x ) = 3 ( ( x - - - - - - 2 ) + ) 2 ,

(黄色),然后在其上,我们的导数interpolant原始截三次方函数(黑色)。

情节(xx, 3 * subplus (xx-2)。^ 2,“y”,“线宽”3)页= csapi (x, subplus (x - 2) ^ 3);民进党=曾经(pp);持有情节(xx fnval(民进党,xx),“k”)举行标题(的导数Interpolant ((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象标题D e r我v t v e空白o f i n t e r p o l n t空白t o空白((x - 2) indexOf +基线)立方基线包含2线类型的对象。

再次,信息比较情节不同,像以前一样,这是没有舍入误差大。

情节(xx fnval(民进党,xx) - 3 * subplus (xx-2)。^ 2)标题(的误差的导数interpolant ((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我空白D E r n v t v E空白o f空白我n t E r p o l n t空白t o空白((x - 2) indexOf +基线)立方基线包含一个类型的对象。

截断电力的二阶导数

f 2 ( x ) = 6 ( x - - - - - - 2 ) +

阴谋的区别这个函数的二阶导数interpolant原始函数显示,现在有跳跃,但他们仍然在舍入误差。

ddpp =曾经(民进党);情节(xx fnval (ddpp, xx) - 6 * subplus (xx-2))标题(误差的二阶导数的Interpolant ((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我n空白S E c o n d空白d E r i v t i v E空白o f空白我n t E r p o l n t空白t o空白((x - 2) indexOf +基线)立方基线包含一个类型的对象。

的积分截断电源

F 2 ( x ) = ( ( x - - - - - - 2 ) + ) 4 / 4

一块这个函数之间的区别和interpolant再次原始函数的积分显示舍入错误中的错误。

ipp = fnint (pp);情节(xx fnval (ipp, xx)——subplus (xx-2)。^ 4/4)标题(的积分误差Interpolant ((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我空白n n t E g r l空白o f空白我n t E r p l n t空白t o空白((x - 2) indexOf +基线)立方基线包含一个类型的对象。

CSAPE命令

就像csapi,csape命令提供一个三次样条interpolant给定数据。然而,它允许不同的附加条件。最简单的版本,

页= csape (x, y)

使用拉格朗日结束条件,它是一种常见的替代not-a-knot条件使用csapicsapeinterpolant并不直接返回值,但只有ppform。

例如,考虑再一次插值函数

f 1 ( x ) = ( ( x - - - - - - 1 ) + ) 3 ,

哪一个csapi无法复制。我们把错误的not-a-knot interpolant返回csapi(黑色),以及错误的interpolant所得csape(红色)。

确切= subplus (xx-1)。^ 3;情节(xx fnval (csapi (x, subplus (x - 1) ^ 3), xx)——精确,“k”)举行情节(xx fnval (csape (x, subplus (x - 1) ^ 3), xx)——精确,“r”)标题(“Not-a-Knot误差与拉格朗日结束条件”)({传奇“Not-a-Knot”“拉格朗日”});持有

图包含一个坐标轴对象。坐标轴对象与标题错误Not-a-Knot与拉格朗日结束条件包含2线类型的对象。这些对象代表Not-a-Knot,拉格朗日。

没有多大区别两个interpolants在这种情况下。

另一端条件:花键Interpolant“自然”

csape命令还提供了方法来指定一些其他类型的一个插值三次样条的条件结束。例如,命令

页= csape (x, y,“变分”)

使用所谓的“自然”结束条件。这意味着两种极端的二阶导数为零。

这个步骤显示了如何应用“天然”三次样条插值函数

f 2 ( x ) = ( ( x - - - - - - 2 ) + ) 3 ,

和情节错误。下面的代码计算另一个观点的“天然”样条interpolant语法,等于“变分”论点:使用“第二”指定csape应该建立在极端的二阶导数数据网站的默认值0。

页= csape (x, subplus (x - 2) ^ 3,“第二”);情节(xx fnval (pp、xx)——subplus (xx-2)。^ 3)标题(的“自然”样条插值误差((x - 2) _ +) ^ 3 ')

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我n空白' n t u r l '空白S p l n E空白我n t E r p o l t i o n空白t o空白((x - 2) indexOf +基线)立方基线包含一个类型的对象。

注意右端附近的大错误。这是由于一个事实,即“自然”含蓄地坚持有第一百零二次导数结束条件。

另一端条件:处方二阶导数

我们也可以显式地使用正确的二阶导数,得到一个小错误。首先,我们计算正确的二阶导数值截断电力的端点。

endcond = 6 * subplus (x(结束[1])2);

然后我们创建interpolant,二阶导数的指定端点与我们计算二阶导数值。我们通过提供这样做endcond (1)左端点条件,endcond (2)正确的,随着数据值。

页= csape (x, [endcond (1) subplus (x - 2)。^ 3 endcond (2)),“第二”);情节(xx fnval (pp、xx)——subplus (xx-2)。^ 3,“r”)标题(的样条插值误差((x - 1) _ +) ^ 3 ';匹配的二阶导结束时的])

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我n空白S p l i n E空白i n t E r p o l t i o n空白t o空白((x - 1) indexOf +基线)立方基线空白空白空白W h E n空白M t c h i n g空白t h E空白2 n d空白d E r我v t v E空白t E n d S空白空白包含一个类型的对象。

另一端条件:处方

csape还允许指定端点山坡上。这是夹紧的(或者,完整的)立方样条interpolant。该声明

页= csape (x, (sl, y, sr),“夹紧”)

创建数据立方样条interpolant (x,y),也有斜坡sl在最左边的数据网站和斜率在最右边的数据。

另一端条件:混合结束条件

甚至可以组合这些条件。例如,我们much-exercised截断幂函数

f 1 ( x ) = ( ( x - - - - - - 1 ) + ) 3

斜率0在x= 0和二阶导数30x= 6(最后一个数据网站)。

因此,通过匹配左端处的斜率和曲率在正确的,我们期望结果interpolant没有错误。

页= csape (x, [0 subplus (x - 1)。2 ^ 3 30],[1]);情节(xx fnval (pp、xx)——subplus (xx-1)。^ 3)标题([的样条插值误差((x - 1) _ +) ^ 3 ';与混合结束条件。”])

图包含一个坐标轴对象。坐标轴对象与标题E r r o r空白我n空白S p l i n E空白i n t E r p o l t i o n空白t o空白((x - 1) indexOf +基线)立方基线空白空白空白空白空白空白空白空白空白w我t h空白M x E d空白E n d空白C o n d i t i o n S。空白空白空白空白空白空白空白空白空白空白包含一个类型的对象。

另一端条件:周期性条件

也可以开周期结束条件。例如,正弦函数是2 * pi-periodic和有价值[0 1 0 1 0]在网站(π/ 2)* (2:2)。正弦函数之间的差异,及其周期性的三次样条interpolant在这些网站,仅为2%。不坏。

x =(π/ 2)* (2:2);y = [0 1 0 1 0];页= csape (x, y,“周期”);xx = linspace(π-π,201);情节(xx,罪(xx)——fnval (pp、xx),“x”)标题(错误的周期性的三次样条插值sin (x)的)

图包含一个坐标轴对象。坐标轴对象与标题周期性的三次样条插值误差sin (x)包含一个类型的对象。

条件没有明确由CSAPI或CSAPE结束

任何没有明确的结束条件csapicsape可以通过构建interpolant处理csape违约方条件,然后添加一个适当的标量多个interpolant的零值和一些附加条件。如果有两个“非标准”条件满足,你可能要先解决一个2×2的线性系统。

例如,假设你想计算出立方样条interpolant年代的数据

x = 0: .25:3;q = @ x (x)。* (1 + x) * (1 + x。* x / 5));y =问(x);

和执行情况

λ(s): = * (Ds) (e) + b * ^ 2 s (D) (e) = c

在第一和第二的衍生品年代在点e

生成的数据从一个四次多项式,恰好满足这个条件与特定的参数

e = x (1);= 2;b = 3;c = 4;

构建interpolant满足这个特定条件,我们首先构建interpolant使用默认结束条件

pp1 = csape (x, y);

和第一个多项式的一阶导数。

dp1 =曾经(fnbrk (pp1 1));

此外,我们构造三次样条interpolant零数据值,指定它的斜率为1e,

pp0 = csape (x,[1, 0(大小(y)), 0], [1,0]);

以及构建第一个多项式的一阶导数。

dp0 =曾经(fnbrk (pp0 1));

然后我们计算λ对于这两个pp1pp0,

lam1 =一个* fnval (dp1、e) + b * fnval(曾经(dp1), e);lam0 =一个* fnval (dp0 e) + b * fnval(曾经(dp0), e);

和构建正确的线性组合pp1pp0三次样条

s: = pp1 + ((c -λ(pp1)) /λ(pp0)) * pp0

,满足所需的条件,以及默认结束条件在正确的端点。我们的帮助下形成这个线性组合fncmb

s = fncmb (pp0 (c-lam1) / lam0 pp1);

一块内插误差显示年代适合附近的四次多项式略好e比interpolantpp1用默认的条件。

xx = (3): . 05: 7;yy = q (xx);情节(xx fnval (pp1 xx) - yy,“x”)举行情节(xx fnval(年代,xx) - yy,“o”)举行传奇({“默认条件”“非标准条件”},“位置”,“本身”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。这些对象代表默认条件下,非标准条件。

如果我们想要执行的条件

μ(s): = (D ^ 3 s) (3) = 14.6

的三阶导数interpolant(四次满足这个条件),然后构造一个额外的三次样条插值为零值,并与一分之零左端点导数,因此肯定会独立于pp0

pp2 = csape (x,[0, 0(大小(y)), 1], [0,1]);

然后我们发现系数d0d2的线性组合

s: = pp1 + d0 * pp0 + d2 * pp2

这种方法解决了线性系统

λ= c (s)

μ(s) = 14.6

请注意,这两个pp0pp2消失在所有插值站点,因此年代将匹配给定的数据选择的吗d0d2

对于娱乐,我们使用MATLAB®编码设备写一个循环计算λ(pp_j)μ(pp_j),因为j= 0:2。

dd = 0 (2、3);j = 0:2 j = num2str (j);eval ([“民进党”J' =曾经(pp 'J”),“]);eval ([“ddpp”J=曾经(民进党的J”),“]);eval ([“dd (1,1 +”J“* fnval(民进党)=”J”,e) + b * fnval (ddpp 'J“e);”]);eval ([“dd (2, 1 +”J')= fnval(曾经(ddpp 'J”),3),“]);结束

给定的值λμpp0,pp1,pp2,然后求出系数定义正确的线性组合。

d = dd (: [1,3]) \ ([c; 14.6] dd (:, 2));s = fncmb (fncmb (pp0, d (1) pp2 d (2)), pp1);xxx = 0: .05:3;多= q (xxx);情节(xxx, yyy - fnval(年代,xxx),“x”)标题(错误的花键Interpolant y = x * (1 + x * (1 + x * x / 5))”)

图包含一个坐标轴对象。坐标轴对象标题错误样条Interpolant y = x * (1 + x * (1 + x * / 5)包含一个类型的对象。

放心,我们把这个错误与获得的一个完整的三次样条插值函数:

持有情节(xxx, yyy fnval (csape (x, [1, y, 7 + (4/5) * 27],“夹紧”),xxx),“o”)举行传奇({“非标准条件”“Endslope条件”})

图包含一个坐标轴对象。坐标轴对象标题错误样条Interpolant y = x * (1 + x * (1 + x * / 5)包含2线类型的对象。这些对象代表非标准条件下,Endslope条件。

不同的错误(而不是)只在终点附近,作证这一事实pp0pp2相当大的只有靠近各自的终点。

最后检查,我们确认年代满足所需的三阶导数条件3。

fnval(曾经(年代,3),3)
ans = 14.6000