2015-10-16 129 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?