R中的逆矩阵乘法不给出单位矩阵

时间:2015-10-16 19:07:08

标签: 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

2 个答案:

答案 0 :(得分:5)

由于浮点精度误差,你不会因为非对角线而回到零。

如果你进行回合,你可以看到这确实是单位矩阵:

round(D %*% solve(D))

答案 1 :(得分:0)

正如弗兰克所说,这是精确错误。通常e-16 ish数字和更小是这种情况发生的好指标。还要考虑

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

显然,我们认为这是0。

除了r2evans的答案之外,这个问题的答案还有更多关于任何语言的细节。 Why are these numbers not equal?