【问题标题】:Retrieving data on coordinates which or not on the data grid through interpolation通过插值检索数据网格上或不在数据网格上的坐标数据
【发布时间】:2015-09-28 01:11:57
【问题描述】:

我正在使用 Matlab 读取包含有关磁场信息的大型 (NetCDF) 数据集。数据集是一个 318x562x554 的三维数组,我可以检索到具有每个坐标轴值的三个一维数组(318x1、562x1 和 554x1)。我想知道不适合数据集网格的点上的磁场值。在这种情况下,这些点是放置在二维数组中的航天器的轨迹坐标(3xn,n 取决于您拥有的坐标数)。

x = ncread(file,'X_axis');
y = ncread(file,'Y_axis');
z = ncread(file,'Z_axis');
Bx = ncread(file,'Bx');

[x2,y2,z2] = meshgrid(y,x,z);              

length = numel(interval_ET_5000);
Bx_intp = zeros(1,length);
for i = 1:length
    [xi,yi,zi] = meshgrid(position_MEX_Mars_5000(1,i),...
                          position_MEX_Mars_5000(2,i),...
                          position_MEX_Mars_5000(3,i));
    F = interp3(x2,y2,z2,Bx,xi,yi,zi);
    Bx_intp(i) = F;
end

我已经尝试了很多甚至都不起作用的东西。这“有效”但不正确,因为 Bx_intp 中的值太高了。也因为在 for 循环中一次做一个坐标使得它非常慢,正常运行大约是 3500 个坐标。

所以基本上我正在寻找的是一个反向散射插值。此函数接受随机数据点,并在网格网格上插入值。但现在我有一个规则网格,我想在随机点上插值。

【问题讨论】:

标签: matlab coordinates interpolation netcdf large-data


【解决方案1】:

感谢 Ashish Uthama 的提示!我让它与下面的代码一起工作。对于其他有同样问题的人。对于 griddedInterpolant,您需要 ndgrid 而不是 meshgrid,并且坐标需要单调递增。

x = ncread(file,'X_axis');
y = ncread(file,'Y_axis');
z = ncread(file,'Z_axis');
Bx = ncread(file,'Bx');

[x2,y2,z2] = ndgrid(x,y,z);

F = griddedInterpolant(x2,y2,z2,Bx,'linear','none');
Bx_intp = F(position_MEX_Mars_5000(1,i),...
            position_MEX_Mars_5000(2,i),...
            position_MEX_Mars_5000(3,i));

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多