在Matlab中插值不规则间距的3D矩阵

3
我有一系列温度剖面的时间序列需要插值。如果我的数据不是规则间隔的,我想问如何做到这一点。以下是矩阵的具体信息:
- 温度为30x365 - 时间为1x365 - 深度为30x1
时间和深度都是不规则间隔的。我想问如何将它们插值到一个规则网格中?
我已经查看了Matlab中的interp2和TriScatteredInterp,但问题在于:
- interp2仅适用于数据在规则网格中的情况。 - TriscatteredInterp仅适用于向量为列向量的情况。虽然时间和深度都是列向量,但温度不是。
谢谢。

你可以简单地遍历温度矩阵的每一行(temperature(i, :))以解决尺寸问题。然而,问题不太清楚。你到底想做什么?是线性插值、多项式插值还是其他高级插值方法?难道你不能像往常一样进行拟合并从那里开始吗? - Superbest
3个回答

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

尝试使用John D'Errico在MATLAB中心开发的GridFit工具。要使用它,请传入您的2个独立数据向量(时间和温度),依赖数据矩阵(深度)以及要使用的定期间隔的X和Y数据点。默认情况下,该工具还会对重叠(或几乎重叠)的数据点进行平滑处理。如果不需要此功能,则可以通过各种配置选项覆盖此功能(以及其他选项)。示例代码:

%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);

0

我会使用你的数据来拟合样条或多项式,然后在规则间隔处重新采样。我强烈推荐polyfitn函数。实际上,这个John D'Errico的所有东西都非常棒。除此之外,当我遇到不规则间距的三维问题时,我曾经使用过这个函数,效果还不错。如果你的数据集有很好的支持,我认为它会很容易处理。祝你愉快!希望这可以帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接