我有一个通过向量外积之和生成的矩阵emat
。它应该是对称且正定的。我发现
solve(emat) %*% solve(emat)
生成不同的结果
bmat <- solve(emat)
bmat %*% t(bmat)
事实上,两者差异很大(emat
的打印输出被 R 缩短了)。
> emat
V1 V2 V3
1 170.2939 15.77391 110.75499
2 15.7739 444.57862 8.87082
3 110.7550 8.87082 72.03669
> solve(emat) %*% solve(emat) - bmat %*% t(bmat)
1 2 3
V1 -1024 48.00000 0
V2 8 -0.21875 0
V3 2048 -72.00000 0
但事实不应该如此。
这是一个错误吗?还是精度问题?或者它与 R 如何处理存储在内存中的矩阵有关?
最佳答案
问题可能出在您的 emat 矩阵上。我尝试过,它对我有用。
emat <- matrix(c(2,-1,0,-1,2,-1,0,-1,2),3,3)
# check your matrix to see if it is positive definite matrix or not
library(matrixcalc)
is.positive.definite(emat)
bmat <- solve(emat)
# the result of the following is zero matrix
solve(emat) %*% solve(emat) - bmat %*% t(bmat)
如果您的矩阵不对称(因此不是正定矩阵),则结果不会为零,因为 emat 不等于 t(emat)。
关于R 矩阵求逆的不一致乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960615/