Makima分段立方插值

这篇文章是由我的同事Cosmin Ionita

“makima”立方插值法最近介绍了MATLAB®R2017b释放的新选项interp1,interp2,interp3,interpn,griddedInterpolant。它的实现并不是用户可见的;因此,我们已经收到我们的用户询问关于这个新立方方法的细节。

在下面,我们解决我们用户的询问回答这些问题:

  1. 是什么“makima”公式吗?
  2. 如何“makima”与MATLAB的其他立方方法吗?

简而言之,“makima”是短暂的修改Akima分段立方埃尔米特插值。它代表了MATLAB-specific修改Akima的导数公式和具有以下关键属性:

  • 它产生起伏之间找到一个中间立场样条的“pchip”
  • 是当地一个立方interpolant推广到二维网格和高维天网格。
  • 它增加了鲁棒性Akima公式的平等边坡的边界情况。
  • 它消除了数据时产生的一种特殊类型的过度常数连续超过两个节点。

内容

Akima分段立方埃尔米特插值

每个区间[美元x_i ~间{i + 1})的一组输入数据的节点x美元和值v美元美元,分段立方埃尔米特插值不仅发现一个三次多项式插入给定的数据值v_i美元和美元v_ {i + 1}间隔的节点x_i美元和美元间的{i + 1} $,但也有特定的衍生品d_i美元和美元d_ {i + 1} x_i美元和美元间的{i + 1} $。更多细节我们参考插值章在克里夫与MATLAB数值计算教科书。

三次埃尔米特插值的关键是d_i美元衍生品的选择。

在他1970年的Hiroshi Akima引入导数公式避免过度当地起伏:

h . Akima”,新的插值方法和基于当地的光滑曲线拟合程序”,JACM诉节,p。589 - 602年,1970年。

让美元\ delta_i = \离开(v_ {i + 1} v_i \右)/ \离开(间{i + 1} -x_i \右)是间隔的斜率(美元x_i ~间{i + 1})美元。Akima x_i美元的导数的定义是:

$ $ d_i = \压裂{| \ delta_ {i + 1} - \ delta_i | \ delta_张{}+ | \ delta_张{}- \ delta_{我2}| \ delta_i} {| \ delta_ {i + 1} - \ delta_i | + | \ delta_张{}- \ delta_{我2}|},$ $

和代表一个斜坡之间的加权平均$ \ delta_张{}$和$ \ delta_i的间隔(美元间张{}~ x_i) $和$ [x_i ~间{i + 1}):美元

$ $ d_i = \压裂{w_1} {w_1 + w_2} \ delta_张{}+ \压裂{w_2} {w_1 + w_2} \ delta_i \,, \四\四w_1 = | \ delta_ {i + 1} - \ delta_i |, \四\四w_2 = | \ delta_张{}- \ delta_{我2}| $ $

注意Akima的导数x_i本地计算的美元五分美元间{我2}$,$间张{}$,x_i美元,美元间{i + 1},美元和美元间的{我+ 2}$。为结束点x_1 x_n美元,美元需要山坡上美元\ delta_ {1}, \ delta_0 $和$ \ delta_n \ delta_ {n + 1} $。因为这些斜坡输入数据不可用,Akima提议使用二次外推计算他们美元\ delta_0 = 2 \ delta_1 - \ delta_2美元,美元\ delta_ {1} = 2 \ delta_0 - \ delta_1 $和$ \ delta_n = 2 \ delta_ {n} - \ delta_ {2} $, $ \ delta_ {n + 1} = 2 \ delta_n - \ delta_ {n} $。

但是等等!

MATLAB已经有两个立方埃尔米特插值方法(见克里夫的博客样条函数和Pchips):

  • 样条的计算衍生品施加约束的连续的二阶导数(保证一个非常光滑插值的结果),
  • “pchip”计算衍生品施加局部单调性在每个区间[美元x_i ~间{i + 1})美元(这保存数据的形状)。

Akima的公式比较如何样条的“pchip”吗?

Akima的公式发现之间的一个中间立场样条的“pchip”:

  • 其波动(或摆动)振幅小于样条的
  • 它不是一样咄咄逼人“pchip”在减少波动。

这是一个代表性的例子比较这三个立方埃尔米特interpolants:

x1 = [1 2 3 4 5 5.5 9.5 7 8 9 10];v1 = [0 0 0 0.5 0.4 - 1.2 1.2 - 0.1 0.3 - 0.6);xq1 = 0.75:0.05:10.25;compareCubicPlots (x1, v1, xq1,假的,“不”)

修改Akima插值,“makima”

当然Akima的公式产生好结果。然而,我们还没有准备完全采用。

边缘的边坡

当较低的斜坡上是相等的,美元\ delta_{我2}= \ delta_张{},美元和上层的斜坡上是相等的,$ \ delta_i = \ delta_ {i + 1} $,分子和分母成为0和Akima的公式的回报。Akima自己意识到了这个问题并提出的平均的上下斜坡边缘案例:$ d_i = \离开(\ delta_张{}+ \ delta_i \右)/ 2美元。

让我们试试这个修复以下数据集的时间间隔(3 ~ 4)美元和美元(4 ~ 5)平等斜坡\ delta_3 = \ delta_4美元= 1和区间[5 ~ 6)美元和美元[6 ~ 7)也有相等的斜坡\ delta_5美元= \ delta_6 = 0美元:

x2 = 1:8;v2 = [1 1 1 0 1 1 1 1];xq2 = 0.75:0.05:8.25;compareCubicPlots (x2, v2, xq2,假的,“本身”)ylim ([-1.2 - 1.2])

在这种情况下,Akima导数x_5 = 5美元被替换为平均斜率d_5美元= \离开(\ delta_4 + \ delta_5 \右)/ 2 = 0.5美元。

但是我们还没有准备好!

我们应该从Akima平均公式的公式?如果斜坡几乎等于多少?

让我们改变上面的例子中,$ \ delta_5 = \ varepsilon $和$ \ delta_6 = - \ varepsilon通过设置v_6 = 1 + \ varepsilon美元美元,而美元\ varepsilon = 2 ^{-52}代表美元机ε。我们现在可以比较Akima的完整公式与平均公式d_5两美元数据集不同只有\ varepsilon:美元

% v2eps:新的数据集,只有不同的eps v2 (6)v2eps = v2;v2eps (6) = v2eps(6) +每股收益;情节(x2, v2,“柯”,“线宽”2,“MarkerSize”10“DisplayName的”,“输入数据v2”)举行情节(xq2 akima (x2, v2, xq2),“颜色”(1 2/3 0),“线宽”2,“DisplayName的”,“v2(6) = 1使用平均公式”)情节(xq2 akima (x2, v2eps, xq2),“-”。,“颜色”(1 2/3 0),“线宽”2,“DisplayName的”,“v2 (6) = 1 + eps使用Akima”年代公式)举行传奇(“位置”,“本身”)标题(“Akima interpolant(几乎)等于边坡的)ylim ([-1.2 - 1.2])

平均公式(实线)返回d_5 = 0.5美元而Akima导数的公式(虚线)返回d_5 = 1美元。因此,有一个多余的不小区别x_5 = 5美元左右两Akima interpolants,即使两个基础数据集不同只有\ varepsilon v_6 $美元美元。

要求(1)

我们不希望Akima interpolant切换到一个不同的边界情况的公式。

过度如果数据是恒定的连续超过两个节点

前面的例子是战略选择也透露的另一个属性Akima interpolant:如果数据是恒定的连续超过两个节点,像v_5 = v_6 = v_7 = 1美元在上一个示例中,然后Akima interpolant可能产生超调,即interpolant的波动(5 ~ 6)间隔超过美元。

这种特殊类型的过度在许多工程应用中是不可取的。

同样的问题保持低于出现在[2 ~ 3)间隔美元以上。

要求(2)

我们不希望Akima interpolant产生过度(或低于)当数据是恒定的连续超过两个节点。

修改Akima公式

在MATLAB中,“makima”三次埃尔米特插值地址需求(1)和(2)上面列出。

消除过度,避免边界情况的分子和分母都等于0,我们修改Akima的导数公式通过调整权重w_1 w_2美元美元的斜坡\ delta_美元张{}和$ \ delta_i:美元

$ $ d_i = \压裂{w_1} {w_1 + w_2} \ delta_张{}+ \压裂{w_2} {w_1 + w_2} \ delta_i \,, \四\四w_1 = | \ delta_ {i + 1} - \ delta_i | + | \ delta_ {i + 1} + \ delta_i | / 2 \四\四w_2 = | \ delta_张{}- \ delta_{我2}| + | \ delta_张{}+ \ delta_{我2}| / 2。$ $

这个修改后的公式表示“makima”导数公式中使用MATLAB:

  • 添加$ \左| \ delta_ {i + 1} + \ delta_i \ | / 2 $和$ \左| \ delta_张{}+ \ delta_{我2}\ | / 2条款部队d_i美元= 0时美元\ delta_i = \ delta_ {i + 1} = 0美元,即。d1美元= 0时v_i美元= v_ {i + 1} = v_{我+ 2}$。因此,消除过度当数据是恒定的连续超过两个节点。
  • 这些新术语也解决平等的边界情况的一面山坡上面所讨论的,美元\ delta_{我2}= \ delta_张{}$和$ \ delta_i = \ delta_ {i + 1} $。然而,有一个案例,通过:如果数据不变美元v_{我2}= v_张{}= v_i = v_ {i + 1} = v_{我+ 2}$,然后四个斜坡都等于零,我们得到$ d_i = \ mathrm{南}$。对于这个常数数据的特殊情况,我们组d_i = 0美元。

让我们试一试“makima”在上面的公式过度的例子:

compareCubicPlots (x2, v2, xq2,真的,“本身”)ylim ([-1.2 - 1.2])

的确,“makima”不产生超调,如果数据是恒定的超过两个节点(v_5 = v_6 = v_7 = 1美元以上)。

但是这是什么意思的起伏,我们看到在我们的第一个例子吗?

compareCubicPlots (x1, v1, xq1,真的,“不”)

请注意,“makima”与Akima密切遵循结果的公式。事实上,结果是如此相似,很难分辨他们的阴谋。

因此,“makima”仍然保留Akima可取的属性之间的一个中间立场样条的“pchip”由此产生的波动。

概括一天电网

但是我们还没有完成!

Akima公式和我们的修改“makima”公式有另一种可取的属性:他们推广到高维天网格数据。在1974年他Akima注意到这个属性

h . Akima“二元插值的方法和基于局部表面光滑拟合程序”,ACM通讯,诉丹麦队,p。18 - 20,1974年。

例如,美元在二维网格插入\离开(x, y \右)美元,我们首先应用“makima”导数公式分别在x和y获得美元美元为每个网格节点两方向导数。然后,我们也计算cross-derivative xy美元为每个网格节点。第一cross-derivative公式计算二维划分差异对应二维网格数据和应用“makima”这些差异沿着x美元导数公式;然后,需要结果和应用导数公式以及y美元。衍生品和cross-derivatives然后插入两变量的系数表示二维interpolant立方埃尔米特多项式。

同样的程序适用于高维天网格与n \通用电气2美元和需要计算所有可能的cross-directions cross-derivatives。因此,“makima”不仅在万博1manbetx支持interp1,而且在interp2,interp3,interpn,griddedInterpolant

的二维“makima”插值与二维样条的在生成网格数据的插值山峰功能:

(X1, Y1, V1 =山峰(5);[Xq1, Yq1] = meshgrid (3:0.1:3 3:0.1:3);Vqs1 = interp2 (X1, Y1, V1, Xq1, Yq1,样条的);冲浪(Xq1 Yq1 Vqs1)轴标题(”二维样条”)snapnow Vqm1 = interp2 (X1, Y1, V1, Xq1, Yq1,“makima”);冲浪(Xq1 Yq1 Vqm1)轴标题(“二维“makima””)

注意到小起伏(或摆动)生成的“makima”

最后,让我们试一试“makima”上一个例子和一些二维峰数据有锐利的边缘和步骤:

V2 = 0 (10);V2 (2:5, 2:5) = 3/7;%的第一步V2(者者)= (1/4 1/5;1/5 1/4);%的中间步骤V2 (8:9 8:9) = 1/2;%最后一步V2 =翻转(V2, 2);[Xq2, Yq2] = meshgrid (1:0.2:10 1:0.2:10);Vqs2 = interp2 (V2, Xq2 Yq2,样条的);冲浪(Xq2 Yq2 Vqs2)轴标题(”二维样条”)snapnow Vqm2 = interp2 (V2, Xq2 Yq2,“makima”);冲浪(Xq2 Yq2 Vqm2)轴标题(“二维“makima””)

“makima”结果小起伏(或摆动)样条。

总结

最后,我们总结的属性感兴趣的三个立方埃尔米特插值方法在MATLAB支持:万博1manbetx

摘要=表((“C2”;“使用所有点”;“Not-a-knot条件”;“是的”),(“C1”;“使用4点”;“单边坡”;“不”),(“C1”;“使用5点”;“二次推断”;“是的”),“VariableNames”,(“样条”“pchip”“makima”),“RowNames”,(“连续性”;“位置”;“终点”;“万博1manbetx支持一天”]);disp(总结)
花键pchip makima ______________________ _________________ _________________________连续性“C2”“C1”“C1”地区“使用所有点”“使用4点”“使用5点“端点”Not-a-knot条件”“单边坡”“二次推断”支持一天“是”“否”“是”万博1manbetx

代码

compareCubicPlots

函数compareCubicPlots (x, v, xq, showMakima legendLocation)%的阴谋pchip,花键,Akima, makima的插值结果vqp = pchip (x, v, xq);%一样vq = interp1 (x, v, xq, pchip)vq =花键(x, v, xq);%一样vq = interp1 (x, v, xq,样条)酒瓶= akima (x, v, xq);如果showMakima vqm = makima (x, v, xq);%一样vq = interp1 (x, v, xq, makima)结束情节(x, v,“柯”,“线宽”2,“MarkerSize”10“DisplayName的”,输入数据的)举行情节(vqp xq,“线宽”4“DisplayName的”,“pchip”)情节(xq,矢量量化,“线宽”2,“DisplayName的”,“样条”)情节(xq,酒瓶,“线宽”2,“DisplayName的”,Akima”年代公式)如果showMakima情节(vqm xq,“——”,“颜色”(3/4 0),“线宽”2,“DisplayName的”,“makima”)结束持有xticks (x (1) 1: x(结束)+ 1)传说(“位置”legendLocation)标题(“三次埃尔米特插值)结束

akima

函数vq = akima (x, v, xq)% AKIMA AKIMA分段立方埃尔米特插值。%% vq = AKIMA (x, v, xq)篡改数据(x, v) xq查询点%使用Akima立方埃尔米特插值公式。%%的引用:%% h . Akima”,插值和平滑的曲线拟合的新方法%根据当地程序”,JACM诉节,p。589 - 602年,1970年。%% AKIMA与PCHIP与花键:%%——Akima立方公式是花键之间的中间地带,PCHIP:%比花键lower-amplitude摆动,但没有攻击性%减少PCHIP摆动。%——Akima立方公式和花键推广天网格。%%的例子:比较AKIMA MAKIMA,花键,PCHIP%% x = (1 2 3 4 5 5.5 9.5 7 8 9 10];% v = [0 0 0 0.5 0.4 1.2 1.2 0.1 0.3 - 0.6);% xq = 0.75:0.05:10.25;% vq =花键(x, v, xq);% vqp = pchip (x, v, xq);%酒瓶= akima (x, v, xq);% vqm = makima (x, v, xq);%%图%的阴谋(x, v,“柯”,“线宽”,2,MarkerSize, 10),等等%的阴谋(vqp xq,“线宽”,4)%的阴谋(vq xq, xq,酒瓶,xq, vqm,“——”,“线宽”,2)%传奇(“数据”,“pchip””,“样条“”、“Akima”年代公式”,“‘makima“”)%的标题(“MATLAB三次埃尔米特插值”)%%也看到MAKIMA,花键,PCHIP。% mailto: cosmin.ionita@mathworks.com断言(isvector (x) & & isvector (v) & &(元素个数(x) = =元素个数(v)))断言(元素个数(x) > 2) x = x (:)。';v = v (:)。';%在pchip形状一样。m和spline.m%计算Akima斜坡h = diff (x);δ= diff (v) / h;斜坡= akimaSlopes(δ);%计算分段立方埃尔米特interpolantvq = ppval (pwch (x, v,山坡,h, delta), xq);结束

akimaSlopes

函数s = akimaSlopes(δ)% Akima立方埃尔米特插值的导数值在网格节点x % Akima导数估计(我)需要四个有限%的差异五个网格节点对应x(我2:我+ 2)。%%的边界网格节点(1:2)和x (n - 1: n),附加有限的差异%将对应于(1:0)和x (n + 1: n + 2)通过使用以下%偏心差公式correspondin二次推断使用定义的二次多项式数据% x (1:3)% (Akima的论文2.3节):n =元素个数(δ)+ 1;%的网格节点xdelta_0 = 2 *(1) -δ(2);delta_m1 = 2 * delta_0 -δ(1);delta_n = 2 * (n - 1) -δ(n - 2);delta_n1 = 2 * delta_n -δ(n - 1);δ= [delta_m1 delta_0三角洲delta_n delta_n1];% Akima导数估计公式(方程式(1)摘要):%% h . Akima”,插值和平滑的曲线拟合的新方法%根据当地程序”,JACM诉节,p。589 - 602年,1970年。%% s (i) = (| d - d (i + 1)(我)| * d(张)+ | d(张)- d(我2)| * d(我))% / (| d (i + 1) - d (i) | + | d(张)- d(我2)|)重量= abs (diff(δ));weights1 =重量(1:n);% | d - d(我2)|(张)weights2 =重量(3:结束);% | d (i + 1) - d(我)|delta1 =δ(2:n + 1);% d(张)delta2 =δ(3:n + 2);% d(我)weights12 = weights1 + weights2;s = (weights2. / weights12)。* delta1 + (weights1. / weights12)。* delta2;%,以避免0/0,Akima提出平均划分不同d(张)%和d (i)的边界情况(我2)= d(张)和d (i) = d (i + 1):印第安纳州= weights1 = = 0 & weights2 = = 0;(印第安纳州)= (delta1(印第安纳州)+ delta2(印第安纳州))/ 2;结束

makima

函数vq = makima (x, v, xq)% MAKIMA修改Akima分段立方埃尔米特插值。%%我们修改Akima公式消除过度和脱靶%当数据是恒定的连续超过两个节点。%% vq = MAKIMA (x, v, xq)篡改数据(x, v) xq查询点%使用修改后的Akima立方埃尔米特插值公式。%%的引用:%% h . Akima”,插值和平滑的曲线拟合的新方法%根据当地程序”,JACM诉节,p。589 - 602年,1970年。%% MAKIMA与PCHIP与花键:%% - MAKIMA是花键之间的中间地带,PCHIP:%比花键lower-amplitude摆动,但没有攻击性%减少PCHIP摆动。%——MAKIMA和花键概括到一天网格。%%的例子:不超过和低于MAKIMA数据时%常数连续超过两个节点%% x = 1:7;% v = (1 1 1 0 1 1 1);% xq = 0.75:0.05:7.25;% vq =花键(x, v, xq);% vqp = pchip (x, v, xq);%酒瓶= akima (x, v, xq);% vqm = makima (x, v, xq);%%图%的阴谋(x, v,“柯”,“线宽”,2,MarkerSize, 10),等等%的阴谋(vqp xq,“线宽”,4)%的阴谋(vq xq, xq,酒瓶,xq, vqm,“线宽”,2)%的传说(“数据”,“pchip”’,”样条“”、“Akima”年代公式”,…%”makima””、“位置”、“SE”)%标题(“makima”没有过度(1:3)和x (7)”)%%的例子:比较MAKIMA AKIMA,花键,PCHIP%% x = (1 2 3 4 5 5.5 9.5 7 8 9 10];% v = [0 0 0 0.5 0.4 1.2 1.2 0.1 0.3 - 0.6);% xq = 0.75:0.05:10.25;% vq =花键(x, v, xq);% vqp = pchip (x, v, xq);%酒瓶= akima (x, v, xq);% vqm = makima (x, v, xq);%%图%的阴谋(x, v,“柯”,“线宽”,2,MarkerSize, 10),等等%的阴谋(vqp xq,“线宽”,4)%的阴谋(vq xq, xq,酒瓶,xq, vqm,“——”,“线宽”,2)%传奇(“数据”,“pchip””,“样条“”、“Akima”年代公式”,“‘makima“”)%的标题(“MATLAB三次埃尔米特插值”)%%也看到AKIMA,花键,PCHIP。% mailto: cosmin.ionita@mathworks.com断言(isvector (x) & & isvector (v) & &(元素个数(x) = =元素个数(v)))断言(元素个数(x) > 2) x = x (:)。';v = v (:)。';%在pchip形状一样。m和spline.m%计算修改Akima斜坡h = diff (x);δ= diff (v) / h;斜坡= makimaSlopes(δ);%计算分段立方埃尔米特interpolantvq = ppval (pwch (x, v,山坡,h, delta), xq);结束

makimaSlopes

函数s = makimaSlopes(δ)%的导数值修改Akima立方埃尔米特插值在网格节点x % Akima导数估计(我)需要四个有限%的差异五个网格节点对应x(我2:我+ 2)。%%的边界网格节点(1:2)和x (n - 1: n),附加有限的差异%将对应于(1:0)和x (n + 1: n + 2)通过使用以下%偏心差公式correspondin二次推断使用定义的二次多项式数据% x (1:3)% (Akima的论文2.3节):n =元素个数(δ)+ 1;%的网格节点xdelta_0 = 2 *(1) -δ(2);delta_m1 = 2 * delta_0 -δ(1);delta_n = 2 * (n - 1) -δ(n - 2);delta_n1 = 2 * delta_n -δ(n - 1);δ= [delta_m1 delta_0三角洲delta_n delta_n1];% Akima导数估计公式(方程式(1)摘要):%% h . Akima”,插值和平滑的曲线拟合的新方法%根据当地程序”,JACM诉节,p。589 - 602年,1970年。%% s (i) = (| d - d (i + 1)(我)| * d(张)+ | d(张)- d(我2)| * d(我))% / (| d (i + 1) - d (i) | + | d(张)- d(我2)|)%%消除过度和脱靶当数据是恒定的%比连续两个节点,在MATLAB的我们修改Akima makima%的公式通过添加额外的平均权重。% s (i) = ((| d - d (i + 1)(我)| + | d (i + 1) + d (i) | / 2) * d(张)+% (| d(张)- d(我2)| + | d(张)+ d(我2)| / 2)* d (i))% / ((| d - d (i + 1)(我)| + | d (i + 1) + d (i) | / 2) +% (| d(张)- d(我2)| + | d(张)+ d(我2)| / 2)重量= abs (diff(δ))+ abs (((1: end-1) +δ(2:结束))/ 2);weights1 =重量(1:n);% | d - d(我2)|(张)weights2 =重量(3:结束);% | d (i + 1) - d(我)|delta1 =δ(2:n + 1);% d(张)delta2 =δ(3:n + 2);% d(我)weights12 = weights1 + weights2;s = (weights2. / weights12)。* delta1 + (weights1. / weights12)。* delta2;%如果数据是恒定的连续超过4个节点,然后%分母为零和的公式产生不必要的南的结果。%这南替换为0。s (weights12 = = 0) = 0;结束

版权2019年MathWorks公司。


发表与MATLAB®R2018b

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。