在R编程中,关于逆矩阵及其乘法

时间:2013-03-22 16:24:03

标签: r matrix-inverse

这是我从[初学者指南到R]

的练习中解决的问题
> Q
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    2    1
[3,]    2    3    0
> solve(Q)
      [,1]  [,2]  [,3]
[1,] -0.12  0.36 -0.16
[2,]  0.08 -0.24  0.44
[3,]  0.32  0.04 -0.24
> solve(Q)%*%Q
     [,1]          [,2] [,3]
[1,]    1 -2.775558e-17    0
[2,]    0  1.000000e+00    0
[3,]    0  0.000000e+00    1

我想知道为什么我无法得到单一矩阵出现的正确答案。

2 个答案:

答案 0 :(得分:6)

在最终结果上使用zapsmall功能。由于浮点表示和舍入误差,除了简单的算术(甚至有时)之外,将导致值非常接近,但与预期的不完全相同。在这种情况下,您看到的值在第一个非零数字之前的小数位后面有16 0。 zapsmall函数会将这些小的,基本上为0的值转换为0,以便您看到的内容符合您的预期。

答案 1 :(得分:4)

这不是编程错误,这是所谓的“浮点运算”的结果。舍入到合理的长度,您将获得单位矩阵:

Q2 <- solve(Q)%*%Q
round(Q2, 4)

要了解有关浮点算术的更多信息go here