我有一个时间序列的温度曲线,我想要插值,我想问如果我的数据是不规则间隔的,如何做到这一点。
以下是矩阵的具体内容:
时间和深度都是不规则的间隔。我想问一下如何将它们插入到常规网格中?
我在Matlab中查看了interp2
和TriScatteredInterp
,但问题如下:
interp2
仅在数据位于常规网格中时才有效。TriscatteredInterp
仅在向量为列向量时有效。虽然时间和深度都是列向量,但温度却不是。 感谢。
答案 0 :(得分:2)
函数Interp2
根本不需要规则间隔测量网格,它只需要 单调 。也就是说,存储在向量depths
和times
中的抽样位置必须增加(或减少),这就是全部。
假设这确实是情况 *并且您希望在常规位置插入 **,存储在向量rdepths
和rtimes
中,你可以这样做:
[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
对输出网格没有限制(它可以是不规则的,甚至是非单调的)。
答案 1 :(得分:0)
我会使用您的数据拟合样条或多项式,然后定期重新采样。我强烈推荐polyfitn函数。实际上,这个John D'Errico家伙的任何东西都令人难以置信。除此之外,我曾经使用过这个函数,当时我有一个关于不规则间隔3D问题的数据并且它工作得相当好。如果你的数据集有很好的支持,我怀疑它确实如此,这将是一块蛋糕。请享用!希望这有帮助!
答案 2 :(得分: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);