【发布时间】:2014-01-22 06:15:51
【问题描述】:
我有一组数据例如:
X Y Z
1 3 7
2 5 8
1 4 9
3 6 10
我想将 Z 插入 X=2.5 和 Y=3.5 。我该怎么做?我不能在这里使用interp2,因为X 和Y 不是严格单调的(增加或减少)。
【问题讨论】:
标签: arrays matlab matrix interpolation
我有一组数据例如:
X Y Z
1 3 7
2 5 8
1 4 9
3 6 10
我想将 Z 插入 X=2.5 和 Y=3.5 。我该怎么做?我不能在这里使用interp2,因为X 和Y 不是严格单调的(增加或减少)。
【问题讨论】:
标签: arrays matlab matrix interpolation
目前执行分散数据插值的首选方法是通过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。除了句法差异之外,两个主要优点是外推法和自然邻域插值法。如果您想用相同的插值对新数据进行插值,那么您还可以在创建插值对象时重用计算的三角剖分,从而获得性能优势。
【讨论】:
看来griddata 是您要查找的函数:
z = griddata( [1 2 1 3], [3 5 4 6], [7 8 9 10], 2.5, 3.5, 'nearest' )
【讨论】: