isSymmetric.matrix {base} vs is.symmetric.matrix {LaplacesDe



在尝试为Dirichlet过程Gibbs Sampler编写代码时,使用Normal-Wishart模型,我得到了一个错误,即我想使用的矩阵作为后验的比例矩阵是不对称的。我自己也试了一下,得到了以下

is.symmetric.matrix(solve(cov(data)))

结果为FALSE作为输出。此外,cov(data)是一个对称矩阵,这应该使solve(cov(data))也是一个对称矩阵。虽然我尝试了基本包等效函数来检查矩阵是否对称

isSymmetric.matrix(solve(cov(data)))

我得到了一个TRUE作为答案

知道为什么会这样吗?

区别在于两个函数如何度量相等。

LaplacesDemon::is.symmetric.matrix使用严格相等

 return(sum(x == t(x)) == (nrow(x)^2))

在比较浮点数时可能会出现问题:参见为什么这些数字不相等?要使用这个函数,一种方法是将协方差矩阵舍入。

isSymmetric.matrix使用all.equal:如果数字等于一个公差

all.equal(object, t(object), tolerance = tol, ...)

相关内容

  • 没有找到相关文章

最新更新