0

我知道有时在某些浮点数计算中,R 会做出一些近似,从而导致错误,例如9.143243e-16.

但是,当我只使用只有整数的 3x3 矩阵时,为什么我能得到一个行列式(使用det命令)?9.143243e-16

9.143243e-16我只有整数的情况下,从哪里来?只涉及整数的行列式应该给出一个整数,对吗?

先感谢您。

PS:这是一个示例(4x4,但我也可以找到 3x3 的示例)(在 R 软件 x86 版本上):

C=matrix(c(9,3,12,6,-3,-1,-4,-2,2,-2,4,0,5,-1,8,2),4,4,byrow=TRUE)
det(C)
[1] -1.923137e-30
4

1 回答 1

4

作为一般规则,您永远不应该期望从浮点计算中得到准确的答案。您是正确的,原则上,仅涉及加法、减法和乘法的整数矩阵的行列式应该给出整数结果。如果 R 使用朴素算法来计算行列式,这将(可能)是这种情况。

然而,朴素算法涉及对所有 N 的求和!排列,这是非常低效的,因此 R 使用了其他方法。我不知道这个方法是什么——如果你愿意,你可以查看 C 源代码,但我的猜测是他们进行矩阵分解X=LU然后 return det(X)=det(L)det(U),其中 和 的行列式LU涉及对角线的乘法。

通过查看功能可以找到更多信息det,如下所示。正如你所看到的,它实际上做的是计算行列式的对数,然后取幂,所以没有理由相信结果会是一个整数。

> det
function (x, ...) 
{
    z <- determinant(x, logarithm = TRUE, ...)
    c(z$sign * exp(z$modulus))
}
于 2013-10-18T10:35:02.803 回答