使用TriScatteredInterp进行2D插值(Matlab)

时间:2015-10-16 15:49:45

标签: matlab interpolation

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

  

第1点:(x1, y1, t1)

     

第2点:(x2, y2, t2)

     

...

     

点n:(xn, yn,tn)

所有这些点都包含在2D域中,其形状为三角形。

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

这是我到目前为止所尝试的内容:

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

最后一行产生以下错误:

  

???使用==>时出错TriScatteredInterp

     

必须以列 - 矢量格式指定输入数据。

似乎我给出输入的方式是错误的。我已经对Google进行了一些研究,但我找不到问题。

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

1 个答案:

答案 0 :(得分:1)

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

>> 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)坐标在插值中使用,结果将提供与x和{{y的大小匹配的插值1}} ...所以这样的事情可以起作用:

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

输出将是应用于插值的(x,y)坐标网格...基本上,您将获得使用XY作为唯一{{1}的插值曲面对。