Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中不规则空间三维矩阵的插值_Matlab_Grid_2d_Interpolation - Fatal编程技术网

matlab中不规则空间三维矩阵的插值

matlab中不规则空间三维矩阵的插值,matlab,grid,2d,interpolation,Matlab,Grid,2d,Interpolation,我有一个时间序列的温度分布,我想插值,我想问一下,如果我的数据是不规则间隔的,怎么做 以下是矩阵的细节: 温度是30x365 时间是1x365 深度为30x1 时间和深度的间隔都是不规则的。我想问一下如何将它们插值到规则网格中 我已经研究了Matlab中的interp2和TriScatteredInterp,但是问题如下: interp2仅当数据位于常规网格中时才起作用 TriscatteredInterp仅当向量是列向量时才起作用。虽然时间和深度都是列向量,但温度不是 谢谢。我将使用您的数

我有一个时间序列的温度分布,我想插值,我想问一下,如果我的数据是不规则间隔的,怎么做

以下是矩阵的细节:

  • 温度是30x365
  • 时间是1x365
  • 深度为30x1
时间和深度的间隔都是不规则的。我想问一下如何将它们插值到规则网格中

我已经研究了Matlab中的
interp2
TriScatteredInterp
,但是问题如下:

  • interp2
    仅当数据位于常规网格中时才起作用
  • TriscatteredInterp
    仅当向量是列向量时才起作用。虽然时间和深度都是列向量,但温度不是
    谢谢。

    我将使用您的数据拟合样条曲线或多项式,然后定期重新采样。我强烈推荐这个功能。事实上,这个叫约翰·德里科的家伙所做的一切都是难以置信的。除此之外,我在过去使用过这个函数,当我有一个不规则间隔的3D问题的数据时,它工作得相当好。如果你的数据集有很好的支持,我怀疑它有,这将是小菜一碟。享受吧!希望这有帮助

    函数
    Interp2
    根本不需要规则间隔的测量网格,它只需要一个单调的网格。也就是说,存储在向量
    深度
    次数
    中的采样位置必须增加(或减少),仅此而已

    假设情况确实如此*并且您希望在向量
    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
    对输出网格没有任何限制(它可以是不规则的,甚至是非单调的)。

    请在John D'Errico的MATLAB central上试用该工具。要使用它,请传入两个独立的数据向量(时间和温度)、相关数据矩阵(深度)以及要使用的规则间隔的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);
    

    您可以简单地遍历每一行温度(
    temperature(i,:)
    ),以避开大小问题。然而,这个问题还不清楚。你到底想做什么?什么样的插值?线性的,多项式的,什么花哨的?你能不能像往常一样适应并从那里开始?