29.2 多维插值

Octave 中有三个功能相似的多维插值函数。使用 Delaunay 三角剖分的方法在散点数据插值中进行了描述。

 
zi = interp2 (x, y, z, xi, yi)
zi = interp2 (z, xi, yi)
zi = interp2 (z, n)
zi = interp2 (z)
zi = interp2 (…, method)
zi = interp2 (…, method, extrap)

二维插值。

对数值参考数据 xyz 进行插值,以确定坐标 xiyi 处的 zi 值。参考数据 xy 可以是矩阵(如 meshgrid 返回的),此时 xyz 的大小必须相等。如果 xy 是描述网格的向量,则 length (x) == columns (z)length (y) == rows (z)。无论哪种情况,输入数据都必须是严格单调的。

如果在没有 xy 而只有一个参考数据矩阵 z 的情况下调用,则假设二维区域为 x = 1:columns (z), y = 1:rows (z)。如果网格是规则的且点之间的距离不重要,这样可以节省内存。

如果使用单个参考数据矩阵 z 和一个细化值 n 调用,则在网格上执行插值,其中每个原始区间被递归细分 n 次。这导致原始网格中每个区间增加 2^n-1 个附加点。如果省略 n,则使用值 1。例如,区间 [0,1] 在 n==2 时得到细化的区间,其点为 [0, 1/4, 1/2, 3/4, 1]。

插值 method 可以是以下之一:

"nearest"

返回最近邻的值。

"linear"(默认值)

最近邻的线性插值。

"pchip"

分段三次 Hermite 插值多项式——具有光滑一阶导数的保形插值。

"cubic"

使用卷积核函数的三次插值——具有光滑一阶导数的三阶方法。

"spline"

三次样条插值——整条曲线具有光滑的一阶和二阶导数。

extrap 是一个标量数值。它用 extrap 替换端点之外的值。请注意,如果使用了 extrap,则也必须指定 method。如果省略 extrapmethod"spline",则使用 "spline" 的外推值。否则,对于任何其他 method,默认的 extrap 值为 "NA"

另请参阅:interp1interp3interpnmeshgrid

 
vi = interp3 (x, y, z, v, xi, yi, zi)
vi = interp3 (v, xi, yi, zi)
vi = interp3 (v, n)
vi = interp3 (v)
vi = interp3 (…, method)
vi = interp3 (…, method, extrapval)

三维插值。

对数值参考数据 xyzv 进行插值,以确定坐标 xiyizi 处的 vi 值。参考数据 xyz 可以是矩阵(如 meshgrid 返回的),此时 xyzv 的大小必须相等。如果 xyz 是描述立方体网格的向量,则 length (x) == columns (v)length (y) == rows (v)length (z) == size (v, 3)。无论哪种情况,输入数据都必须是严格单调的。

如果在没有 xyz 而只有一个参考数据矩阵 v 的情况下调用,则假设三维区域为 x = 1:columns (v), y = 1:rows (v), z = 1:size (v, 3)。如果网格是规则的且点之间的距离不重要,这样可以节省内存。

如果使用单个参考数据矩阵 v 和一个细化值 n 调用,则在三维网格上执行插值,其中每个原始区间被递归细分 n 次。这导致原始网格中每个区间增加 2^n-1 个附加点。如果省略 n,则使用值 1。例如,区间 [0,1] 在 n==2 时得到细化的区间,其点为 [0, 1/4, 1/2, 3/4, 1]。

插值 method 可以是以下之一:

"nearest"

返回最近邻的值。

"linear"(默认值)

最近邻的线性插值。

"cubic"

分段三次 Hermite 插值多项式——具有光滑一阶导数的保形插值(尚未实现)。

"spline"

三次样条插值——整条曲线具有光滑的一阶和二阶导数。

extrapval 是一个标量数值。它用 extrapval 替换端点之外的值。请注意,如果使用了 extrapval,则也必须指定 method。如果省略 extrapvalmethod"spline",则使用 "spline" 的外推值。否则,对于任何其他 method,默认的 extrapval 值为 "NA"

另请参阅:interp1interp2interpnmeshgrid

 
vi = interpn (x1, x2, …, v, y1, y2, …)
vi = interpn (v, y1, y2, …)
vi = interpn (v, m)
vi = interpn (v)
vi = interpn (…, method)
vi = interpn (…, method, extrapval)

执行 n 维插值,其中 n 至少为 2。

n 维数值数组 v 的每个元素表示由参数 x1x2、……、xn 给定位置处的值。参数 x1x2、……、xn 可以是与数组 v 大小相同的 n 维数组(采用 "ndgrid" 格式),也可以是向量。

参数 y1y2、……、yn 表示对数组 vi 进行插值的点。它们可以是长度和方向相同的向量,此时被解释为散点的坐标。如果它们是方向或长度不同的向量,则用于形成 "ndgrid" 格式的网格。它们也可以是大小相等的 n 维数组。

如果省略了 x1、……、xn,则假定它们为 x1 = 1 : size (v, 1) 等。如果指定了 m,则插值会在每两个插值点之间的中点处添加一个点。这个过程执行 m 次。如果只指定了 v,则假定 m1

插值 method 可以是以下之一:

"nearest"

返回最近邻的值。

"linear"(默认值)

最近邻的线性插值。

"pchip"

分段三次 Hermite 插值多项式——具有光滑一阶导数的保形插值(尚未实现)。

"cubic"

三次插值(与 "pchip" 相同,尚未实现)。

"spline"

三次样条插值——整条曲线具有光滑的一阶和二阶导数。

默认方法为 "linear"

extrapval 是一个标量数值。它用 extrapval 替换端点之外的值。请注意,如果使用了 extrapval,则也必须指定 method。如果省略 extrapvalmethod"spline",则使用 "spline" 的外推值。否则,对于任何其他 method,默认的 extrapval 值为 NA

另请参阅:interp1interp2interp3splinendgrid

interpn 与另外两个多维插值函数之间的一个显著区别是维度处理方式的不同。对于 interp2interp3,y 轴被视为矩阵的列,而 x 轴对应于数组的行。由于 Octave 按列主序索引数组,任何数组的第一个维度都是列,因此 interpn 有效地反转了 "x" 和 "y" 维度。考虑以下示例,

x = y = z = -1:1;
f = @(x,y,z) x.^2 - y - z.^2;
[xx, yy, zz] = meshgrid (x, y, z);
v = f (xx,yy,zz);
xi = yi = zi = -1:0.1:1;
[xxi, yyi, zzi] = meshgrid (xi, yi, zi);
vi = interp3 (x, y, z, v, xxi, yyi, zzi, "spline");
[xxi, yyi, zzi] = ndgrid (xi, yi, zi);
vi2 = interpn (x, y, z, v, xxi, yyi, zzi, "spline");
mesh (zi, yi, squeeze (vi2(1,:,:)));

其中 vivi2 是完全相同的。维度的反转分别由 meshgridndgrid 函数处理。此代码的结果可参见图 29.4

interpn

图 29.4:interpn 的使用演示


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4