马克马

改进的Akima分段三次Hermite插值

描述

例子

yq= makima(XyXQ.施行修改Akima插值使用的值y在采样点X求插值值yq在查询点XQ.

例子

PP.= makima(Xy返回一个分段多项式结构,用于使用ppval和花键实用程序unmkpp

例子

全部折叠

马克马以在不均匀的间隔的样品点内插入余弦曲线。

x = [0 1 2.5 3.6 5 7 8.1 10];y = cos(x);XQ = 0:.25:10;yq = makima(x,y,xq);绘图(x,y,“o”,xq,yq,“——”

对于振荡函数,Akima算法在局部极值附近使曲线平坦。为了补偿这种扁平化,可以在局部极值附近添加更多的采样点。

添加样本点附近 X = 6. 5. X = 9. 并重新插补。

X = [0 1 2.5 3.6 5 6.5 7 8.1 9 10];y = cos(x);XQ = 0:.25:10;yq = makima(x,y,xq);绘图(x,y,“o”,xq,yq,“——”

比较产生的插值结果样条PCHIP.,马克马对于两个不同的数据集。这些功能都执行不同形式的分段立方Hermite插值。当底层数据具有平坦的区域或起伏时,每个功能都与其计算内插的斜率的不同之处。

将插值结果与连接平面区域连接的样本数据进行比较。创建向量X这些点上的函数值y和查询点XQ..使用查询点计算插值样条PCHIP.,马克马.在查询点绘制内插函数值以进行比较。

x = -3:3;Y = [-1 -1 -1 0 1 1 1];XQ1 = -3:.01:3;p = pchip(x,y,xq1);s =样条曲线(x,y,xq1);m = makima(x,y,xq1);绘图(x,y,“o”,xq1,p,' - 'xq1年代,“-”。,xq1,m,“——”) 传奇('样本点''pchip'样条的“makima”“位置”“东南”

在这种情况下,PCHIP.马克马具有类似的行为,因为它们避免过冲,可以准确地连接平面区域。

使用振荡样本功能执行第二个比较。

x = 0:15;y = besselj (1, x);xq2 = 0:0.01:15;p = pchip (x, y, xq2);s =花键(x, y, xq2);m = makima (x, y, xq2);绘图(x,y,“o”xq2, p,' - 'xq2年代,“-”。,xq2,m,“——”) 传奇('样本点''pchip'样条的“makima”

当基础函数是振荡的,样条马克马捕捉点之间的运动比PCHIP.,在局部极值附近积极平坦化。

为样本点创建向量X这些点的价值观y.用马克马为数据构造一个分段多项式结构。

x = 5;Y = [1 1 1 0 0 1 1 2 2 2];页= makima (x, y)
PP =结构体字段:形式:'PP'断裂:[-5 -4 -3 -2 -1 0 1 2 3 4 5] cofs:[10x4双]件:10次:4暗淡:1

该结构包含用于跨越数据的10个多项式的10多项式的信息。pp.coefs(我,:)包含在断点定义的区域中有效的多项式的系数((我)(i + 1)休息)

使用结构ppval计算多个查询点的插值值,然后绘制结果。在有三个或更多常数点的区域,Akima算法用一条直线连接这些点。

xq = 5:0.2:5;m = ppval (pp、xq);绘图(x,y,“o”xq, m,“-”。)ylim([ -  0.2 2.2])

输入参数

全部折叠

样本点,指定为向量。矢量X指定数据的点y是给定的。的元素X必须是唯一的。

数据类型:单身的|

采样点的功能值,指定为数字矢量,矩阵或数组。Xy必须具有相同的长度。

如果y是一个矩阵或数组,则最后一维中的值,Y(:...,:,j),作为要匹配的值X.在这种情况下,最后一个维度y长度必须和X

数据类型:单身的|

查询点,指定为标量,矢量,矩阵或数组。指定的要点XQ.X-Orcoordate用于内插功能值yq计算马克马

数据类型:单身的|

输出参数

全部折叠

查询点处的内插值,返回标量,向量,矩阵或数组。的大小yq与大小有关yXQ.

  • 如果y是向量吗yq具有相同的尺寸XQ.

  • 如果y数组是否有大小纽约=大小(y),那么这些条件适用:

    • 如果XQ.是标量还是向量尺寸(yq)回报纽约(1:end-1)长度(xq)]

    • 如果XQ.是一个数组,然后是尺寸(yq)回报纽约(1:end-1)大小(xq)]

分段多项式,作为结构返回。使用这种结构ppval函数对一个或多个查询点的插值多项式求值。结构有这些字段。

场地 描述
形式

'pp'为了分段多项式

休息

向量的长度L + 1严格增加元素,代表每个的开始和结束L.时间间隔

系数

L.——- - - - - -K.矩阵与每一行系数(我,:)含有一阶局部系数的K.多项式的一世th间隔,[休息(我),优惠(i + 1)

件数,L.

订单

多项式的阶

暗淡

目标的维度

因为多项式系数系数是每个区间的局部系数,你必须减去对应的结区间的下端点才能使用传统多项式方程中的系数。换句话说,对于系数[A B C D]在间隔上[x1,x2],对应的多项式是

F X = 一种 X - X 1 3. + B. X - X 1 2 + C X - X 1 + D.

更多关于

全部折叠

修改Akima插值

Akima算法对于一维插值,描述于[1][2],执行立方插值以产生具有连续一阶衍生物(C1)的分段多项式。该算法避免过多的局部起伏。

如果 δ 一世 = V. 一世 + 1 - V. 一世 X 一世 + 1 - X 一世 斜率是在区间上吗 [ X 一世 X 一世 + 1 ,然后是导数的值 D. 一世 在样本点 X 一世 是附近斜坡的加权平均值:

D. 一世 = W. 1 W. 1 + W. 2 δ 一世 - 1 + W. 2 W. 1 + W. 2 δ 一世

在Akima的原始公式中,权重为:

W. 1 = | δ 一世 + 1 - δ 一世 | W. 2 = | δ 一世 - 1 - δ 一世 - 2 |

原始Akima算法对两侧的点提供平等的重量,均匀地划分波动。

当两个斜率不同的平坦区域相遇时,对原Akima算法进行的修改会给斜率更接近于零的一侧赋予更多的权重。这一修改将优先考虑更接近水平的一侧,这更直观,并避免超调。特别地,当有三个或三个以上连续共线点时,算法用一条直线将它们连接起来,从而避免了超调。

修改的Akima算法中使用的权重是:

W. 1 = | δ 一世 + 1 - δ 一世 | + | δ 一世 + 1 + δ 一世 | 2 W. 2 = | δ 一世 - 1 - δ 一世 - 2 | + | δ 一世 - 1 + δ 一世 - 2 | 2

与这一点相比样条算法中,Akima算法产生的波动更少,更适合处理平坦区域之间的快速变化。与这一点相比PCHIP.算法,Akima算法不像展开趋势,因此仍然能够处理振荡数据。

参考文献

[1] Akima,藤原浩。“一种基于局部程序的插值和平滑曲线拟合的新方法。”ACM(JACM)杂志,17.4,970,pp。589-602。

[2] Akima,藤原浩。“一种基于局部程序的二元插值和光滑表面拟合方法。”ACM的通信,17.1,1974,第18-20页。

在R2019B中介绍