2

这是我练习[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

我想知道为什么我不能得到应该出现单位矩阵的正确答案。

4

2 回答 2

6

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

于 2013-03-22T16:33:50.280 回答
4

这不是编程错误,这是所谓的“浮点运算”的结果。四舍五入到一个合理的长度,你会得到单位矩阵:

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

要了解有关浮点运算的更多信息,请访问此处

于 2013-03-22T16:32:27.180 回答