插值网格数据
网格的值或测量数据由定期间隔点,形成一个网格。网格数据出现在许多领域,如气象学、测量、医学成像。在这些领域中,通常在正则空间间隔进行测量,可能随着时间的推移。这些命令的网格数据的范围可以从一维(简单时间序列)4 - d(为测量随时间变化量)或更高。网格数据的一些例子:
一维:股票价格随着时间的推移
二:表面的温度
3 d:核磁共振图像的大脑
4 - d:海洋测量水的体积
在所有这些应用中,基于网格插值有效地扩展了有用的数据点没有测量。例如,如果你有每小时为股票价格数据,您可以使用插值近似价格每15分钟。
MATLAB网格插值函数
MATLAB®提供了一些工具,用于基于网格插值:
网格创建函数
的meshgrid
和ndgrid
函数创建各种维度的网格。meshgrid
可以创建2 d或3 d网格,而ndgrid
可以创建网格与任意数量的维度。这些函数返回网格使用不同的输出格式。你可以在这些网格格式之间转换使用pagetranspose
(的R2020b)或交换
交换功能的第一个二维网格。
插值函数
的插值函数
家庭的功能包括interp1
,interp2
,interp3
,interpn
。每个函数是用来插入数据与特定数量的维度。interp2
和interp3
使用网格meshgrid
格式,而interpn
使用网格ndgrid
格式。
插值的对象
griddedInterpolant
对象支持任意数量万博1manbetx的维插值数据ndgrid
格式。这些对象也支持多值插值(万博1manbetx的R2021a),每个网格点可以有多个与之关联的值。
有内存和性能好处griddedInterpolant
对象在插值函数
功能。griddedInterpolant
提供了大量的重复查询的性能改进interpolant对象,而插值函数
函数执行一个新的计算每次调用。同时,griddedInterpolant
以节约内存格式存储采样点(作为一个紧凑的网格),是利用多核多线程计算机处理器。
网格表示
MATLAB可以代表一个网格的三个表示:完整的电网,紧凑的网格,网格或违约。默认的网格和紧凑的网格是主要用于方便,提高效率,分别。
完整的网格
一个完整的网格是所有点是明确定义的。的输出ndgrid
和meshgrid
定义一个完整的网格。您可以创建完整的网格统一的在每个维度中,点间距相等,或非均匀的间距变化的一个或多个维度。统一的网格可以在每个维度有不同的间距,只要每个维度内间距是恒定的。
统一的 | 统一的 | 非均匀 |
---|---|---|
|
|
|
统一完整的网格的一个例子是:
(X, Y) = meshgrid ([1 2 3], [3 6 9 12])
X = 1 2 3 1 2 3 1 2 3 1 2 3 Y = 3 3 3 6 6 6 9 9 9 12 12 12
紧凑的网格
显式地定义在网格中每一点可以消耗很多内存,当你处理大网格。的紧凑的网格表示是一种分配的内存开销,一个完整的网格。紧凑的网格表示只存储网格向量(一个为每个维度)而不是完整的网格。在一起,隐式地定义网格网格向量。事实上,输入meshgrid
和ndgrid
网格向量,这些函数复制网格向量形成完整的网格。紧凑的网格表示允许您直接绕过网格创建和提供网格向量插值函数。
例如,考虑两个向量,x1 = 1:3
和x2 = 1:5
。你可以把这些向量的坐标x1
和一组坐标的方向x2
方向,像这样:
每一个箭头指向的位置。您可以使用这两个向量来定义一组网格点,是由一组坐标x1
,另一组是由坐标x2
。当网格向量是复制,它们形成两个坐标数组组成完整的网格:
输入网格向量单调或非单调。单调向量包含维度值,要么增加或减少维度。相反,非向量包含值波动。如果输入网格向量非单调,如(2 4 6 3 1)
,然后(X1, X2) = ndgrid ([2 4 6 3 1])
输出一个非网格。网格向量应该单调如果你打算通过电网其他MATLAB函数。的排序
函数是非常有用的,以确保单调性。
默认的网格
在某些应用程序中,只在网格点的值是重要的,而不是网格点之间的距离。例如,大多数核磁共振扫描收集数据是均匀间隔的四面八方。在这种情况下,可以允许插值函数自动生成默认的网格表示使用的数据。要做到这一点,省去网格插值函数的输入。当你离开了电网输入函数自动认为unit-spaced网格数据。这个函数创建unit-spaced网格执行,节省你自己创建一个网格的麻烦。
例如:温度在二维网格插值
考虑温度数据收集在一个表面上有5厘米的间隔,在每个方向延长20厘米。使用meshgrid
创建完整的网格。
(X, Y) = meshgrid (0:5:20)
X = 0 5 10 15 20 0 5 10 15 20 0 5 10 15 20 0 5 10 15 20 0 5 10 15 20 Y = 0 0 0 0 0 5 5 5 5 5 10 10 10 10 10 15个15个15个15个15 20 20 20 20 20
(x,y)每个网格点的坐标表示为相应的元素X
和Y
矩阵。第一个是由网格点(X (1) (1))
,这是[0 0]
,下一个是由网格点[X Y (2) (2)]
,这是[0 5]
,等等。
现在,创建一个矩阵来表示温度测量的表面网格,然后画出数据。
10 T = [1 1 1 1;1 10 10 10 10;100 100 1000 100 100;10 10 10 10 1;1 1 10 1 1];冲浪(X, Y, T)视图(2)
尽管温度中心网格点大,其位置和影响周围的网格点不明显的原始数据。
提高数据的分辨率10倍,使用interp2
温度数据插入到细网格,使用0.5厘米间隔。使用meshgrid
再创建一个更精细的网格所代表的矩阵Xq
和Yq
。然后,用interp2
与原来的网格、温度数据和新网格点,和策划结果数据。默认情况下,interp2
使用每个维度中线性插值。
[Xq, Yq] = meshgrid (0:0.5:20);Tq = interp2 (X, Y, T, Xq, Yq);冲浪(Xq Yq Tq)视图(2)
温度插值数据添加细节图像,大大提高数据的有用性的区域内测量。
网格插值方法
基于网格插值函数和对象在MATLAB提供几种不同的插值方法。在选择一个插值方法时,要记住一些比其他人需要更多的内存或较长的计算时间。你可能需要权衡这些资源来达到所需的平滑的效果。从下表中可以看到每个插值方法应用于相同的一维数据,还提供了一个概述的好处,权衡,每个方法的要求。
方法 | 描述 |
---|---|
|
插入的值查询点是在最近的样本网格点的值。
|
|
插入的值查询点是在下一个采样网格点的值。
|
|
插入的值查询点是前面的示例网格点的值。
|
|
插入的值查询点是基于线性插值相邻网格点的值在每个各自的维度。
|
|
插入的值查询点是基于一种保形分段立方插值的相邻网格点的值。
|
|
插入的值查询点是基于立方插值的相邻网格点的值在每个各自的维度。
|
|
插入的值查询点是基于分段函数的多项式学位最多三个评估使用相邻网格点的值在每个各自的维度。的Akima修改公式避免过激。
|
|
插入的值查询点是基于立方插值的相邻网格点的值在每个各自的维度。
|
另请参阅
interp1
|interp2
|interp3
|interpn
|griddedInterpolant