【问题标题】:2D interpolation using TriScatteredInterp (Matlab)使用 TriScatteredInterp (Matlab) 进行 2D 插值
【发布时间】:2016-01-15 10:50:00
【问题描述】:

假设我有一组点,它们被描述为一对 2D 坐标。在每一点,我都有给定参数的值,比如说温度。

第 1 点:(x1, y1, t1)

第2点:(x2, y2, t2)

...

第 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)

最后一行产生以下错误:

???错误使用 ==> TriScatteredInterp

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

看来我输入的方式是错误的。我对谷歌做了一些研究,但我找不到问题。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: matlab interpolation


    【解决方案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) 坐标,结果将给出与xy 的大小匹配的插值...所以这样的事情可以工作:

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

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

    【讨论】:

    • @RolandY。 - 很高兴它做到了!祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    相关资源
    最近更新 更多