【问题标题】:scattered data interpolation分散数据插值
【发布时间】:2014-01-22 06:15:51
【问题描述】:

我有一组数据例如:

X Y Z

1 3 7

2 5 8

1 4 9

3 6 10

我想将 Z 插入 X=2.5Y=3.5 。我该怎么做?我不能在这里使用interp2,因为XY 不是严格单调的(增加或减少)。

【问题讨论】:

    标签: arrays matlab matrix interpolation


    【解决方案1】:

    目前执行分散数据插值的首选方法是通过scatteredInterpolant 对象类:

    >> F = scatteredInterpolant([1 2 1 3].',[3 5 4 6].',[7 8 9 10].','linear') %'
    F = 
      scatteredInterpolant with properties:
    
                     Points: [4x2 double]
                     Values: [4x1 double]
                     Method: 'linear'
        ExtrapolationMethod: 'linear'
    >> Zi = F(2.5,3.5)
    Zi =
        6.7910
    

    替代语法,

    >> P = [1 3 7; 2 5 8; 1 4 9; 3 6 10];
    >> F = scatteredInterpolant(P(:,1:2),P(:,3),'linear')
    

    有关scatteredInterpolant 相对于griddata 的优势,请参阅this MathWorks page on Interpolating Scattered Data。除了句法差异之外,两个主要优点是外推法和自然邻域插值法。如果您想用相同的插值对新数据进行插值,那么您还可以在创建插值对象时重用计算的三角剖分,从而获得性能优势。

    【讨论】:

      【解决方案2】:

      看来griddata 是您要查找的函数:

      z = griddata( [1 2 1 3], [3 5 4 6], [7 8 9 10], 2.5, 3.5, 'nearest' )
      

      【讨论】:

      • 是的,这行得通。非常感谢。不能为此使用线性插值吗?
      • 因为当我输入 z = griddata( [1 2 1 3], [3 5 4 6], [7 8 9 10], 2.5, 3.5, 'linear' )得到的是楠
      • 所以也许你的数据不是线性的?
      猜你喜欢
      • 2015-07-21
      • 2019-10-27
      • 2018-12-12
      • 2014-08-31
      • 2013-12-27
      • 2016-06-22
      • 2019-02-11
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多