在R中计算矩阵行列式的替代方法

4
因为数学上的事实是,如果一个矩阵的行列式等于零,那么这个矩阵必须是奇异的(不可逆)。现在,我遇到的问题是,当我计算矩阵的行列式时它等于零,但是当我计算逆矩阵时它是存在的。我认为这可能与 R 计算行列式的方式有关,因为两者不一致。下面是我尝试的代码(我不会打印 solve 的结果,因为矩阵是 100 x 100)。
> Rinv = solve(R)
> 
> det(R)
[1] 0
> 
> #Using a Cholesky Factorization
> L = chol(R)
> Q = t(L)
> 
> det(L)*det(Q)
[1] 0

2
可能是浮点数问题(未打印完整的小数值)。尝试使用 det(R) == 0L - IRTFM
1个回答

8

对于大矩阵,行列式可能会过大或过小,导致 double 精度溢出。行列式是特征值的乘积:例如,如果它们全部为 .0001,则矩阵可逆,但行列式为 1e-400,太小了,只能表示为 0。

您可以查看行列式的对数:

determinant(R, logarithm=TRUE)

或者直接使用特征值。
eigen(R, only.values=TRUE)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接