2015-10-16 103 views
0

我使用%*%來乘以一個矩陣及其逆矩陣。我沒有得到身份矩陣。我錯過了什麼?與R中的逆矩陣相乘並不給出單位矩陣

D 

    [,1] [,2] [,3] 
[1,] 1 2 3 

[2,] 4 2 1 

[3,] 2 2 0 

solve(D) 

     [,1]  [,2]  [,3] 
[1,] -0.1428571 0.4285714 -0.2857143 

[2,] 0.1428571 -0.4285714 0.7857143 

[3,] 0.2857143 0.1428571 -0.4285714 

D %*% solve(D) 

      [,1]   [,2]   [,3] 
[1,] 1.000000e+00 0.000000e+00 -2.220446e-16 

[2,] -5.551115e-17 1.000000e+00 0.000000e+00 

[3,] -1.110223e-16 -1.110223e-16 1.000000e+00 
+3

這是身份矩陣,如果你斜視。 'all.equal(diag(3),D%*%solve(D))#TRUE' – Frank

+0

不太明顯,但這是[R FAQ 7.31]的示例(https://cran.r-project。組織/ DOC/FAQ/R-的faq.html#爲什麼-doesn_0027t-R-認爲,這些號碼,是-equal_003f)。 – r2evans

回答

5

由於浮點精度錯誤,您不會回到非對角線零。

你可以看到,這確實是單位矩陣,如果你圓:

round(D %*% solve(D)) 
0

弗蘭克提到,這是精度誤差。通常e-16 ish數字和更小的數字是這種情況的一個很好的指標。還要考慮

> 10/3-3-1/3 
[1] 1.665335e-16 

顯然,我們會認爲這是0

除了r2evans的回答,這個問題的答案有任何語言的一個更爲詳細。 Why are these numbers not equal?