MATLAB 帮助中心
meshgrid 格式的三维网格数据的插值
Vq = interp3(X,Y,Z,V,Xq,Yq,Zq)
Vq = interp3(V,Xq,Yq,Zq)
Vq = interp3(V)
Vq = interp3(V,k)
Vq = interp3(___,method)
Vq = interp3(___,method,extrapval)
Vq = interp3(X,Y,Z,V,Xq,Yq,Zq) 使用线性插值返回三变量函数在特定查询点的插值。结果始终穿过函数的原始采样。X、Y 和 Z 包含样本点的坐标。V 包含各样本点处的对应函数值。Xq、Yq 和 Zq 包含查询点的坐标。
Vq
X,Y,Z
V
Xq,Yq,Zq
X
Y
Z
Xq
Yq
Zq
示例
Vq = interp3(V,Xq,Yq,Zq) 假定一个默认的样本点网格。默认网格点覆盖区域 X=1:n、Y=1:m 和 Z=1:p,其中 [m,n,p] = size(V)。如果您希望节省内存且不在意点之间的绝对距离,则可使用此语法。
X=1:n
Y=1:m
Z=1:p
[m,n,p] = size(V)
Vq = interp3(V) 将每个维度上样本值之间的间隔分割一次,形成细化网格,并基于该网格上返回插入值。
Vq = interp3(V,k) 将每个维度上样本值之间的间隔反复分割 k 次,形成细化网格,并基于该网格上返回插入值。这将在样本值之间生成 2^k-1 个插值点。
k
2^k-1
Vq = interp3(___,method) 指定备选插值方法:'linear'、'nearest'、'cubic'、'makima' 或 'spline'。默认方法为 'linear'。
method
'linear'
'nearest'
'cubic'
'makima'
'spline'
Vq = interp3(___,method,extrapval) 还指定标量值 extrapval,此参数会为处于样本点域范围外的所有查询点赋予该标量值。
extrapval
如果您为样本点域范围外的查询省略 extrapval 参量,则基于 method 参量,interp3 返回下列值之一:
interp3
对于 'spline' 和 'makima' 方法,返回外插值
对于其他内插方法,返回 NaN 值
NaN
全部折叠
加载 flow 函数的点和值,每个维度采样 10 个点。
[X,Y,Z,V] = flow(10);
flow 函数通过数组 X、Y 和 Z 返回网格。该网格覆盖区域 0.1≤X≤10、-3≤Y≤3、-3≤Z≤3,间距为 ΔX=0.5、ΔY=0.7 和 ΔZ=0.7。
flow
现在,绘制穿过以下样本体的切片:X=6、X=9、Y=2 和 Z=0。
X=6
X=9
Y=2
Z=0
figure slice(X,Y,Z,V,[6 9],2,0); shading flat
创建间距为 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
绘制穿过以下样本体的切片:X=6、X=9、Y=2 和 Z =0。
Z =0
使用 'cubic' 插值方法在查询网格点处插值。然后,绘制结果。
Vq = interp3(X,Y,Z,V,Xq,Yq,Zq,'cubic'); figure slice(Xq,Yq,Zq,Vq,[6 9],2,0); shading flat
创建网格向量 x、y 和 z。这些向量用于定义与 V 中的值相关联的点。
x
y
z
x = 1:100; y = (1:50)'; z = 1:30;
将样本值定义为一个 50×100×30 的随机数数组 V。使用 rand 函数创建数组。
rand
rng('default') V = rand(50,100,30);
计算 x、y 和 z 域范围外三个点处的 V。指定 extrapval = -1。
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,因为它们位于 x、y 和 z 域之外。
-1
样本网格点,指定为实数数组或向量。样本网格点必须是唯一的。
如果 X、Y 和 Z 是数组,则包含完整网格(meshgrid 格式)的坐标。使用 meshgrid 函数同时创建 X、Y 和 Z 数组。这些数组的大小必须相同。
meshgrid
如果 X、Y 和 Z 是向量,则将被视作网格向量。这些向量中的值必须严格单调递增或递减。
示例: [X,Y,Z] = meshgrid(1:30,-10:10,1:5)
[X,Y,Z] = meshgrid(1:30,-10:10,1:5)
数据类型: single | double
single
double
样本值,指定为实数或复数数组。V 的大小要求取决于 X、Y 和 Z 的大小:
如果 X、Y 和 Z 是表示完整网格(meshgrid 格式)的数组,则 V 的大小与 X、Y 或 Z 的大小匹配。
如果 X、Y 和 Z 是网格向量,则 size(V) = [length(Y) length(X) length(Z)]。
size(V) = [length(Y) length(X) length(Z)]
如果 V 包含复数,则 interp3 将分别对实部和虚部插值。
示例: rand(10,10,10)
rand(10,10,10)
数据类型: single | double 复数支持: 是
查询点,指定为实数标量、向量或数组。
如果 Xq、Yq 和 Zq 是标量,则为 R3 中单个查询点的坐标。
如果 Xq、Yq 和 Zq 是方向不同的向量,则 Xq、Yq 和 Zq 将被视作 R3 中的网格向量。
如果 Xq、Yq 和 Zq 是大小和方向都相同的向量,则 Xq、Yq 和 Zq 将被视作 R3 中的散点。
如果 Xq、Yq 和 Zq 是大小相同的数组,则表示 R3 中由查询点构成的一个完整网格(meshgrid 格式)或多个散点。
示例: [Xq,Yq,Zq] = meshgrid((1:0.1:10),(-5:0.1:0),3:5)
[Xq,Yq,Zq] = meshgrid((1:0.1:10),(-5:0.1:0),3:5)
1
细化因子,指定为非负实整数标量。此值指定对每个维度上网格点之间的间隔重复分割优化的次数。这将在样本值之间生成 2^k-1 个插值点。
如果 k 为 0,则 Vq 与 V 相同。
0
interp3(V,1) 与 interp3(V) 相同。
interp3(V,1)
interp3(V)
下面的插图描绘了在 R3 的一个平面上,k=2 时的情形。共有 72 个插入值(以红色表示)和 9 个样本值(以黑色表示)。
k=2
示例: interp3(V,2)
interp3(V,2)
插值方法,指定为下表中的选项之一。
每个维度需要至少两个网格点
比 'nearest' 需要更多内存
每个维度需要两个网格点
内存要求最低,计算速度最快
每个维度中的网格必须有均匀间距,但并非所有维度的网格间距都必须相同
每个维度需要至少四个点
比 'linear' 需要更多内存和计算时间
每一维需要至少 2 个点。
产生的波动比 'spline' 小
计算时间通常少于 'spline',但内存要求类似
每个维度中需要至少 4 个点,如果分别提供 2 个或 3 个点,则退回到线性插值或二次插值
比 'cubic' 需要更多内存和计算时间
X、Y 和 Z 域范围外的函数值,指定为实数或复数标量。interp3 为 X、Y 和 Z 域范围外的所有点返回此常量值。
示例: 5
5
示例: 5+1i
5+1i
插入的值,以实数或复数标量、向量或数组的形式返回。Vq 的大小和形状取决于所用的语法以及(某些情况下)输入参量的大小和值。
interp3(X,Y,Z,V,Xq,Yq,Zq)
interp3(V,Xq,Yq,Zq)
size(Vq) = [1 1]
size(Xq) = [100 1]
size(Yq) = [100 1]
size(Zq) = [100 1]
size(Vq) = [100 1]
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]
size(Xq) = [50 25]
size(Yq) = [50 25]
size(Zq) = [50 25]
size(Vq) = [50 25]
interp3(V,k)
第 i 个维度的长度为 2^k * (size(V,i)-1)+1 的数组
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) 之间包含反转,因此连单调序列也不是。
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)
对 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 散点集合的数组或向量 Xq、Yq 和 Zq 组成。第 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];
全部展开
用法说明和限制:
Xq、Yq 和 Zq 的大小必须相同。使用 meshgrid 进行网格计算。
为了获得最佳结果,请以向量的形式提供 X、Y 和 Z。这些向量的值必须严格单调递增。
代码生成不支持 'makima' 插值方法。
对于 'cubic' 插值方法,如果网格没有均匀间距,将会出现错误。这种情况下,请使用 'spline' 插值方法。
使用 'spline' 插值方法时,为了获得最佳结果,请:
使用 meshgrid 创建输入 Xq、Yq 和 Zq。
使用小于 V 维度数的插值点数。对大量散点进行插值可能效率不高。
backgroundPool
ThreadPool
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
interp3 函数支持 GPU 数组输入,但有以下用法说明和限制:
V 必须是双精度或单精度三维数组。V 可以是实数或复数。
X、Y 和 Z 必须:
具有相同的类型(双精度或单精度)。
是在对应维度具有递增和非重复元素的有限向量或三维数组。
当 X、Y 和 Z 是三维数组时与笛卡尔坐标区对齐(就像它们是由 meshgrid 生成的一样)。
维度与 V 一致。
Xq、Yq 和 Zq 必须是具有相同类型的向量或数组(双精度或单精度)。如果 Xq、Yq 和 Zq 为数组,则它们必须具有相同大小。如果它们是具有不同长度的向量,则其中一个必须具有不同的方向。
method 必须是 'linear' 或 'nearest'。
不支持超出边界输入的外插。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
此函数完全支持分布式数组。有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
在 R2006a 之前推出
interp1 | interp2 | interpn | meshgrid
interp1
interp2
interpn
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处