在精炼网格的3D网格上插入标量场

时间:2017-12-13 10:30:37

标签: matlab interpolation

我的函数f = f(x,y,z)在大小为MxNxP的网格上以数字方式计算。

我需要在(明显)不同维度的更精细网格上插值。就像我对interp1做的那样,当我在一个区间内只有一些函数值时,我想插值它以在更多点找到值。

我尝试执行此代码:

XX=linspace(0,45,50);
YY=linspace(0,0.5,50);
ZZ=linspace(0,0.5,50);

U_1 = interp3(X,Y,Z,f,XX,YY,ZZ,'linear')

其中X Y Z是点的向量,其中我具有f的值。 XX,YY,ZZ是我想要解决方案的点。

我尝试使用griddata和interp3但是我收到以下错误消息:

  

使用griddedInterpolant时出错       网格矢量不定义与给定值匹配的点网格       interp3出错(第133行)
         F = griddedInterpolant({X,Y,Z},V,方法,extrap);

请问你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您似乎有一个不规则的网格数据集。在这种情况下,您需要使用griddata()函数进行插值。

注意定义点数组X,Y,Z具有相同的尺寸。内插点阵列XX,YY,ZZ也必须具有相同的尺寸。 这意味着以下表达式必须是true(或1):

all(size(X)==size(Y)) && all(size(X)==size(Z)))

对于插值的创建,您可以使用meshgrid。将插值网格的范围调整到实际数据范围是明智的:

[XX,YY,ZZ]=meshgrid(linspace(min(X(:)),max(X(:)),50), ...
                    linspace(min(Y(:)),max(Y(:)),50), ...
                    linspace(min(Z(:)),max(Z(:)),50));

这可能会给你期望的结果。