主要内容

三次平滑样条

方法的使用csaps而且spaps命令从曲线拟合工具箱™构建三次平滑样条。

CSAPS命令

命令csaps提供了平滑样条。这是一个三次样条,或多或少地遵循噪声数据中假定的潜在趋势。由您选择的平滑参数决定平滑样条与给定数据的紧密程度。以下是基本信息,文档的缩写版本:

三次平滑样条。

值= caps (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积分

示例:来自三次多项式的噪声数据

这里有一些试运行。我们从简单立方数据开始,Q (x) = x^3,用一些噪声污染这些值,并选择平滑参数的值为.5。然后绘制得到的平滑值,以及底层的立方和受污染的数据。

Q = @(x) x.^3;Yi = q(xi);randomStream = RandStream.create(“mcg16807”“种子”, 23);Ybad = yi+。3 *(兰德(randomStream、大小(xi)));P = .5;Xxi = (0:100)/100;Ys = caps (xi,ybad,p,xxi);情节(xi,咦,“:”“x”第二十一章,y,的r -)标题(“干净的数据,有噪声的数据,平滑的值”)传说(“准确”“吵”“平滑”“位置”“西北”

图中包含一个轴对象。标题为Clean Data, noise Data, Smoothed Values的axes对象包含3个类型为line的对象。这些对象代表精确,噪声,平滑。

这里的平滑有点过头了。通过选择平滑参数p趋近于1时,我们得到一条更接近给定数据的平滑样条。我们试着P = .6, .7, .8, .9, 1,并绘制得到的平滑样条。

Yy = 0(5,长度(xxi));P =[。]6 .7 .8 .9 1];J =1:5 yy(J,:) = caps (xi,ybad,p(J),xxi);结束持有情节(第二十一章,yy);持有标题(平滑参数不同值的平滑样条)({传奇“准确”“吵”'p = 0.5''p = 0.6''p = 0.7''p = 0.8'...'p = 0.9''p = 1.0'},“位置”“西北”

图中包含一个轴对象。标题为平滑参数不同值的平滑样条的axis对象包含8个类型为line的对象。这些对象分别代表Exact, noise, 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^3/16,h相邻站点之间的平均差异。具体地说,当P = 1/(1+ /100)以及一些令人满意的平滑P = 1/(1+ *100)

的值的平滑样条p在这个神奇的数字附近1 /(1 +ε).对于这种情况,查看它会提供更多的信息1 - p因为这个神奇的数字,1 /(1 +ε),非常接近于1。

= (xi(end)-xi(1))/(numel(xi)-1))^3/16;1 - 1/(1+)
Ans = 7.8124e-06
情节(xi,咦,“:”“x”)举行标签= cell(1,5);J =1:5 p =1 /(1+ *10^(J -3));Yy (j,:) = caps (xi,ybad,p,xxi);标签{j} = [“1 - p = ', num2str (1 - p)];结束情节(第二十一章,yy)标题(平滑样条平滑参数接近它的“魔术”值)传说([{“准确”“吵”},标签),“位置”“西北”)举行

图中包含一个轴对象。axis对象的标题为Smoothing Splines for Smoothing Parameter Near Its 'Magic' Value,包含7个类型为line的对象。这些对象分别代表Exact, noise, 1-p= 7.812125 -08, 1-p= 7.812125 -07, 1-p= 7.8124e-06, 1-p= 7.8119e-05, 1-p= 0.00078064。

在这个例子中,平滑样条对平滑参数在魔术数附近的变化非常敏感。离1最远的那个似乎是最好的选择,但你可能更喜欢超过1的那个。

P = 1/(1+ *10^3);Yy = caps (xi,ybad,p,xxi);持有Plot (xxi, yy,“y”“线宽”, 2)标题(sprintf(添加1-p = %s的平滑样条,以黄色显示, num2str(1-p)))等待

图中包含一个轴对象。添加标题为The Smoothing Spline For 1-p = 0.0077519的坐标轴对象,在黄色中包含8个类型为line的对象。这些对象分别代表Exact, noise, 1-p= 7.812125 -08, 1-p= 7.812125 -07, 1-p= 7.8124e-06, 1-p= 7.8119e-05, 1-p= 0.00078064。

你也可以提供csaps有了误差权重,要比其他数据点更注意一些数据点。另外,如果你不提供评估地点xx,然后csaps返回平滑样条的ppform。

最后,csaps还可以处理向量值数据,甚至多变量网格数据。

SPAPS命令

由命令提供的三次平滑样条spaps不同于csaps只是在选择的方式上。以下是文档的简化版本spaps

SPAPS平滑样条。

[SP,VALUES] = SPAPS(X,Y,TOL)返回B-form,如果被问到,

给定的三次平滑样条f在X处的值

data (X(i),Y(:,i)), i=1,2,…, n。

平滑样条f使粗糙度测量最小化

F(D²F):=∫(D²F(t))²dt对X(1) < t < X(n)

对所有函数f进行误差测量

E (f): = sum_j {W (j) * (Y (:, j) - f (X (j))) ^ 2: j = 1,……n}

不大于给定TOL。这里,D^ mf表示第M次

权重W的选择使得E(f)是

F(y-f)的复合梯形规则逼近。

F构造为的唯一最小值

E(f) + f (D²f)

平滑参数RHO的选择使得E(f)等于

托尔。因此,FN2FM(SP,'pp')应该是相同的(直到舍入)

为CPAPS输出(X,Y,RHO/(1+RHO))。

公差与平滑参数

它可能更容易提供一个合适的公差spaps而不是平滑参数p所要求的csaps.在前面的例子中,我们从区间中添加了均匀分布的随机噪声0.3 * -0.5 (. .0.5).因此,我们可以估计一个合理的值托尔作为测量误差的值e听着这样的噪音。

Tol = sum((。3 *(兰德(randomStream、大小(yi)))) ^ 2);

此图显示了由spaps.请注意,错误权重被指定为统一的,这是它们的默认值csaps

[sp,ys,rho] = spaps(xi,ybad,tol,ones(size(xi)));情节(xi,咦,“:”“x”的r -title(sprintf(“干净数据,有噪声数据,平滑值(1-p = %s)”, num2str(1/(1+rho))));传奇({“准确”“吵”“平滑”},“位置”“西北”

图中包含一个轴对象。标题为Clean Data, noise Data, Smoothed Values (1-p = 0.013761)的axis对象包含3个类型为line的对象。这些对象代表精确,噪声,平滑。

图标题显示的值p你可以用incsaps得到这些数据的平滑样条。

另外,这里是由提供的平滑样条csaps当没有给定平滑参数时。在这种情况下csaps通过特定的特定过程选择参数,该过程试图定位平滑样条对平滑参数最敏感的区域(类似于前面的讨论)。

持有情节(第二十一章,fnval (csaps (xi, ybad)第二十一章),“- - -”)标题(“干净的数据,有噪声的数据,平滑的值”)({传奇“准确”“吵”'spaps,指定公差'...caps,默认平滑参数},“位置”“西北”)举行

图中包含一个轴对象。标题为Clean Data, noise Data, Smoothed Values的axes对象包含4个类型为line的对象。这些对象表示Exact, noise, spaps,指定公差,caps,默认平滑参数。

CSAPS vs. SPAPS

csaps而且spaps命令的不同之处在于指定特定的平滑样条的方式,通过平滑参数和公差。另一个区别是spaps除了三次平滑样条外,还可以提供线性或五次平滑样条。

五次平滑样条比三次平滑样条在你想让二阶导数尽可能小地移动的情况下更好。