使用 TriScatteredInterp 的二维插值 (Matlab)

2D interpolation using TriScatteredInterp (Matlab)

让我们考虑一下我有一组点,它们被描述为一对二维坐标。在每个点,我都有给定参数的值,比方说,温度。

Point 1 : (x1, y1, t1)

Point 2 : (x2, y2, t2)

...

Point n : (xn, yn,tn)

所有这些点都包含在一个三角形的二维域中。

我想在整个域的范围内插入参数 t。对我来说,任何插值方法(线性、最近邻等)都可以。我深信我使用 MATLAB 实现了这一点——更准确地说是使用 TriScatteredInterp。但是,它似乎不起作用。它无法创建插值。

这是我到目前为止尝试过的方法:

x = [0, 1, 1, 0]
y = [0, 0, 1, 1]
t = [10, 20, 30, 20]
F = TriScatteredInterp(x, y, t)

最后一行产生以下错误:

??? Error using ==> TriScatteredInterp

Input data must be specified in column-vector format.

看来我输入的方式不对。我已经对 Google 进行了一些研究,但我找不到问题所在。

非常感谢任何帮助,谢谢。

错误很明显...它说数据必须在列向量中。您将它们作为行向量。简单地说,在调用函数之前转置你的数据:

>> F = TriScatteredInterp(x.', y.', t.')

F = 

  TriScatteredInterp with properties:

         X: [4x2 double]
         V: [4x1 double]
    Method: 'linear'

FWIW,如果您阅读文档,您会发现列向量是必需的:http://www.mathworks.com/help/matlab/ref/triscatteredinterp.html


创建插值后,您可以在插值中使用任何大小的任何 (x,y) 坐标,结果将给出与 xx 的大小匹配的插值y...所以这样的事情可以工作:

[X,Y] = meshgrid(linspace(min(x),max(x)), linspace(min(y),max(y)));
out = F(X,Y);

输出将是应用于插值的 (x,y) 坐标的网格...基本上,您将使用 XY 作为唯一 (x,y)对.