我想检查22x22矩阵的行列式是否为整数的平方。
所以我有
> det(M)
[1] 1.849688e+29
> sqrt(det(M))
[1] 4.3008e+14
但是现在我看不到该数字的十进制数字。
所以,如果我跑步
> options(digits=22)
> sqrt(det(M))
[1] 430080000000001.1875000
我有这个结果,这意味着它不是整数的平方。
所以,当我使用以下功能时
check.integer <- function(N){
!length(grep("[^[:digit:]]", as.character(N)))
}
结果是数字是整数。
您的check.integer
函数不会真正检查某些东西是否是整数。它检查R的某物的字符表示是否恰好具有一个非数字字符。这是做事的非常糟糕的方式。您想知道某个事物是否真的是整数,而不仅仅是看起来是否像整数。
此外,is.integer
R中已经有功能。
但这可能对您没有帮助。R将仅精确地表示直到某一点的整数,这是存储在中的许多事物之一.Machine
。尤其是:
.Machine$integer.max
如果要检查矩阵行列式是否可能大于.Machine$integer.max
R中的平方,则可以考虑采用任意精度。Rmpfr软件包应该能够为您完成所有这一切。它使您可以拥有任意精度的矩阵,具有自己的determinant
功能,并且具有自己的is.whole
功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句