主要内容

makima

改进的Akima分段三次Hermite插值

描述

例子

yq= makima (xyxq执行修改Akima插值使用的值y在采样点x求插值值yq在查询点xq

例子

= makima (xy返回使用的分段多项式结构ppval以及样条函数unmkpp

例子

全部折叠

使用makima在非均匀间隔的采样点上插值余弦曲线。

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,“——”

图中包含一个轴对象。轴对象包含两个类型为line的对象。

对于振荡函数,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,“——”

图中包含一个轴对象。轴对象包含两个类型为line的对象。

比较产生的插值结果样条pchip,makima对于两个不同的数据集。这些函数都执行不同形式的分段三次埃尔米特插值。每个函数计算插值函数斜率的方式都不同,当底层数据有平坦区域或波动区域时,会导致不同的行为。

比较连接平坦区域的样本数据的插值结果。创建向量x这些点上的函数值y、查询点xq.使用样条pchip,makima.在查询点绘制内插函数值以进行比较。

x =三3;Y = [-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”“位置”“东南”

图中包含一个轴对象。轴对象包含4个类型为line的对象。这些对象代表样本点,pchip,样条,makima。

在这种情况下,pchipmakima有相似的行为,他们避免过冲,并能准确地连接平坦区域。

使用振荡样本函数进行第二次比较。

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”

图中包含一个轴对象。轴对象包含4个类型为line的对象。这些对象代表样本点,pchip,样条,makima。

当基础函数是振荡的,样条makima捕捉点之间的移动比pchip,它在局部极值附近急剧变平。

为采样点创建向量x以及这些点上的值y.使用makima为数据构造一个分段多项式结构。

x = 5;Y = [1 1 1 0 0 1 1 2 2 2];页= makima (x, y)
页=结构体字段:形式:'pp' break: [-5 -4 -3 -2 -1 0 1 2 3 4 5] coefs: [10x4 double] pieces: 10 order: 4 dim: 1

该结构包含跨数据的10个4阶多项式的信息。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])

图中包含一个轴对象。轴对象包含两个类型为line的对象。

输入参数

全部折叠

采样点,指定为向量。向量x指定数据所在的点y是给定的。的元素x必须是唯一的。

数据类型:|

采样点上的函数值,指定为数字向量、矩阵或数组。xy长度必须相同。

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

数据类型:|

查询点,指定为标量、向量、矩阵或数组。在xqx-坐标的插值函数值yq计算makima

数据类型:|

输出参数

全部折叠

查询点上的插值值,以标量、向量、矩阵或数组的形式返回。的大小yq是否与尺寸有关yxq

  • 如果y是向量吗yq有相同的尺寸xq

  • 如果y数组是否有大小纽约=大小(y),则适用以下条件:

    • 如果xq是标量还是向量大小(yq)返回纽约(1:end-1)长度(xq)]

    • 如果xq是一个数组吗大小(yq)返回纽约(1:end-1)大小(xq)]

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

描述
形式

“页”分段多项式

休息时间

向量的长度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,藤原浩。“一种基于局部程序的插值和平滑曲线拟合的新方法。”美国计算机学会杂志, 1970年,第589-602页。

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

扩展功能

介绍了R2019b