2016-09-19 172 views
0

我有一個netCDF文件的緯度LAT,經度LON和windspeed。MATLAB找到最接近指定值的行和列索引

我想找到在給定的LAT,LON座標%Location of Met Mast 51.94341,1.922094888的風速。我試圖找到RefLATRefLON分別在LATLON矩陣的最接近的值。當我在LAT和LON中有最接近的值時,我將使用這些地址在此位置查找我的風速。

當我使用下面的代碼時,我期望每個列和行值CLON, CLAT, RLATRLON的單個值。相反,我得到CLON, CLAT, RLATRLON爲972個值的陣列,我正在尋找LATLON矩陣是大小848 X 972

LAT = ncread('wind_level2.nc','latitude'); 
LON = ncread('wind_level2.nc','longitude'); 
wind = ncread('wind_level2.nc','wind'); 

LAT = double(LAT); 
LON =double(LON); 
%Location of Met Mast 51.94341,1.922094888 

RefLAT=51.94341; 
LATcalc = abs(LAT - RefLAT); 
[RLAT,CLAT]=find(min(LATcalc)); 

RefLON=1.922094888; 
LONcalc = abs(LON - RefLON); 
[RLON,CLON]=find(min(LONcalc));` 

讚賞任何幫助。根據要求感謝

數據樣本:

LAT: 848x972 double:

51.6652641296387 51.6608505249023 51.6564369201660 51.6520233154297 51.6476097106934 51.6431961059570 51.6387825012207 
    51.6663322448731 51.6619186401367 51.6575050354004 51.6530914306641 51.6486778259277 51.6442642211914 51.6398506164551 
    51.6674041748047 51.6629867553711 51.6585731506348 51.6541595458984 51.6497459411621 51.6453323364258 51.6409187316895 
    51.6684722900391 51.6640548706055 51.6596412658691 51.6552276611328 51.6508140563965 51.6464004516602 51.6419868469238 
    51.6695404052734 51.6651229858398 51.6607093811035 51.6562957763672 51.6518821716309 51.6474685668945 51.6430549621582 
    51.6706047058106 51.6661911010742 51.6617774963379 51.6573638916016 51.6529502868652 51.6485366821289 51.6441192626953 
    51.6716728210449 51.6672592163086 51.6628456115723 51.6584320068359 51.6540145874023 51.6496009826660 51.6451873779297 
    51.6727409362793 51.6683235168457 51.6639099121094 51.6594963073731 51.6550827026367 51.6506690979004 51.6462554931641 
    51.6738052368164 51.6693916320801 51.6649780273438 51.6605644226074 51.6561470031738 51.6517333984375 51.6473197937012 
    51.6748695373535 51.6704559326172 51.6660423278809 51.6616287231445 51.6572151184082 51.6528015136719 51.6483840942383 
    51.6759376525879 51.6715240478516 51.6671066284180 51.6626930236816 51.6582794189453 51.6538658142090 51.6494522094727 

LON 848x972 double:

3.04663085937500 3.04491543769836 3.04320049285889 3.04148554801941 3.03977084159851 3.03805613517761 3.03634166717529 
3.03959774971008 3.03788304328918 3.03616857528687 3.03445434570313 3.03274011611938 3.03102612495422 3.02931237220764 
3.03256440162659 3.03085041046143 3.02913665771484 3.02742290496826 3.02570939064026 3.02399611473084 3.02228283882141 
3.02553081512451 3.02381753921509 3.02210426330566 3.02039122581482 3.01867818832397 3.01696562767029 3.01525306701660 
3.01849699020386 3.01678419113159 3.01507163047791 3.01335930824280 3.01164698600769 3.00993490219116 3.00822281837463 
3.01146292686462 3.00975084304810 3.00803875923157 3.00632715225220 3.00461530685425 3.00290393829346 3.00119256973267 
3.00442862510681 3.00271701812744 3.00100588798523 2.99929451942444 2.99758362770081 2.99587273597717 2.99416208267212 
2.99739408493042 2.99568319320679 2.99397253990173 2.99226188659668 2.99055147171021 2.98884129524231 2.98713135719299 
2.99035930633545 2.98864889144897 2.98693895339966 2.98522901535034 2.98351931571960 2.98180961608887 2.98010015487671 
2.98332428932190 2.98161458969116 2.97990512847900 2.97819590568543 2.97648668289185 2.97477769851685 2.97306895256043 
+2

請問您可以添加一個數據樣本嗎? – Finn

+2

閱讀['find'](http://www.mathworks.com/help/matlab/ref/find.html)和['min']的文檔(http://www.mathworks.com/help/ MATLAB/REF/min.html)。使用你的語法,'min'將返回每列的最小值('[1x972]'),'find'將返回一個包含從'min'返回的* all *非零元素索引的向量。 – excaza

+1

嘗試:'[RLAT,CLAT] = find(min(min(LATcalc)));' – Coriolis

回答

1

正如@excaza注意到,您的find語法是不是在你的情況下,適當的。沒有任何比較運算符,find假定進行邏輯比較,並返回包含所有非零元素索引的向量。這不是你想要的。

嘗試以下操作:

[RLAT,CLAT]=find(LATcalc<eps); 

其中eps是錯誤的寬容,比如0.00001。

你不能給find一個完美的平等,因爲你正在尋找的數字可能不存在矩陣中。用abs(LAT - RefLAT),你將有兩個值之間的差異矩陣。和以前一樣,你可能沒有一個完美的零點,所以你可以通過足夠低的誤差容限找到最接近零的結果,以確保達到最小值。

+0

不幸的是,手頭的任務並不像我想象的那麼簡單,但是您的解決方案有助於第一階段,歡呼聲 –

相關問題