首页 > 解决方案 > 4D分散数据的Matlab插值

问题描述

我们有一个 195x4(双)矩阵:A=[X Y Z temp],当绘制时scatter3(A(:,1), A(:,2), A(:,3),30, A(:,4), 'filled' )给出如下内容: 在此处输入图像描述

现在我们要生成一个带有temp=A(:,4)矢量数据插值的“立方体”。到目前为止,我们已经尝试过interp3

% Base Grid
[Xm Ym Zm] = meshgrid(A(:,1), A(:,2), A(:,3)); 
% Grid Refinement
[Xq,Yq,Zq] = meshgrid(xmin:dx:xmax, ymin:dy:ymax, zmin:dz:zmax);
Aq = interp3(Xm,Ym,Zm,A(:,4),Xq,Yq,Zq);

返回以下错误:

Error using griddedInterpolant
The number of input coordinate arrays does not equal the number of dimensions
(NDIMS) of these arrays.

Error in interp3 (line 144)
            F = griddedInterpolant(X, Y, Z, V, method,extrap);

Error in PDGEM_MT (line 112)
Aq = interp3(Xm,Ym,Zm,A(:,4),Xq,Yq,Zq);

所以我认为,可能是一个糟糕的实现和/或对问题的错误解释。如何生成该空间的“立方体”,其体积插值为A(:,4)

提前致谢。

标签: matlab3dgridinterpolation4d

解决方案


你有一个分散的数据集。

interp3仅当您的数据点采用网状网格格式时才有效,请阅读此内容。这个函数的简短描述是Interpolation for 3-D gridded data in meshgrid format

相反,您可以使用griddatawhich 适用于分散的数据读取 this。简短的描述是Interpolate 2-D or 3-D scattered data

例子:

X = rand(100,1);
Y = rand(100,1);
Z = rand(100,1);
C = rand(100,1);

figure
scatter3(X, Y, Z,30, C, 'filled' )

[Xm, Ym, Zm] = meshgrid(min(X):.01:max(X), min(Y):.01:max(Y), min(Z):.01:max(Z)); 

Cm = griddata(X,Y,Z,C,Xm,Ym,Zm);

figure
scatter3(Xm(:), Ym(:), Zm(:), 30, Cm(:), 'filled' )

数据点: 数据

插值: 网格化


推荐阅读