2015-07-01 87 views
3

下一個腳本應該打印出一個7x7全1矩陣,因爲方程式是滿足的。Matlab矩陣乘法和轉置精度

A = rand(5,7); 
B = rand(5,7); 

C = (A' * B)'; 
D = B' * A; 

C == D 

而是這種回答的:

ans = 

1  1  1  1  0  1  1 
1  1  1  1  0  1  0 
1  1  1  1  1  1  1 
1  1  1  1  0  0  0 
1  0  1  1  1  1  1 
0  0  1  1  1  1  1 
0  1  1  0  1  1  1 

我認爲這是一個浮點精度的問題,因爲format long數字在C和D.

  • 什麼不同我做錯了嗎?
  • 它出錯了?
  • 我該如何避免它?
+3

*我認爲這是一個浮點精度問題[*] *。是。因爲'rand'返回浮點數,所以你不應該期望矩陣'C'和'D'完全相等。喜歡'norm(C - D)<= epsilon',其中'epsilon'是一個小的正數。 – Jubobs

回答

3

你不會做任何錯誤的 - 計算機具有有限的精度,並且你的計算顯示它 - 就像1e6 + 0.1 - 1e6(在Matlab中試用它)。避免這種情況的一種方法是使用某個庫來實現任意的精確度 - 但它不會「解決」它,只是將問題推向越來越小的數量。

請參閱以下鏈接,瞭解更多一些的信息:

http://floating-point-gui.de/errors/comparison/

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

順便說一句,format long無關與實際精度,它只是設置的號碼格式爲途徑顯示