在 MatLab 中插值 3D 数组非单调数据

计算科学 matlab 插值
2021-12-26 13:01:51

我正在创建一个模拟程序,其中三个变量被参数化,我们修改一个参数,同时保持另外两个不变。MatLab 输出的示例数组如下所示:

    dim3arr(:,:,1) =

0.8000    0.9000    1.0000    1.1000    1.2000
     0         0         0         0         0
0.5000    0.5000    0.5000    0.5000    0.5000


    dim3arr(:,:,2) =

0.8000    0.8000    0.8000    0.8000    0.8000
     0   10.0000   20.0000   35.0000   60.0000
0.5000    0.5000    0.5000    0.5000    0.5000


    dim3arr(:,:,3) =

0.8000    0.8000    0.8000    0.8000    0.8000
     0         0         0         0         0
0.5000    0.6000    0.8000    1.1000    1.5000

我试图弄清楚如何在数组中的点之间进行插值。MatLab 对 N 维数组进行插值的文档似乎假设数据是单调递增的。我将如何让 MatLab 插入数据?

1个回答

不是数据需要单调,而是坐标(你的三个变量)必须单调递增。正如@nicoguaro 在他的评论中所建议的那样,interp3只要您正确订购了东西,就应该可以正常工作。

如果您的意思是您的变量是非单调的,那么您只需重新排序即可。调用您的变量xyz并假设它们分别对应于您的维度 1、2 和 3,dim3arr您可以通过以下方式执行此操作:

[x, Ix]=sort(x);
[y, Iy]=sort(y);
[z, Iz]=sort(z);
dim3arr = dim3arr(Ix,:,:);
dim3arr = dim3arr(:,Iy,:);
dim3arr = dim3arr(:,:,Iz);

或者,只需确保x, y,z是单调的,然后再使用它们来生成dim3arr.