2011-09-19 82 views
3

我有點停留在一個簡單的練習,並希望得到一些幫助,對於NaN的問題。Matlab的「interp2」在邊緣

我試圖做使用Matlab中的「interp2」功能維度的變量「TMIN」 [15x12]一些簡單的2D插值:

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是NaNs,即:

tmin_interp(23,1:18) ==> NaN 
tmin_interp(1:23,18) ==> NaN 

有誰知道我可能會做錯什麼?我是否在插值設置方面犯了一個簡單的錯誤?感謝您的時間。

回答

2

的原因,他們nan s是不存在前後數據網格進行插值來。線性插值使用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) ]; 

(沒有檢查這一點,但你的想法)。你還需要一些前置和後置值添加到XY

使用一些其他的價值,如果是這樣的「外部」或「默認」 TMIN的價值。

PS你爲什麼要創建tmin_interp爲3維?

+0

+1,我想補充一點,注意向量[15:1.5:32]將在31.5終止,而不是在32所以試圖插出32確實是你外面提供的數組的範圍。 – 2013-06-25 10:14:58

0

或者只是嘗試:

interp2(X,Y,tmin(:,:),Xi,Yi,'spline'); 

避免給0值。

HTH!