我有点坚持一个简单的练习,并会感激一些帮助。
我正在尝试使用Matlab中的“interp2”函数进行一些简单的2D插值,以获得维度[15x12]的变量'tmin':
lat = 15:1.5:32;
lon = 70:1.5:92;
lat_interp = 15:1:32;
lon_interp = 70:1:92;
[X,Y] = meshgrid(lat,lon);
[Xi,Yi] = meshgrid(lat_interp,lon_interp);
tmin_interp = zeros(length(lon_interp),length(lat_interp),Num_Days);
tmin_interp(:,:) = interp2(X,Y,tmin(:,:),Xi,Yi,'linear');
此代码导致tmin_interp的最后一行和最后一列为NaN,即:
tmin_interp(23,1:18) ==> NaN
tmin_interp(1:23,18) ==> NaN
有谁知道我可能做错了什么?关于插值设置我是否犯了一个简单的错误?谢谢你的时间。
答案 0 :(得分:2)
它们nan
的原因是网格之前和之后没有数据要插入到。线性插值使用Xi,Yi
处的场的梯度,以估计该点处的值。如果任何一方都没有,那就不可能。
您可以使用extrapval
参数在您指定的X,Y
之外进行推断。只需在0
之后添加参数'linear'
:
interp2(X,Y,tmin(:,:),Xi,Yi,'linear', 0);
这将使'边缘'上的点数为零。但是,对于外部点,它们可能会下降到某个默认值,如零。为此,您可以在tmin
之前和之后添加零:
tmin_padded = [ zeros(1,size(tmin,2)+2)
zeros(size(tmin,1),1) tmin zeros(size(tmin,1),1)
zeros(1,size(tmin,2)+2) ];
(尚未检查过,但您明白了。)您还需要为X
和Y
添加一些前置和后置值。
使用其他值,如果这是tmin的“外部”或“默认”值。
PS为什么要将tmin_interp
创建为三维?
答案 1 :(得分:0)
或者只是尝试:
interp2(X,Y,tmin(:,:),Xi,Yi,'spline');
避免强加0值。
HTH!