这个例子说明了如何使用csaps
和spaps
命令从曲线拟合工具箱™构建三次平滑样条。
命令csaps
提供平滑样条。这是一个三次样条曲线,它或多或少地遵循了在有噪声数据中假定的基本趋势。由您选择的平滑参数决定了平滑样条曲线与给定数据的密切程度。以下是基本信息,文件的缩略版:
CSAPS三次样条函数。
值= CSAPS(X, Y, P, XX)
返回值在三次样条函数为的XX
给定数据(X,Y),根据平滑参数P选择
从区间[0 ..1]。平滑样条函数f最小化
P * sum_i W (i) (Y (i) - f (X (i))) ^ 2 + (1 - P) * (f D ^ 2) ^ 2积分
这里是一些试运行。我们从一个简单的立方体开始,问(x): = x ^ 3
,用一些噪声污染这些值,选择平滑参数的值为5。然后绘制得到的平滑值,以及底层的立方和受污染的数据。
X1 =(0:0.05:1);Q = @(X)的x ^ 3。YI = Q(XI);randomStream = RandStream.create(“mcg16807”,“种子”、23);ybad = +。3 *(兰德(randomStream、大小(xi)));p = 5;第二十一章= (0:100)/ 100;y = csaps (xi, ybad, p,第二十一章);情节(xi,咦,':',十一,ybad,'X'第二十一章,y,的r -)标题(“干净的数据,嘈杂的数据,平滑的值”)传说('精确','吵',“平滑”,'位置',“西北”)
平滑的方式过头了这里。通过选择平滑参数p
越接近1,我们得到的平滑样条更靠近所述给定的数据。我们尝试P = 0.6,0.7,0.8,0.9,1
,并绘制产生平滑样条。
yy = 0(5、长度(第二十一章);p = [。6 .7 .8 .9 1];为J = 1:5的yy(J,:) = csaps(XI,ybad,P(j)的,21);结束持有上情节(XXI,YY);持有离标题(平滑参数的不同值的平滑样条)图例({'精确','吵',“p = 0.5”,'P = 0.6','P = 0.7','P = 0.8',...'P = 0.9',“p = 1.0”},'位置',“西北”)
我们发现平滑样条曲线对平滑参数的选择非常敏感。即使对于p
= 0.9,平滑样条仍然远未底层趋势,而对于p
= 1,我们得到了(有噪声的)数据的插值。
事实上,这个公式被csapi
的(p.235ff实用指南样条)对自变量的缩放非常敏感。对所用方程的简单分析表明,该方法的灵敏度范围为p
大约是1 /(1 +小量)
与小量:= H ^十六分之三
和h
相邻站点之间的平均差异。具体地说,您希望在什么时候密切跟踪数据p = 1 /(1 +ε/ 100)
还有一些令人满意的平滑p = 1 /(1 +ε* 100)
。
的平滑样条曲线p
接近这个神奇的数字1 /(1 +小量)
。对于这种情况,查看它会提供更多信息1-P
因为神奇的数字,1 /(1 +小量)
,非常接近于1。
ε= ((xi(结束)习近平(1)/(元素个数(xi) 1)) ^ 3/16;1 - 1 /(1 +ε)
ans = 7.8124 e-06
情节(xi,咦,':',十一,ybad,'X')保持上标签=细胞(1,5);为j=1:5 p =1 /(1+epsilon*10^(j-3));yy (j) = csaps (xi, ybad, p,第二十一章);标签{j} = [“1 - p = ',num2str(1-P)];结束情节(第二十一章,yy)标题(平滑样条用于平滑参数附近的“魔力”值)传说([{'精确','吵'}, 标签],'位置',“西北”)保持离
在这个例子中,平滑样条曲线对接近幻数的平滑参数的变化非常敏感。离1最远的那个似乎是最好的选择,但你可能更喜欢比它更远的那个。
p = 1 /(1 +ε* 10 ^ 3);yy = csaps (xi, ybad, p,第二十一章);持有上情节(第二十一章,yy,'Y','行宽',2)标题(的sprintf(“的样条函数为1-P =%s添加,在黄色”,num2str(1-P)))保持离
您也可以提供csaps
使用误差权值,可以比其他数据点更关注某些数据点。另外,如果您不提供评估站点XX
,然后csaps
返回平滑样条的ppform。
最后,csaps
还可以处理向量值数据,甚至多元网格数据。
由命令提供的三次平滑样条spaps
不同于在。中构造的csaps
只有在它的方式选择。下面是文档的一个缩略版spaps
:
SPAPS平滑样条。
[SP,VALUES] = SPAPS(X,Y,TOL)返回B-形式,并在询问,
在X的值的三次样条函数f表示所述给定的,
数据(X(i),Y(:,i)), i=1,2,…,n。
平滑样条˚F最小化粗糙度测量
F(d ^ 2 F):=积分(d ^ 2 F(T))上x ^ 2 DT(1)
对所有的函数f进行误差测量
E (f): = sum_j {W (j) * (Y (:, j) - f (X (j))) ^ 2: j = 1,……n}
没有比给定TOL更大。在这里,d ^ M f表示第M个
导函数f的。权重W被选择为使得E(f)为
复合梯形规则近似F(Y型F)。
f为构造为独特极小
RHO * E(F)+ F(d ^ 2 F),
选择平滑参数使得E(f)等于
TOL。因此,FN2FM(SP, 'PP')应(最多舍入)相同的
作为CPAPS(X,Y, /(1+))的输出。
它可能更容易提供一个合适的公差spaps
而不是平滑参数p
所要求csaps
。在前面的例子中,我们从区间0.3 *加入均匀分布的随机噪声[ - 0.5 .. 0.5]。因此,我们可以估算一个合理的值TOL
根据所述误差测量的值e
在这样的噪音。
TOL =总和((3 *(兰特(randomStream,大小(YI)) - 5))^ 2。。。);
此图显示了得到的平滑样条构造成通过spaps
。请注意,错误的权重被指定为统一的,这是它们的默认值csaps
。
[SP,YS,ρ-] = spaps(XI,ybad,TOL,酮(大小(XI)));情节(xi,咦,':',十一,ybad,'X'习,y,的r -)标题(的sprintf('清洁数据,噪声数据,平滑值(1-P =%S)',num2str(1 /(1个+ RHO))));传说({'精确','吵',“平滑”},'位置',“西北”)
图标题显示了的值p
你会用到csaps
以获得精确地对这些数据该平滑样条。
另外,这里是由。提供的平滑样条csaps
当没有给出一个平滑参数。在这种情况下csaps
通过一个特定的过程来选择参数,该过程试图找到平滑样条对平滑参数最敏感的区域(类似于前面的讨论)。
持有上图(二十一,fnval(csaps(XI,ybad),21)“- - -”)标题(“干净的数据,嘈杂的数据,平滑的值”)图例({'精确''吵'“spaps,指定容忍”...“csaps,默认的平滑参数”},'位置',“西北”)保持离
的csaps
和spaps
在命令中指定一个特定的样条函数,通过平滑参数与公差的方式不同。另一个区别是,spaps
可以提供一个线性或五次平滑样条,除了三次平滑样条。
五次样条函数比形势的三次样条更好,当你想的二阶导数移动尽可能少。