插值是一种根据现有数据点创建的趋势查找查询数据点值的方法。MATLAB 提供了许多选项来对 N 维数据执行插值。
在本文中,我们将讨论如何借助一些示例在 3D 数组中插入数据。我们将使用 MATLAB 的 interpn() 函数来执行插值。
语法
vq = interpn(x1, x2, x3, V, x1q, x2q, x3q)
x1, x2, x3 = 域
V = 对应于 x1、x2、x3 的 3D 数据
x1q、x2q、x3q = 查询点
上述语法适用于 3D 数据,可以进一步扩展到 N 维。让我们通过示例来了解其中的要点。
我们将创建 3 个虚拟域数据点,然后为相应的数据创建相同的 ndgrid。然后,我们将查询给定的数据进行插值。
示例 1:
% creating domain points x1 = 1:33; x2 = 1:25; x3 = 1:23; %creating range points using random numbers Y = rand(33,25,23); %creating query points for interpolation q1 = [1.3 4 9.5]; q2 = [3 3.6 19]; q3 = [13 13 17.3]; %performing interpolation V = interpn(x1,x2,x3,Y,q1,q2,q3); disp(V) |
在这里,我们在 \mathbb{R}^3 中定义我们的域,然后以 3D 数组的形式创建一些随机数据点,然后,创建一些位于定义域内的查询点。执行插值后,我们得到向量 V 中的插值点。
输出:
在此示例中,我们将看到当查询的数据点位于定义的域之外时如何设置外推值。我们将使用与上述相同的代码示例,并仅更改查询点。
示例 2:
% Code % creating domain points x1 = 1:33; x2 = 1:25; x3 = 1:23; %creating range points using random numbers Y = rand(33,25,23); %creating query points for interpolation q1 = [1.3 0 -9.5]; q2 = [3 3.6 1]; q3 = [3 -13 17.3]; %performing interpolation V = interpn(x1,x2,x3,Y,q1,q2,q3, 'cubic' ,-1); disp(V) |
在这里,我们更改了查询的数据点,使第一列位于域中,而另一列位于域外。然后,在 interpn 函数中,在给出插值方法(由于语法要求而是必需的)之后,我们将最后一个参数,即外推值传递给 -1。这意味着,每当有外推查询时,我们都会得到 -1 而不是 NaN。
输出: