我的函数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);
请问你能帮帮我吗?
答案 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));
这可能会给你期望的结果。