文档

插值网格数据

网格数据表示

网格表示

这个例子展示了如何创建一个二维网格使用meshgridndgrid

在MATLAB®,网格数据意味着数据命令在一个网格。你能理解命令数据思考如何用MATLAB矩阵存储数据。

定义一些数据。

一个=画廊(“uniformdata”[3 - 5],0)
一个=3×50.9501 0.4860 0.4565 0.4447 0.9218 0.2311 0.8913 0.0185 0.6154 0.7382 0.6068 0.7621 0.8214 0.7919 0.1763

MATLAB将数据存储在一个矩阵。你能想到的一个作为一组元素的地方命令的指数矩阵。的线性指标一个是:

( 1 4 7 1 0 1 3 2 5 8 1 1 1 4 3 6 9 1 2 1 5 ]

任何元素的矩阵可以被索引检索,也就是说,通过要求在矩阵的元素。第i个元素一个检索的(我)

检索7元素一个

(7)
ans = 0.4565

对于一个m×n的矩阵,可以找到列元素相邻的第i个元素通过抵消我1。找到行元素相邻的第i个元素,抵消我的。

- - - - - - 1 - - - - - - + + 1

邻近检索列的元素(7)

(6)、(8)
ans = 0.7621
ans = 0.0185

MATLAB用于创建数据网格使用类似的想法。网格不仅仅是一组点,满足一定的几何性质。相反,一个网格数据集依赖于一个有序网格中的点之间的关系。邻接信息网格中的现成的结构是非常有用的对于许多应用程序,尤其是基于网格插值。

MATLAB提供了两个函数用于创建网格:

  • meshgrid创建2 d和3 d网格笛卡尔轴对齐。创建一个二维网格,语法(X, Y) = meshgrid (xgv ygv)在哪里xgv是一个向量的长度,ygv是一个向量的长度nmeshgrid复制xgv形成了n——- - - - - -矩阵X,它复制ygv形成另一个n——- - - - - -矩阵YXY代表网格点的坐标。的行X和水平是一致的吗X设在和的列Y与消极吗Y设在。

  • ndgrid创建一天网格阵列空间对齐。数组空间轴的行,列,页面,等调用语法(X1, X2, X3,……,Xn]= ndgrid(x1gv, x2gv, x3gv,...,xngv)在哪里x1gv、x2gv x3gv,…, xngv在每个维度跨网格的向量。X1, X2, X3,…, Xn输出数组可用于评估多个变量的函数和多维插值。

使用meshgrid创建一个二维轴对齐网格从两个向量,xgvygv

xgv = (1 2 3);ygv = (1 2 3 4 5);(X, Y) = meshgrid (xgv ygv)
X =5×31 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Y =5×31 1 1 2 2 2 3 3 3 4 4 4 5 5 5

现在使用ndgrid创建一个二维空间对齐网格从相同的两个向量,xgvygv

(X1, X2) = ndgrid (xgv ygv)
X1 =3×51 1 1 1 1 2 2 2 2 2 3 3 3 3 3
X2 =3×51 2 3 4 5 1 2 3 4 5 1 2 3 4 5

请注意,ndgridX1的转置meshgridX。也是同样的道理X2Y

对于一个给定的输入meshgridndgrid函数将产生完全相同的坐标网格。他们之间唯一的不同输出格式的坐标数组。情节输出和看到他们都是相同的。

图()[X1_ndgrid X2_ndgrid] = ndgrid (1:3, 1:5);Z = 0 (3、5);网格(X1_ndgrid, X2_ndgrid, Z,“EdgeColor”,“黑”)轴平等的;%设置轴标签和标题甘氨胆酸h1 =;h1。XTick = [1 2 3]; h1.YTick = [1 2 3 4 5]; xlabel(“ndgrid输出”)

图()[X_meshgrid Y_meshgrid] = meshgrid (1:3, 1:5);网格(X_meshgrid, Y_meshgrid, Z ',“EdgeColor”,“黑”)轴平等的;%设置轴标签和标题甘氨胆酸h2 =;h2。XTick = [1 2 3]; h2.YTick = [1 2 3 4 5]; xlabel(“meshgrid输出”)

这取决于你打算使用你的网格,你可能更喜欢一种格式。一些MATLAB函数可能需要您的数据有一个meshgrid当别人可能需要格式ndgrid格式。

网格格式之间的转换。将一个二维网格输出meshgridndgrid格式,转置坐标矩阵:

[X_meshgrid, Y_meshgrid] = meshgrid (1:3, 1:5);[X1_ndgrid, X2_ndgrid] = ndgrid (1:3, 1:5);isequal (X_meshgrid ', X1_ndgrid) ans = 1 isequal (Y_meshgrid X2_ndgrid) ans = 1
您还可以使用交换函数。
isequal(排列(X_meshgrid 1 [2]), X1_ndgrid) ans = 1
将一个三维meshgridndgrid,转置的每个页面坐标数组。对于一个给定的数组my_array,交换(my_array [2 1 3])交换行和列,每一页的净效应是换位:
[X_meshgrid, Y_meshgrid Z_meshgrid] = meshgrid (1:3, 1:5, [1 - 2]);[X1_ndgrid, X2_ndgrid X3_ndgrid] = ndgrid (1:3, 1:5, [1 - 2]);isequal(排列(X_meshgrid [2 1 3]), X1_ndgrid) ans = 1 isequal(排列(Y_meshgrid [2 1 3]), X2_ndgrid) ans = 1 isequal(排列(Z_meshgrid [2 1 3]), X3_ndgrid) ans = 1

网格向量。的输入传递给被称为网格功能网格向量。隐式定义网格网格向量。考虑两个向量,x1gv = (1:3)x2gv = (1:5)。你可以把这些向量的坐标x1和一组坐标的方向x2方向,像这样:

每一个箭头指向的位置。您可以使用这两个向量来定义一组网格点,是由一组坐标x1gv,另一组是由坐标x2gv。当网格向量复制它们形成两个坐标数组组成完整的网格:

单调和非网格。输入网格向量单调非单调。单调向量包含维度值,要么增加或减少维度。相反,非向量包含值波动。如果输入网格向量非单调,如(2 4 6 8 3 (1),ndgrid输出如下:

(X1, X2) = ndgrid ([2 4 6 3 1]) X1 = 2 2 2 2 2 4 4 4 4 4 6 6 6 6 6 3 3 3 3 3 1 1 1 1 1 X2 = 2 4 6 3 1 2 4 6 3 1 2 4 6 3 1 2 4 6 3 1 2 4 6 3 1
网格向量应该单调如果您打算通过网格其他MATLAB®功能。

均匀和非均匀网格。一个统一的网格是一个所有邻近点在给定尺寸相等的间距。例如,(X1, X2) = ndgrid ([1 3 5 9], [11 13 15])是一个统一的间距2单位在每一个维度。

没有必要在均匀网格间距等于在所有维度。例如,(X1, X2) = ndgrid ((1 2 3 4) [11 13 15])被认为是均匀即使间距X1X2是不同的。

一个网格间距的变化是一个在任何维度非均匀网格。例如,(X1, X2) = ndgrid ([1 5 6 9], [11 13 15])创建一个非均匀网格,因为沿着第一个维度间距变化。

统一的 统一的 非均匀

类型的网格表示

MATLAB可以代表一个网格的三个表示:完整的电网,紧凑的网格,网格或违约。紧凑的网格和默认的网格是主要用于方便和提高效率。

完整的网格。一个完整的网格就是点是明确定义的。的输出ndgridmeshgrid定义一个完整的网格。

紧凑的网格。在网格中每个点的明确定义是昂贵的记忆。的紧凑的网格表示是一种分配的内存开销,一个完整的网格。紧凑的网格表示存储网格向量而不是完整的网格。(信息的griddedInterpolant类使用紧凑的网格表示,看到的插值与griddedInterpolant类。)

默认的网格。在许多情况下,当你分析数据,你关心网格中的点之间的距离和它们的价值。例如,一个数据集可能代表降雨在特定的点在一个地理区域。在这种情况下,您会关心价值在每个网格点和点之间的距离和它的邻居。在其他情况下,您可能只关心值对于一个给定的点,而不是相对距离。例如,您可以使用从核磁共振扫描输入数据点之间的距离是完全统一的。在这种情况下,您会关心点的值,但可以肯定的一个完全统一的网格。在这种情况下,默认的网格表示是有用的。的默认的网格表示存储在网格点值显式和隐式地创建网格点坐标。

网格近似技术

在某些情况下,您可能需要为您的数据网格近似。一个近似网格可以通过一个标准的理想化的MATLAB网格通过选择一组合适的网格向量。例如,一个网格可以沿着曲线点,谎言。这样的数据集可能发生如果你的数据是基于经度和纬度:

在这种情况下,尽管输入数据不能直接网格,您可以在适当的时间间隔连续近似网格线:

您还可以使用默认的网格

网格退化。一个堕落的网格网格是一个特例,一个或多个维度的网格是单例。单维度可以是内部的,如7:7在这个例子中:

(X1, X2, X3) = ndgrid (1:2:10、7:7 1:3:15);
或单维度可以落后:
(X1, X2, X3) = ndgrid (1:2:10、1:3:15 7:7);
您可以创建一个网格退化如果你想把一片更大的数据集。例如,你可能想要分析只是一片三维核磁共振成像扫描。在这种情况下,您将需要从多维片数据网格,如虚线部分如下图:

如果使用索引来提取所需的数据,生成的网格是简并的X3尺寸:

(X1, X2, X3) = ndgrid (1:3);X1_slice = X1 (:: 2) X1_slice = 1 1 1 2 2 2 3 3 3 X2_slice = X2 (:,: 2) X2_slice = 1 2 3 1 2 3 1 2 3 X3_slice = X3 (:,: 2) X3_slice = 2 2 2 2 2 2 2 2 2

数据网格的概念是非常重要的对于理解MATLAB做网格插值的方式。

基于网格插值

基于网格插值的数据插值由有序网格来表示。例如,一个安排的温度测量每隔1厘米的矩形平面上垂直和水平从左到右是二维网格数据。基于网格插值近似温度提供了一个有效的方法在网格点之间的任何位置。

使用基于网格插值的好处

基于网格插值提供了显著节省计算开销,因为网格结构允许MATLAB来定位一个查询点及其邻邻居很快。要理解这是如何工作的,在一个一维网格考虑以下几点:

线连接相邻的点代表了细胞的网格。第一个细胞之间发生x = 1x = 3,第二个之间发生x = 3x = 5,等等。网格中的每个数字代表一个坐标。如果你想查询的网格x = 6,你将不得不使用插值因为6没有显式地定义在网格中。因为这个网格的均匀间隔2,你可以缩小查询点的位置与一个整数的除法(6/2 = 3)。这告诉你,关键是第三单元的网格。定位在一个二维网格细胞在每个维度包括执行此操作一次。此操作被称为快速查找,MATLAB使用这种技术只有当数据安排在统一的网格。

这快速查找高效定位细胞包含一个查询点Xq。一个二叉搜索收入如下:

  1. 定位中心网格点。

  2. 比较Xq网格的中心。

  3. 如果Xq小于中心发现,消除所有的网格点大于中央点搜索。类似地,如果Xq大于中心的一个发现,我们消除所有的网格点不到中央点。注意,通过这样做,我们有分我们必须搜索的数量减少了一半。

  4. 找到剩下的网格点的中心,重复步骤2,直到剩下一个网格点两侧的查询。这两点标记细胞,其中包含的边界Xq

为了说明二进制搜索的力量,考虑下面的例子。出现之前的电子信用卡授权,只有保护商人对欺诈信用卡购买是比较每个客户的信用卡的帐号对一个“坏”账号列表。这些列表绑定小册子有成千上万的卡号按升序排列。多少比较需要搜索列表10000账号出售吗?事实证明,对于任何的列表n订购物品,比较的最大数量的次数不会超过你可以分一半的列表中,或log2 (n)。因此,信用卡搜索将不超过log2 (10 e3)约13比较。这是一个相当令人印象深刻的如果你认为多少比较需要执行顺序搜索。

相比之下,考虑一个分散的数据集的问题。

1 x =兰特(20日);1 y =兰德(20日);散射(x, y)

找点距离查询点需要更多的操作。如果您的数据可以近似为一个网格,网格插值将提供大量节省计算和内存使用。

如果您的数据是分散的,您可以使用详细的工具插值分散的数据

插值与健康

插值方法在MATLAB建立插值函数,通过样本数据点。如果你查询插值函数在一个样本的位置,你会回到样品数据点的值。相比之下,曲线和曲面拟合的算法不一定通过样本数据点。

插值方法

基于网格插值提供了几种不同的插值方法。在选择一个插值方法时,要记住一些比其他人需要更多的内存或较长的计算时间。然而,您可能需要权衡这些资源来实现所需的平滑度的结果。下表概述的好处,权衡,每个方法的要求。

方法 描述 连续性 内存使用情况和性能 需求
最近的邻居 插入的值查询点是在最近的样本网格点的值。 不连续
  • 适度的内存需求

  • 最快的计算时间

  • 需要在每个维度两个网格点。

下一个邻居 插入的值查询点是在下一个采样网格点的值。 不连续

作为最近邻相同的内存需求和计算时间。

  • 只用于一维插值。

  • 至少需要两个网格点。

以前的邻居 插入的值查询点是前面的示例网格点的值。 不连续

作为最近邻相同的内存需求和计算时间。

  • 只用于一维插值。

  • 至少需要两个网格点。

线性 插入的值查询点是基于线性插值相邻网格点的值在每个各自的维度。 C0
  • 比最近邻需要更多的内存。

  • 需要更多的计算时间比最近邻。

  • 至少需要两个网格点在每一个维度。

Pchip 插入的值查询点是基于一种保形分段立方插值的相邻网格点的值。 C1
  • 需要更多的内存比线性的。

  • 需要更多的计算时间比线性的。

  • 只用于一维插值。

  • 至少需要4个网格点。

立方 插入的值查询点是基于立方插值的相邻网格点的值在每个各自的维度。 C1
  • 需要更多的内存比线性的。

  • 需要更多的计算时间比线性的。

  • 网格必须均匀间距,尽管每个维度的间隔没有是相同的。

  • 至少需要4点在每一个维度。

修改Akima 插入的值查询点是基于分段函数的多项式学位最多三个评估使用相邻网格点的值在每个各自的维度。Akima公式修改,避免过激的。 C1
  • 类似的样条内存需求。

  • 比立方需要更多的计算时间,但通常不到样条。

  • 至少需要两个网格点在每一个维度

样条 插入的值查询点是基于立方插值的相邻网格点的值在每个各自的维度。 C2
  • 比立方需要更多的内存。

  • 比立方需要更多的计算时间。

  • 需要在每个维度4分。

这个数字有一些视觉比较不同的一维数据的插值方法。

插值方法的比较

MATLAB支持网格插值在几个方金宝app面:

  • 插值函数家庭的功能:interp1,interp2,interp3,interpn

  • griddedInterpolant类。

这两个插值函数家庭的功能和griddedInterpolant金宝app支持一天网格插值。然而,有使用内存和性能优势griddedInterpolant类的插值函数功能。此外,griddedInterpolant类提供了一个一致的接口处理网格数据的任意数量的维度。

插值函数的插值函数的家庭

interp1函数

这个例子显示了如何interp1函数可以用来插入一组示例值使用“pchip”方法。

这个函数interp1进行一维插值。其最一般的形式是:

Vq = interp1 (X, V, Xq,方法)

在哪里X是一个向量的坐标和V是一个向量包含在这些坐标的值。Xq是一个向量包含的查询点插入,然后呢方法(可选)指定的四种插值方法:“最近的”,“线性”,“pchip”,或样条的

创建一组一维网格点X和相应的样本值V

X = (1 2 3 4 5);V = (12 16 31 10 6);

插入在细间隔0.1间距。

Xq = (1:0.1:5);Vq = interp1 (X, V, Xq,“pchip”);

画出样品和插值。

情节(X, V,“o”);持有情节(Xq,矢量量化,“- - -”);传奇(“样本”,“pchip”);持有

一维与interp1外推

这个例子展示了如何使用“extrap”选择插入域之外的样本点。

定义样本点和价值观。

X = (1 2 3 4 5);V = (12 16 31 10 6);

指定查询点,Xq超越的领域X

Xq = (0:0.1:6);Vq = interp1 (X, V, Xq,“pchip”,“extrap”);

策划的结果。

图绘制(X, V,“o”);持有情节(Xq,矢量量化,“- - -”);传奇(“样本”,“pchip”);持有

在另一种方法,您可以引入额外的点来获得更多的控制行为推断地区。例如,您可以限制曲线外推地区保持平通过扩展域重复值。

X = [0 1 2 3 4 5 6);V = (12 12 16 31 10 6 6);

指定查询点,Xq,进一步扩展的领域之外X

Xq = (1:0.1:7);

插入使用“pchip”。你可以省略“extrap”选项,因为它是默认的“pchip”,“makima”,样条的方法。

Vq = interp1 (X, V, Xq,“pchip”);

策划的结果。

图绘制(X, V,“o”);持有情节(Xq,矢量量化,“- - -”);传奇(“样本”,“pchip”);持有

interp2函数

这个例子显示了如何interp2函数可以用来插入粗采样山峰函数在一个更精细的网格。

interp2interp3函数执行两个分别和三维插值,他们中插入网格meshgrid格式。调用语法interp2的一般形式:

Vq = interp2 (X, Y, V, Xq, Yq方法)

在哪里XY数组定义一个网格的坐标吗meshgrid格式,V是一个数组包含在网格点的值。XqYq是包含查询点的坐标数组插入。方法(可选)指定的四种插值方法:“最近的”,“线性”,“立方”,或样条的

网格点组成XY必须单调递增,应当符合吗meshgrid格式。

创建一个粗网格和相应的样本值。

(X, Y) = meshgrid (3:1:3);V =山峰(X, Y);

情节的样本值。

冲浪(X, Y, V)标题(“采样网格”);

生成一个更精细的网格进行插值。

[Xq, Yq] = meshgrid (3:0.25:3);

使用interp2在查询插入点。

Vq = interp2 (X, Y, V, Xq, Yq“线性”);

策划的结果。

冲浪(Xq Yq Vq);标题(细化网格的);

interp3函数

这个例子展示了如何使用interp3插入一个3 d函数在一个查询点和比较值生成的解析表达式。

interp3在相同的方式工作interp2除了它有两个额外的参数:一个用于示例中的三维网格查询中,另一个用于三维点,

Vq = interp3 (X, Y, Z, V, Xq Yq, Zq、方法)

是这样的interp2你供应,网格点interp3必须单调递增,应当符合吗meshgrid格式。

定义一个函数生成值X, Y, Z的输入。

generatedvalues = @ (X (X, Y, Z)。Y ^ 2 +。^ 3 + z ^ 4);

创建示例数据。

[X, Y, Z] = meshgrid ((5: .25:5));V = generatedvalues (X, Y, Z);

在一个特定的查询点插入。

Vq = interp3 (X, Y, Z, V, 2.35, 1.76, 0.23,“立方”)
Vq = 10.9765

比较矢量量化价值生成的解析表达式。

V_actual = generatedvalues (2.35, 1.76, 0.23)
V_actual = 10.9771

interpn函数

这个例子显示了如何interpn函数可以用来插入一个粗采样函数在细网格使用“立方”方法。

这个函数interpn在对网格执行n维插值ndgrid格式。其最一般的形式是:

Vq = interpn (X1, X2, X3……Xn, V, Y1, Y2, Y3,…, Yn,方法)

在哪里X1, X2, X3,…, Xn数组定义一个网格的坐标吗ndgrid格式,V是一个数组包含在网格点的值。Y1、Y2、Y3…, Yn是包含查询点的坐标数组插入。方法(可选)指定的四种插值方法:“最近的”,“线性”,“立方”,或样条的

网格点组成X1, X2, X3,…Xn必须单调递增,应当符合吗ndgrid格式。

创建一组网格点和相应的样本值。

(X1, X2) = ndgrid ((5:1:5));R =√X1。^ 2 + X2。^ 2) +每股收益;V =罪(R)。/ (R);

情节的样本值。

网格(X1, X2, V)标题(“采样网格”);

创建一个更精细的网格进行插值。

(Y1, Y2) = ndgrid ((5: .5:5));

插入在细网格和阴谋的结果。

Vq = interpn (X1, X2, V, Y1, Y2,“立方”);网格(Y1, Y2, Vq)标题(细化网格的);

interpn有另一种语法:Vq = interpn (V, ntimes方法)允许您插入一个网格,是整数的次数比样品细网格。在前面的代码中,日元Y2查询interpolant网格,包含一个额外的点之间的样本。下面的代码演示了如何实现相同的结果ntimes = 1

插入在细网格使用ntimes = 1

Vq = interpn (V, 1,“立方”);

策划的结果。

网格(Vq)标题(“精网格与NTIMES”);

注意,情节比前面的例子的比例是不同的。这是因为我们并通过唯一的值。的函数使用一个默认的网格尺寸的基础上矢量量化。这两种情况下的输出值是相同的。

你也可以提供一个非均匀网格查询点。这可能是有用的,如果你感兴趣的查询interpolant在一个地区一个高分辨率的网格。下面的代码显示了如何可以做到这一点。

插入一个有偏见的网格。

(Y1, Y2) = ndgrid ([5 4 3 2 1 -1.5 -1.25 -0.75 -0.5 -0.20 -2.5 0]);Vq = interpn (X1, X2, V, Y1, Y2,“立方”);

策划的结果。

网(Y1、Y2、Vq);标题(“有偏见的网格”);

插值与griddedInterpolant类

就像interpn函数,griddedInterpolant基于网格插值的类提供了一个接口n维度。然而griddedInterpolant提供以下额外的好处:

  • 它提供了大量interpolant重复查询的性能改进。

  • 它提供了额外的性能改进和节省内存消耗,因为它存储作为一个样本点紧凑的网格

griddedInterpolant接受符合样本数据ndgrid格式。如果你想创建一个griddedInterpolantmeshgrid数据,您将需要转换的数据ndgrid格式。看到转换meshgrid ndgrid格式的数据演示如何将2 d和3 d的meshgrids

griddedInterpolant类支持金宝app插值方法这也是支持的金宝appinterpn:最近的,线性,pchip,立方,makima,样条。然而griddedInterpolant提供了更大的性能开销较少。

构建Interpolant

一个interpolant是一个函数进行插值。您将创建interpolant通过调用griddedInterpolant构造函数,并把样本数据:网格和相应的样本值。您还可以指定插值方法如果你想覆盖默认的“线性”的方法。调用语法有以下形式:

  • 对于一维插值,可以通过x,一个点集,v,包含相应的向量长度相同的值。

    F = griddedInterpolant (x, v)

  • 对于更高的维度,您可以提供一个完整的网格。X1, X2,…, Xn指定网格作为一组nn- d数组。这些数组符合ndgrid格式和大小是相同的样本数组V

    F = griddedInterpolant (X1, X2,…, Xn, V)

  • 如果你知道相邻采样点之间的距离都是一致的,所以你可以让griddedInterpolant创建一个默认的网格只通过采样点V

    F = griddedInterpolant (V)

  • 您还可以指定样本数据的坐标作为一个紧凑的网格。紧凑的网格是由一组向量。这些向量然后打包成一个单元阵列通过将它们包含在花括号;例如,{x1g, x2g,…, xng}在向量x1g x2g,…, xng在每个维度定义网格坐标。

    F = griddedInterpolant ({x1g, x2g,…, xng}, V)

  • 您还可以指定插值方法作为最后一个输入参数的任何调用语法。本例中指定最近邻插值。

    F = griddedInterpolant ({x1g、x2g x3g}, V,“最近”)

查询Interpolant

griddedInterpolant,F以同样的方式,评估当你调用一个函数。查询点可能分散或网格,您可以通过它们来F在下列方面:

  • 你可以指定一个——- - - - - -n矩阵Xq,其中包含散点n维度。插入的值矢量量化作为一个返回——- - - - - -1向量。

    Vq = F (Xq)

  • 您还可以指定查询点的系列n列向量x1q x2q,…, xnq的长度。这些向量表示n维度。插入的值矢量量化作为一个返回——- - - - - -1向量。

    Vq = F (xnq x1q, x2q,…)

  • 您可以指定查询点的系列nn维数组代表一个完整的电网。数组X1q X2q,…, Xnq都是一样的大小和符合吗ndgrid格式。插入的值矢量量化也将是相同的大小。

    Vq = F (Xnq X1q, X2q,…)

  • 您还可以指定查询点作为一个紧凑的网格。x1gq x2gq,…, xngq是向量在每个维度定义网格点。

    Vq = F ({x1gq x2gq,…, xngq})

    例如,在二维:

    Vq = F ({(0:0.2:10), (5:0.5:5)});

转换meshgrid ndgrid格式的数据

griddedInterpolant类接受ndgrid格式化的示例数据。如果你想创建一个griddedInterpolantmeshgrid数据,你应该把它转换成ndgrid格式。

下面的示例概述了二维转换的步骤meshgrid数据ndgrid格式。我们首先创建meshgrid和相应的样本值:

(X, Y) = meshgrid (2: .1:2, 1: .1:1);V = 0.75 * y ^ 3 - 3 * y 2 * x ^ 2;

转换X,Y,Vndgrid格式,遵循这些步骤:

  1. 转置网格中的每个数组以及样本数据。

    X = X ';Y = Y ';V = V ';
  2. 现在创建interpolant。

    F = griddedInterpolant (X, Y, V);

将一个三维meshgrid,可以使用交换函数。再次,从创建开始meshgrid和相应的样本值:

[X, Y, Z] = meshgrid(5、三3 10:10);V = X。^ 3 + Y。^ 2 + Z;

转换X,Y,Z,Vndgrid格式,遵循这些步骤:

  1. 使用交换函数来交换每个数组的行和列。净效应将每一页的转置。

    P = [2 1 3];X =排列(X, P);Y =排列(Y, P);Z =排列(Z, P);V =排列(V, P);

  2. 现在创建interpolant。

    F = griddedInterpolant (X, Y, Z, V);

griddedInterpolant在一维

这个例子显示了如何创建和策划一个一维interpolant使用griddedInterpolant立方插值法。

创建一个粗网格和样本值。

X = (1 2 3 4 5);V = (12 6 15 9 6);

构建griddedInterpolant使用一个立方插值法。

F = griddedInterpolant (X, V,“立方”)
与属性:F = griddedInterpolant GridVectors:{(1 2 3 4 5)}值:[12 6 15 9 6]方法:“立方”ExtrapolationMethod:“立方”

GridVectors属性包含紧凑网格指定样本值的坐标V。的方法属性指定了插值方法。注意,我们指定“立方”当我们创建F。如果您省略了方法参数,默认的插值方法,线性将分配给F

您可以访问的属性F以同样的方式你会访问中的字段结构体

F.GridVectors;%显示网格向量作为单元阵列F.Values;%显示样本值F.Method;%显示插值法

插入在细间隔0.1间距。

Xq = (1:0.1:5);Vq = F (Xq);

策划的结果。

情节(X, V,“o”);持有情节(Xq,矢量量化,“- - -”);传奇(“样本”,三次插值的);

griddedInterpolant在二维空间中

这个例子显示了如何创建和绘制二维interpolant使用griddedInterpolant

在二维空间和更高,你可以指定坐标作为示例ndgrid、紧凑的网格或一个默认的网格。在这个例子中,我们将提供一个ndgrid

创建一个粗网格和样本值。

(X, Y) = ndgrid (1: .3:1, 2: .3:2);V = 0.75 * Y。^ 3 - 3 * Y - 2 * x ^ 2;

构建griddedInterpolant

V F = griddedInterpolant (X, Y,,样条的);

插入在细间隔0.1间距。

[Xq, Yq] = ndgrid (1: .1:1, 2: .1:2);Vq = F (Xq, Yq);

策划的结果。

图()冲浪(X, Y, V);视图(65、60)标题(样本数据的);

图()冲浪(Yq Xq,矢量量化);视图(65、60)标题(“雅致与样条”);

griddedInterpolant在三维空间中

这个例子展示了如何创建一个3 d interpolant和评估在一片平面,这样你就可以画上,飞机上的值。

创建一个完整的网格和样本值。

[X, Y, Z] = ndgrid ((5:2:5));V = X。^ 3 + Y。^ 2 + z ^ 2;

构建griddedInterpolant

F = griddedInterpolant (X, Y, Z, V,“立方”);

因为我们已经创建了完整的网格生成样本值,我们没有失去通过它griddedInterpolant。然而,在实践中是很常见的示例数据加载到MATLAB从磁盘。紧凑的电网可以在这种情况下非常有益,因为它允许您指定整个电网以一种更经济的记忆。如果我们有加载V在MATLAB计算从一个完整的电网,我们可以创建一个紧凑的网格节约内存空间中。例如,

全球之声= {(5:2:5),(5:2:5),(5:2:5)};F = griddedInterpolant(全球之声,V,“立方”);

插入了一架飞机Z = 2行距0.25倍。

[Xq, Yq Zq] = ndgrid ((5: .25:5) (5: .25:5), 2:2);Vq = F (Xq, Yq Zq);

策划的结果。

冲浪(Xq Yq Vq);标题(精制与线性插值的);

griddedInterpolant在四维空间

这个示例创建了一个4 - d interpolant和评估一个点。

  1. 创建一个粗网格和样本值。

    (X1, X2, X3, X4) = ndgrid ((5:2:5));V = X1。^ 3 + X2。^ 2 + X3。^ 2 + X4;

  2. 构建griddedInterpolant

    F = griddedInterpolant (X1, X2, X3, X4, V,“线性”);

  3. 查询griddedInterpolant在一个单点。

    Vq = F ([-3.2 - 2.1 4.7 - -1.3])

    MATLAB输出如下:

    ans = -10.1000

其他与griddedInterpolant的工作方式

根据查询点的安排,你可能更喜欢一个评估其他语法。例如,创建以下interpolant:

(X, Y) = ndgrid (1: .25:1, 2: .25:2);V = 0.75 * y ^ 3 - 3 * y 2 * x ^ 2;F = griddedInterpolant (X, Y, V);

查询F使用一个完整的电网给网格点的值:

[Xq, Yq] = ndgrid (1: .1:0, 2: .1:0);Vq = F (Xq, Yq);

你也可以插入在同一网格使用紧凑的网格格式:

gvq = {1: .1:0, 2: .1:0};Vq = F (gvq);

或者你可以查询一个点:

Vq = F (.315 .738)

返回:

Vq = -2.1308

或一组随机的分散点:

rng(“违约”)Vq = F(兰德(3 2))

返回:

Vq = -3.4919 -3.3557 -0.3515

你也可以检查F:

F.Values (1、3)

返回:

ans = -0.0313

或者你可以更换数组:

F。Values = 2*V;

您可以编辑的属性F动态。例如,您可以代替插值方法如下:

F。方法=“立方”;

你也可以更换GridVectorsF。首先,检查GridVectors:

全球之声= F.GridVectors;全球之声{1}
全球之声是一个单元阵列,全球之声{1}显示第一个网格向量:
ans = -1.0000 0.2500 0.5000 0.7500 1.0000 -0.7500 -0.5000 -0.2500 0

现在取代GridVectorsF通过创建一个新的单元阵列new_gv:

new_gv = {(0:0.3:1), (0:0.3:1)};F。GridVectors = new_gv;