主要内容

如何选择结

这个例子展示了如何使用optknt而且newknt命令从曲线拟合工具箱™。

样本数据

这里有一些样本数据,多用于测试样条近似与可变结,所谓的钛热数据。它们记录了钛的一些性质,作为温度的函数来测量。

[xx,yy] =钛;情节(xx, yy,“x”);轴([500 1100 .55 2.25]);标题(“钛热数据”);持有

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含一个类型为line的对象。

注意这个尖峰。我们将用这些数据来说明一些选择结的方法。

首先,我们从这些粗略的数据中选取一些数据点。我们将使用这个子集进行插值,然后将结果与整个数据集进行比较。

Pick = [1 5 11 21 27 29 31 33 35 40 45 49];Tau = xx(pick);Y = yy(pick);情节(τ,y,“罗”);传奇({完整的数据集的“子样品数据”},“位置”“西北”);

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含两个类型为line的对象。这些对象表示完整数据集、次采样数据。

一般考虑

一条有序的样条kn + k结了n自由度。因为我们有12个数据站点,Tau(1) <…<τ(12),一个三次样条拟合,即四阶样条,需要一个结序列t长度为12+4。

此外,结序列t必须满足Schoenberg-Whitney条件,即必须使第i个数据点位于第i条b样条的支持下,即,万博1manbetx

对于所有i, T (i) < (i) < T (i+k)

只有在多重结的情况下才允许平等k

选择满足所有这些条件的结序列的一种方法是作为最佳结,Gaffney/Powell和Micchelli/Rivlin/Winograd。

最佳的结

最优样条插值,到点的值

τ(1),…,τ(n)

比如说,选择结点是为了使标准误差公式中的常数最小。具体地说,选择第一个和最后一个数据点作为k折结点。剩下的n - k绳结由optknt

这里是帮助的开始optknt

OPTKNT最佳结分布。

OPTKNT(TAU,K)返回一个'最佳'的结序列

数据点插值TAU(1),…的样条,TAU(n)

k阶TAU一定是一个递增序列,但这个不是

检查。

OPTKNT(TAU,K,MAXITER)指定迭代的MAXITER数

要尝试,默认值为10。

这个结序列的内部结是n-K

任何绝对常数函数h ~= 0的符号变化

满足

积分{f(x)h(x): TAU(1) < x < TAU(n)} = 0

对于所有f (K)的样条函数,加上结序列TAU。

尝试OPTKNT

我们尝试使用optknt在我们的例子中,用三次样条插值数据

(tau(i), y(i)), for i = 1,…, n。

K = 4;Osp = spapi(optknt(tau,k), tau,y);fnplt(百“r”);Hl =传说({完整的数据集的“子样品数据”...“使用最优结点的三次样条插值”},...“位置”“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含3个类型为line的对象。这些对象表示完整数据集,次采样数据,三次样条插值使用最佳结。

这有点令人不安!

这里用星号标出的,也是内部的最佳结:

“节”);情节(xi, repmat(1.4、大小(xi)),‘*’);Hl =传说({完整的数据集的“子样品数据”...“使用最优结点的三次样条插值”...“最优节”},“位置”“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含4个类型为line的对象。这些对象代表完整数据集,次采样数据,三次样条插值使用最佳结,最佳结。

发生了什么事?

最优插补的结点选择设计是为了使最大值超过所有功能f的比值

范数(f - If) /范数(D^k f)

当分子是插值误差的范数时,f -如果,分母为的范数k插值函数的-th导数,D ^ k f.因为我们的数据表明D ^ k f是相当大的,插值误差附近的平坦部分的数据是这样的“最佳”方案的可接受的大小。

实际上,对于这些数据,普通三次样条插值由csapi做得很好:

Cs = csapi(tau,y);fnplt (cs,‘g’2);Hl =传说({完整的数据集的“子样品数据”...“使用最优结点的三次样条插值”...“最优节”使用CSAPI的三次样条插值},...“位置”“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];持有

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含5个类型为line的对象。这些对象代表完整数据集,次采样数据,三次样条插值使用最优结点,最优结点,三次样条插值使用CSAPI。

最小二乘逼近的结选择

在用样条进行最小二乘逼近时,必须选择结点。一种方法是使用等间距的结开始,然后使用newknt用近似得到了更好的结分布。

下一节用完整的钛热数据集说明这些步骤。

均匀结序列的最小二乘逼近

我们从一个统一的结序列开始。

if = linspace(xx(1), xx(end), 2+fix(length(xx)/4));Sp = spap2(augknt(unif, k), k, xx, yy);情节(xx, yy,“x”);持有fnplt (sp,“r”);轴([500 1100 .55 2.25]);标题(“钛热数据”);Hl =传说({完整的数据集的...“均匀结的最小二乘三次样条”},...“位置”“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含两个类型为line的对象。这些对象代表全数据集,使用均匀结的最小二乘三次样条。

这一点也不令人满意。所以我们用newknt对于相同阶数相同次数的样条近似,但断点分布更好。

利用NEWKNT改善结分布

Spgood = spap2(newknt(sp), k, xx,yy);fnplt (spgood‘g’, 1.5);Hl =传说({完整的数据集的...“均匀结的最小二乘三次样条”...'使用NEWKNT的最小二乘三次样条'},...“位置”“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];持有

图中包含一个axes对象。标题为The Titanium Heat Data的axis对象包含3个类型为line的对象。这些对象代表完整数据集,使用均匀结的最小二乘三次样条,使用NEWKNT的最小二乘三次样条。

这很好。顺便说一句,在这种情况下,即使少一个内部结也不够。