Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

interp3

meshgrid 格式的三维网格数据的插值

说明

示例

Vq = interp3(X,Y,Z,V,Xq,Yq,Zq) 使用线性插值返回三变量函数在特定查询点的插值。结果始终穿过函数的原始采样。XYZ 包含样本点的坐标。V 包含各样本点处的对应函数值。XqYqZq 包含查询点的坐标。

Vq = interp3(V,Xq,Yq,Zq) 假定一个默认的样本点网格。默认网格点覆盖区域 X=1:nY=1:mZ=1:p,其中 [m,n,p] = size(V)。如果您希望节省内存且不在意点之间的绝对距离,则可使用此语法。

Vq = interp3(V) 将每个维度上样本值之间的间隔分割一次,形成细化网格,并基于该网格上返回插入值。

Vq = interp3(V,k) 将每个维度上样本值之间的间隔反复分割 k 次,形成细化网格,并基于该网格上返回插入值。这将在样本值之间生成 2^k-1 个插值点。

示例

Vq = interp3(___,method) 指定备选插值方法:'linear''nearest''cubic''makima''spline'。默认方法为 'linear'

示例

Vq = interp3(___,method,extrapval) 还指定标量值 extrapval,此参数会为处于样本点域范围外的所有查询点赋予该标量值。

如果您为样本点域范围外的查询省略 extrapval 参数,则基于 method 参数,interp3 返回下列值之一:

  • 对于 'spline''makima' 方法,返回外插值

  • 对于其他内插方法,返回 NaN

示例

全部折叠

加载 flow 函数的点和值,每个维度采样 10 个点。

[X,Y,Z,V] = flow(10);

flow 函数通过数组 XYZ 返回网格。该网格覆盖区域 0.1X10-3Y3-3Z3,间距为 ΔX=0.5ΔY=0.7ΔZ=0.7

现在,绘制穿过以下样本体的切片:X=6X=9Y=2Z=0

figure
slice(X,Y,Z,V,[6 9],2,0);
shading flat

Figure contains an axes object. The axes object contains 4 objects of type surface.

创建间距为 0.25 的查询网格。

[Xq,Yq,Zq] = meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);

对查询网格中的点插值,并使用相同的切片平面绘制结果。

Vq = interp3(X,Y,Z,V,Xq,Yq,Zq);
figure
slice(Xq,Yq,Zq,Vq,[6 9],2,0);
shading flat

Figure contains an axes object. The axes object contains 4 objects of type surface.

加载 flow 函数的点和值,每个维度采样 10 个点。

[X,Y,Z,V] = flow(10);

flow 函数通过数组 XYZ 返回网格。该网格覆盖区域 0.1X10-3Y3-3Z3,间距为 ΔX=0.5ΔY=0.7ΔZ=0.7

绘制穿过以下样本体的切片:X=6X=9Y=2Z =0

figure
slice(X,Y,Z,V,[6 9],2,0);
shading flat

Figure contains an axes object. The axes object contains 4 objects of type surface.

创建间距为 0.25 的查询网格。

[Xq,Yq,Zq] = meshgrid(.1:.25:10,-3:.25:3,-3:.25:3);

使用 'cubic' 插值方法在查询网格点处插值。然后,绘制结果。

Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,'cubic');
figure
slice(Xq,Yq,Zq,Vq,[6 9],2,0);
shading flat

Figure contains an axes object. The axes object contains 4 objects of type surface.

创建网格向量 xyz。这些向量用于定义与 V 中的值相关联的点。

x = 1:100;
y = (1:50)';
z = 1:30;

将样本值定义为一个 50×100×30 的随机数数组 V。使用 rand 函数创建数组。

rng('default')
V = rand(50,100,30);

计算 xyz 域范围外三个点处的 V。指定 extrapval = -1

xq = [0 0 0];
yq = [0 0 51];
zq = [0 101 102];
vq = interp3(x,y,z,V,xq,yq,zq,'linear',-1)
vq = 1×3

    -1    -1    -1

三个点计算得到的值均为 -1,因为它们位于 xyz 域之外。

输入参数

全部折叠

样本网格点,指定为实数数组或向量。样本网格点必须是唯一的。

示例: [X,Y,Z] = meshgrid(1:30,-10:10,1:5)

数据类型: single | double

样本值,指定为实数或复数数组。V 的大小要求取决于 XYZ 的大小:

  • 如果 XYZ 是表示完整网格(meshgrid 格式)的数组,则 V 的大小与 XYZ 的大小匹配。

  • 如果 XYZ 是网格向量,则 size(V) = [length(Y) length(X) length(Z)]

如果 V 包含复数,则 interp3 将分别对实部和虚部插值。

示例: rand(10,10,10)

数据类型: single | double
复数支持:

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

  • 如果 XqYqZq 是标量,则为 R3 中单个查询点的坐标。

  • 如果 XqYqZq 是方向不同的向量,则 XqYqZq 将被视作 R3 中的网格向量。

  • 如果 XqYqZq 是大小和方向都相同的向量,则 XqYqZq 将被视作 R3 中的散点

  • 如果 XqYqZq 是大小相同的数组,则表示 R3 中由查询点构成的一个完整网格(meshgrid 格式)或多个散点。

示例: [Xq,Yq,Zq] = meshgrid((1:0.1:10),(-5:0.1:0),3:5)

数据类型: single | double

细化因子,指定为非负实整数标量。此值指定对每个维度上网格点之间的间隔重复分割优化的次数。这将在样本值之间生成 2^k-1 个插值点。

如果 k0,则 VqV 相同。

interp3(V,1)interp3(V) 相同。

下面的插图描绘了在 R3 的一个平面上,k=2 时的情形。共有 72 个插入值(以红色表示)和 9 个样本值(以黑色表示)。

Nine sample points in a grid with three interpolated points between the sample points in each dimension

示例: interp3(V,2)

数据类型: single | double

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

方法描述连续性注释
'linear'查询点处的插入值基于各维中邻近网格点处数值的线性插值。这是默认插值方法。C0
  • 每个维度需要至少两个网格点

  • 'nearest' 需要更多内存

'nearest'查询点处的插入值是距样本网格点最近的值。 不连续
  • 每个维度需要两个网格点

  • 内存要求最低,计算速度最快

'cubic'查询点处的插入值基于各维中邻近网格点处数值的三次插值。插值基于三次卷积。C1
  • 每个维度中的网格必须有均匀间距,但并非所有维度的网格间距都必须相同

  • 每个维度需要至少四个点

  • 'linear' 需要更多内存和计算时间

'makima'修正 Akima 三次 Hermite 插值。查询点的插入值使用次数最大为 3 的分段多项式函数基于各维中邻近网格点的值进行计算而得。为防过冲,已修正 Akima 公式。C1
  • 每一维需要至少 2 个点。

  • 产生的波动比 'spline'

  • 计算时间通常少于 'spline',但内存要求类似

'spline'查询点处的插入值基于各维中邻近网格点处数值的三次插值。插值基于使用非节点终止条件的三次样条。C2
  • 每个维度需要四个点

  • 'cubic' 需要更多内存和计算时间

XYZ 域范围外的函数值,指定为实数或复数标量。interp3XYZ 域范围外的所有点返回此常量值。

示例: 5

示例: 5+1i

数据类型: single | double
复数支持:

输出参数

全部折叠

插入的值,以实数或复数标量、向量或数组的形式返回。Vq 的大小和形状取决于所用的语法以及(某些情况下)输入参数的大小和值。

语法特殊条件Vq 的大小示例
interp3(X,Y,Z,V,Xq,Yq,Zq)
interp3(V,Xq,Yq,Zq)
以及包含 methodextrapval 的这些语法的变体
XqYqZq 是标量。标量XqYqZq 作为标量传递时,size(Vq) = [1 1]
同上XqYqZq 是大小和方向都相同的向量。大小和方向与 XqYqZq 相同的向量如果 size(Xq) = [100 1]
size(Yq) = [100 1]
size(Zq) = [100 1]
size(Vq) = [100 1]
同上XqYqZq 是混合方向的向量。size(Vq) = [length(Y) length(X) length(Z)]如果 size(Xq) = [1 100]
size(Yq) = [50 1]
size(Zq) = [1 5]
size(Vq) = [50 100 5]
同上XqYqZq 是大小相同的数组。大小与 XqYqZq 相同的数组如果 size(Xq) = [50 25]
size(Yq) = [50 25]
size(Zq) = [50 25]
size(Vq) = [50 25]
method 以及包含 extrapvalinterp3(V,k)
的此语法的变体

i 个维度的长度为
2^k * (size(V,i)-1)+1 的数组

如果 size(V) = [10 12 5]
k = 3
size(Vq) = [73 89 33]

详细信息

全部折叠

严格单调

一组始终递减或递增且无反转的值。例如,序列 a = [2 4 6 8] 便是一个严格单调递增的序列。序列 b = [2 4 4 6 8] 则非严格单调,因为 b(2)b(3) 之间的值无变化。而序列 c = [2 4 6 8 6]c(4)c(5) 之间包含反转,因此连单调序列也不是。

完整网格(meshgrid 格式)

interp3 而言,完整网格包含三个数组,其元素是一些网格点,用来定义 R3 中的区域。第一个数组包含 x 坐标,第二个数组包含 y 坐标,第三个数组包含 z 坐标。每个数组中的值沿单个维度会有所不同,而沿其他维度则为常量。

x 数组中的值严格单调递增,且沿第二个维度变化。y 数组中的值严格单调递增,且沿第一个维度变化。z 数组中的值严格单调递增,且沿第三个维度变化。使用 meshgrid 函数创建可传递至 interp3 的完整网格。

网格向量

interp3 而言,网格向量由三个具有混合方向的向量组成,这些向量用来定义 R3 中的网格点。

例如,以下代码便为区域 1 ≤ x ≤ 3、4 ≤ y ≤ 5 和 6 ≤ z ≤ 8 创建了一个网格向量:

x = 1:3;
y = (4:5)';
z = 6:8;

散点

interp3 而言,散点由三个用来定义 R3 散点集合的数组或向量 XqYqZq 组成。第 i 个数组包含第 i 个维度的坐标。

例如,以下代码便指定了点 (1, 19, 10)、(6, 40, 1)、(15, 33, 22) 和 (0, 61, 13)。

Xq = [1 6; 15 0];
Yq = [19 40; 33 61];
Zq = [10 1; 22 13];

扩展功能

版本历史记录

在 R2006a 之前推出

另请参阅

| | |