通过插值检索数据网格上或不在数据网格上的坐标数据

Retrieving data on coordinates which or not on the data grid through interpolation

我正在使用 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

我试过很多东西都不管用。这 'works' 但不正确,因为 Bx_intp 中的值太高了。也因为在for循环中一次做一个坐标使得它很慢,一个正常的运行大约是3500个坐标。

所以基本上我要找的是一个反向的 scatteredInterpolant。此函数接受随机数据点,您可以在 meshgrid 上插值。但是现在我有一个规则的网格,我想对随机点进行插值。

感谢 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));