R 矩阵求逆的不一致乘积

标签 r matrix precision matrix-multiplication matrix-inverse

我有一个通过向量外积之和生成的矩阵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)

enter image description here

如果您的矩阵不对称(因此不是正定矩阵),则结果不会为零,因为 emat 不等于 t(emat)。

enter image description here

关于R 矩阵求逆的不一致乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960615/

相关文章:

python - sympy 中矩阵的按列(或按行)运算

javascript - Math.pow(64, 1/3) 返回不精确的 4

r - 将具有连续日期的行合并为具有开始日期和结束日期的单行

根据 data.table 中的子字符串对选定列进行行操作

r - 在 R 中创建向量序列

sorting - 如何按幂 bi 矩阵的降序对列日期进行排序

r - 修复随机列表中的第一个和最后一个数字

javascript - WebGL 2D Canvas 点转换为 3D 世界点

python - 使用浮点 NumPy 数组进行比较和相关操作

double - 双类型的 OpenCL 问题