2012-02-23 169 views
3

我有一个时间序列的温度分布图,我想要插入,我想问如何做到这一点,如果我的数据不规则间隔。matlab中不规则间隔的3D矩阵插值

这里是矩阵的细节:

  • 温度30x365
  • 的时间是1x365
  • 深度是30X1

时间和深度是不规则地间隔开。我想问一下如何将它们插入到普通网格中?

我已经看过在Matlab interp2TriScatteredInterp,但是这个问题有以下几点:只有当数据在规则网格

  1. interp2作品。
  2. TriscatteredInterp只有在向量是列向量时才有效。虽然时间和深度都是列矢量,但温度不是。

感谢。

+0

您可以通过温度的每一行()''温度(我)简单地重复。但是,这个问题还不清楚。你想要做什么?什么样的插值?线性,多项式,有点奇特?你能不能像往常一样适应并从那里出发? – Superbest 2012-02-24 00:20:53

回答

2

功能Interp2不需要一个规律间隔测量网格可言,它只需要一个单调之一。也就是说,存储在矢量depthstimes中的采样位置必须增加(或减少),这就是全部。

假设这确实是情况 *和你想在存储载体rdepthsrtimes规则位置 **内插,你可以这样做:

[JT, JD] = meshgrid(times, depths); %% The irregular measurement grid 
[RT, RD] = meshgrid(rtimes, rdepths); %% The regular interpolation grid 
TemperaturesOnRegularGrid = interp2(JT, JD, TemperaturesOnIrregularGrid, RT, RD); 


* :如果没有,您可以对行和列进行排序以返回到单调网格。
*
*:实际上Interp2对输出网格没有限制(它可以是不规则的或者甚至是非单调的)。

0

我会使用您的数据拟合样条或多项式,然后定期重新采样。我强烈推荐polyfitn函数。其实,这个约翰D'Errico家伙的任何东西都是不可思议的。除此之外,我过去使用过这个功能,当时我收到了一个不规则间隔的3D问题的数据,并且它工作得很好。如果你的数据集有很好的支持,我怀疑它会这样做,这将是小菜一碟。请享用!希望这可以帮助!

0

试试John D'Errico在MATLAB中心的GridFit工具。要使用它,传入2个独立的数据向量(温度时间&),相关数据矩阵(深度)以及要使用的规则间隔X数据点。默认情况下,该工具也可以平滑重叠(或接近)数据点。如果不需要,您可以通过各种配置选项覆盖此选项(以及其他选项)。示例代码:为了避开大小问题:

%Establish regularly spaced points 
num_points = 20; 
time_pts = linspace(min(time),max(time),num_points); 
depth_pts = linspace(min(depth),max(depth),num_points); 

%Run interpolation (with smoothing) 
Pest = gridfit(depth, time, temp, time_pts, depth_pts);