散乱数据插值

时间:2014-01-22 06:15:51

标签: arrays matlab matrix interpolation

我有一组数据,例如:

X Y Z

1 3 7

2 5 8

1 4 9

3 6 10

我想为ZX=2.5插入Y=3.5。我该怎么做?我不能在interp2使用X,因为Y和{{1}}并非严格单调(增加或减少)。

2 个答案:

答案 0 :(得分:9)

执行分散数据插值的当前首选方法是通过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。除语法差异外,外推和自然邻域插值有两个主要优点。如果要使用相同的插值来插入新数据,那么您还可以重新使用在创建插值对象时计算的三角测量。

答案 1 :(得分:5)

似乎griddata是您正在寻找的功能:

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