如何选择结
这个例子展示了如何使用optknt
而且newknt
命令从曲线拟合工具箱™。
样本数据
这里有一些样本数据,多用于测试样条近似与可变结,所谓的钛热数据。它们记录了钛的一些性质,作为温度的函数来测量。
[xx,yy] =钛;情节(xx, yy,“x”);轴([500 1100 .55 2.25]);标题(“钛热数据”);持有在
注意这个尖峰。我们将用这些数据来说明一些选择结的方法。
首先,我们从这些粗略的数据中选取一些数据点。我们将使用这个子集进行插值,然后将结果与整个数据集进行比较。
Pick = [1 5 11 21 27 29 31 33 35 40 45 49];Tau = xx(pick);Y = yy(pick);情节(τ,y,“罗”);传奇({完整的数据集的“子样品数据”},“位置”,“西北”);
一般考虑
一条有序的样条k
与n + 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];
这有点令人不安!
这里用星号标出的,也是内部的最佳结:
“节”);情节(xi, repmat(1.4、大小(xi)),‘*’);Hl =传说({完整的数据集的“子样品数据”...“使用最优结点的三次样条插值”...“最优节”},“位置”,“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];
发生了什么事?
最优插补的结点选择设计是为了使最大值超过所有功能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];持有从
最小二乘逼近的结选择
在用样条进行最小二乘逼近时,必须选择结点。一种方法是使用等间距的结开始,然后使用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];
这一点也不令人满意。所以我们用newknt
对于相同阶数相同次数的样条近似,但断点分布更好。
利用NEWKNT改善结分布
Spgood = spap2(newknt(sp), k, xx,yy);fnplt (spgood‘g’, 1.5);Hl =传说({完整的数据集的...“均匀结的最小二乘三次样条”...'使用NEWKNT的最小二乘三次样条'},...“位置”,“西北”);霍奇金淋巴瘤。Position = hl.Position-[.14,0,0,0];持有从
这很好。顺便说一句,在这种情况下,即使少一个内部结也不够。