2015-10-23 107 views
0

我使用meshgrid在被稱爲一個循環和代碼的具體路線如下我的MATLAB的功能之一(對不起,我不能粘貼在這裏完整的代碼)MATLAB meshgrid錯誤

rect 
[m,n] = meshgrid(rect(1):rect(3),rect(2):rect(4)); 
size(m) 

現在我打印矩形和大小(米)與網格代碼一起顯示爲ans輸出。我發佈的最後兩個迭代下面

1)第一個給大小(米)爲46x48是一個正確的維度,並沒有拋出一個錯誤在我以後的矩陣加法。

2)顯示大小(m)爲46x47的第二個是錯誤的維度,儘管rect值表示否則。

rect = 

    119.9290 69.3807 166.9290 114.3807 


ans = 

    46 48 


rect = 

    120.0508 69.5380 167.0508 114.5380 


ans = 

    46 47 

Error using + 
Matrix dimensions must agree. 

現在我採取相同的號碼,並在命令窗口中執行一個meshgrid,結果是正確如下

>> [lm,kl] = meshgrid(120.0508:167.0508,69.5380:114.5380); 
>> size(lm) 

ans = 

    46 48 

什麼也許對於這種異常的原因嗎?

+0

使用'format long g;',然後再次顯示兩個矩形數組。你會發現它們之間有一個小的差別,這就是爲什麼你會得到不同的'meshgrid'結果。 MATLAB默認顯示最多4個小數點,所以您手動輸入最多4個小數位的數字不能完全捕獲矩形中捕獲的實際數字的整個精度。 – rayryeng

回答

0

您可能正在經歷浮點精度錯誤。爲了使解決方案對小精度錯誤有效,我建議切換到linspace。

[m,n] = meshgrid(linspace(rect(1),rect(3),round(rect(3)-rect(1)+1),linspace(rect(2),rect(4),round(rect(4)-rect(2)+1)) 

作爲一種替代方法,您可以添加一些小數字到第二個值。這將確保差異總是略大於整數距離,而不是略小。

[m,n] = meshgrid(rect(1):(rect(3)+0.1),rect(2):(rect(4)+0.1)); 
+0

謝謝。但是這個小的擾動會導致一個明顯的錯誤,這是由於在我的應用程序的最終輸出中累積(在圖像中跟蹤一個對象),在運行多次迭代時。你知道的其他解決方法? – Nagsaver

+0

我們沒有導致問題的代碼。 – Daniel