主要内容

interp1

一维数据插值(查表)

描述

例子

矢量量化= interp1 (xvxq使用线性插值返回特定查询点上1-D函数的插值值。向量x包含样本点和v包含相应的值,vx).向量xq包含查询点的坐标。

如果在同一点坐标上采样了多组数据,则可以通过v作为一个数组。数组的每一列v包含一组不同的1-D样本值。

例子

矢量量化= interp1 (xvxq方法指定一个可选的插值方法:“线性”“最近的”“下一个”“以前”“pchip”“立方”“v5cubic”“makima”,或样条的.默认方法为“线性”

例子

矢量量化= interp1 (xvxq方法外推法的域之外的点的计算策略x.集外推法“extrap”当你想使用方法外推的算法。或者,您可以指定一个标量值,在这种情况下,interp1的定义域外的所有点返回该值x

例子

矢量量化= interp1 (vxq返回插值值,并假定样本点坐标为默认集合。默认点是来自的数字序列1n,在那里n取决于形状v:

  • 当v是一个向量时,默认的点是1:长度(v)

  • 当v是一个数组时,默认点为1:尺寸(v, 1)

当您不关心点之间的绝对距离时,请使用此语法。

矢量量化= interp1 (vxq方法指定任何可选插值方法,并使用默认采样点。

矢量量化= interp1 (vxq方法外推法指定外推策略并使用默认抽样点。

= interp1 (xv方法“页”)的分段多项式形式vx)使用方法算法。

请注意

不推荐使用此语法。使用griddedInterpolant代替。

例子

全部折叠

定义样本点,x,和对应的样本值,v

X = 0:pi/4:2*pi;V = sin(x);

将查询点定义为范围内的更细抽样x

Xq = 0:pi/16:2*pi;

在查询点插入函数并绘制结果。

图vq1 = interp1(x,v,xq);情节(x, v,“o”xq vq1,“:”。);xlim([0 2 *π]);标题('(默认)线性插值');

图中包含一个轴对象。标题为Linear Interpolation的axis对象(默认值)包含2个类型为line的对象。

现在评估v在相同的点上使用样条的方法。

图vq2 = interp1(x,v,xq,样条的);情节(x, v,“o”xq vq2,“:”。);xlim([0 2 *π]);标题(样条插值的);

图中包含一个轴对象。标题为Spline Interpolation的axis对象包含2个类型为line的对象。

定义一组函数值。

V = [0 1.41 2 1.41 0 -1.41 -2 -1.41 0];

定义一组位于默认点之间的查询点,1:9.在本例中,默认点为1:9因为v包含9值。

Xq = 1.5:8.5;

评估vxq

Vq = interp1(v,xq);

画出结果。

图绘制((1:9),v,“o”xq矢量量化,‘*’);传奇(“v”矢量量化的);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些向量表示v vq。

定义一组样本点。

X = 1:10;

定义函数的值, v x 5 x + x 2 ,在样本点上。

V = (5*x)+(x.^2*1i);

将查询点定义为范围内的更细抽样x

Xq = 1:0.25:10;

插入v在查询点。

Vq = interp1(x,v,xq);

用红色表示结果的实部,用蓝色表示虚部。

图绘制(x,真正的(v),“* r”xq,真实(vq),“- r”);持有情节(x,图像放大(v),‘* b”xq,图像放大(vq),“- b”);

图中包含一个轴对象。axis对象包含4个line类型的对象。

插值时间戳数据点。

考虑一个包含每四小时测量一次的温度读数的数据集。用一天的数据创建一个表并绘制数据图。

x = (datetime(2016、1、1):小时(4):datetime(2016年1、2)';x.Format =“MMM dd, HH:mm”;T = [31 25 24 41 43 33 31]';天气数据=表(x,T,“VariableNames”, {“时间”“温度”})
WeatherData =7×2表时间温度_____________ ___________ 1月1日,1月31日00:00,1月25日04:00,1月24日08:00,1月01日12:00,1月41日16:00 43日,1月02日20:00 33日,00:00 31
情节(WeatherData。时间,WeatherData。温度,“o”

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

插值数据集来预测一天中每分钟的温度读数。由于数据是周期性的,所以使用样条的插值方法。

Xq = (datetime(2016,1,1):minutes(1):datetime(2016,1,2))';V = interp1(天气数据。时间,WeatherData。温度,xq,样条的);

绘制插值点。

持有情节(xq, V,“r”

图中包含一个轴对象。axis对象包含2个line类型的对象。

定义样本点,x,和对应的样本值,v

X = [1 2 3 4 5];V = [12 16 31 10 6];

指定查询点,xq的范围之外x

Xq = [0 0.5 1.5 5.5 6];

评估vxq使用“pchip”方法。

Vq1 = interp1(x,v,xq,“pchip”
vq1 =1×519.3684 13.6316 13.2105 7.4800 12.5600

接下来,评估vxq使用“线性”方法。

Vq2 = interp1(x,v,xq,“线性”
vq2 =1×5南南14南南

现在,使用“线性”方法。“extrap”选择。

Vq3 = interp1(x,v,xq,“线性”“extrap”
vq3 =1×58 10 14 4 2

“pchip”默认是推断,但是“线性”没有。

定义样本点,x,和对应的样本值,v

X = [-3 -2 -1 0 1 2 3];V = 3*x.^2;

指定查询点,xq的范围之外x

Xq = [-4 -2.5 -0.5 0.5 2.5 4];

现在评估vxq使用“pchip”方法的域之外的任何值x对于这个值,27

Vq = interp1(x,v,xq,“pchip”, 27)
vq =1×627.0000 18.6562 0.9375 0.9375 18.6562 27.0000

定义样本点。

X = (-5:5)';

在定义的点处选取三个不同的抛物线函数x

V1 = x.^2;V2 = 2*x。^2 + 2;V3 = 3*x。^2 + 4;

创建矩阵v,它的列是向量,v1v2,v3

V = [v1 v2 v3];

定义一组查询点,xq的范围内进行更精细的采样x

Xq = -5:0.1:5;

计算所有三个函数xq然后画出结果。

Vq = interp1(x,v,xq,“pchip”);图绘制(x, v,“o”xq, vq);H = gca;h.XTick = -5:5;

图中包含一个轴对象。axis对象包含6个line类型的对象。

图中的圆圈表示v,实线表示矢量量化

输入参数

全部折叠

抽样点,指定为实数的行向量或列向量。中的值x必须是不同的。的长度x必须符合下列要求之一:

  • 如果v是向量吗长度(x)必须等于长度(v)

  • 如果v是数组吗长度(x)必须等于大小(v, 1)

例子:[1 2 3 4 5 6 7 8 9 10]

例子:1:10

例子:[3 7 11 15 19 23 27 31]'

数据类型:||持续时间|datetime

样例值,指定为向量、矩阵或实数或复数数组。如果v是一个矩阵或数组,那么每一列包含一组单独的一维值。

如果v那么,它包含复数interp1分别插值实部和虚部。

例子:兰德(10)

例子:兰特(10,1)

例子:兰特(10,3)

数据类型:||持续时间|datetime
复数支持:金宝app是的

查询点,指定为标量、向量、矩阵或实数数组。

例子:5

例子:1:0.05:10

例子:(1:0.05:10) '

例子:[0 1 2 7.5 10]

数据类型:||持续时间|datetime

插值方法,指定为本表中的选项之一。

方法

描述

连续性

评论

“线性”

线性插值。查询点上的插值值基于每个维度上相邻网格点上的值的线性插值。这是默认的插值方法。

C0

  • 要求至少2分

  • 需要比最近邻居更多的内存和计算时间

“最近的”

最近邻插值。查询点上的插值值是最近的样本网格点上的值。

不连续

  • 要求至少2分

  • 适度的内存需求

  • 最快计算时间

“下一个”

下一个邻居插值。查询点的内插值是下一个样本网格点的值。

不连续

  • 要求至少2分

  • 相同的内存要求和计算时间“最近的”

“以前”

以前的邻居插值。查询点上的插值值是前一个样例网格点上的值。

不连续

  • 要求至少2分

  • 相同的内存要求和计算时间“最近的”

“pchip”

保形分段三次插值。查询点上的插值值基于相邻网格点上的值保持形状的分段三次插值。

C1

  • 要求至少4分

  • 需要更多的内存和计算时间“线性”

“立方”

三次卷积在MATLAB中的应用®5.

C1

  • 要求至少3分

  • 点必须均匀间隔

  • 此方法可追溯到样条的不规则间隔数据的插值

  • 内存需求和计算时间与“pchip”

“v5cubic”

一样“立方”

C1

“makima”

改进的Akima立方Hermite插值。在查询点上的插值值基于阶最多为3的多项式分段函数。Akima公式被修改以避免超调。

C1

  • 要求至少2分

  • 产生的波动比样条的,但不会像“pchip”

  • 计算比“pchip”,但通常小于样条的

  • 内存需求类似于样条的

样条的

样条插值使用非结结束条件。查询点上的插值值基于每个维度中相邻网格点上的值的三次插值。

C2

  • 要求至少4分

  • 需要更多的内存和计算时间“pchip”

外推策略,指定为“extrap”或者一个实标量。

  • 指定“extrap”当你想要interp1用它用于插值的相同方法来计算域外的点。

  • 需要时指定标量值interp1为域外的点返回特定的常数值。

默认行为取决于输入参数:

  • 如果您指定“pchip”样条的,或“makima”插值方法,则默认行为为“extrap”

  • 所有其他插值方法返回默认情况下,用于域外的查询点。

例子:“extrap”

例子:5

数据类型:字符|字符串||

输出参数

全部折叠

内插值,返回为标量、向量、矩阵或数组。的大小矢量量化取决于形状v而且xq

v形 xq的形状 Vq大小 例子
向量 向量 大小(xq) 如果尺寸(v) = [1 100]
而且Size (xq) = [1 500]
然后Size (vq) = [1 500]
向量 矩阵
或N-D数组
大小(xq) 如果尺寸(v) = [1 100]
而且Size (xq) = [5030]
然后Size (vq) = [50 30]
矩阵
或N-D数组
向量 [长度(xq)大小(v, 2),…,大小(v, n)) 如果尺寸(v) = [100 3]
而且Size (xq) = [1 500]
然后Size (vq) = [500 3]
矩阵
或N-D数组
矩阵
或N-D数组
(尺寸(xq, 1),…,大小(xq, n),…大小(v, 2),…,大小(v, m)] 如果尺寸(v) = [4 5 6]
而且Size (xq) = [2 3 7]
然后Size (vq) = [2 3 7 5 6]

分段多项式,作为结构返回,你可以传递给ppval用于求值的函数。

更多关于

全部折叠

Akima和样条插值

Akima算法对于一维插值,在[1]而且[2],执行三次插值生成连续一阶导数分段多项式(C1)。该算法保留了坡度,避免了平坦区域的波动。当有三个或更多的连续共线点时,就会出现平坦区域,算法将它们与一条直线连接起来。为了确保两个数据点之间的区域是平坦的,在这两个数据点之间插入一个额外的数据点。

当两个具有不同斜率的平坦区域相遇时,对原始Akima算法的修改使斜率更接近于零的一侧得到更多的权重。这种修改优先考虑更接近水平的一侧,更直观,避免了超调。(原来的Akima算法给两边的点赋予了相等的权重,从而均匀地划分波动。)

样条算法,另一方面,执行三次插值,以产生连续二阶导数的分段多项式(C2)。该结果与正则多项式插值相当,但不太容易受到高程度数据点之间剧烈振荡的影响。不过,这种方法可能容易受到数据点之间的超调和振荡的影响。

与样条算法相比,Akima算法产生的波动更少,更适合处理平坦区域之间的快速变化。下面使用连接多个平面区域的测试数据说明了这种差异。

具有多个平坦区域的1-D测试数据图。样条算法在平坦区域产生波动,而Akima算法平滑地连接点。

参考文献

[1]秋岛,浩。“一种基于局部程序的插值平滑曲线拟合新方法。”美国ACM杂志(JACM)《中国科学》,1970年第17期,第589-602页。

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

扩展功能

版本历史

R2006a之前介绍

全部展开