首页 > 解决方案 > R矩阵求逆的不一致乘积

问题描述

我有一个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 如何处理存储在内存中的矩阵有关?

标签: rmatrixprecisionmatrix-multiplicationmatrix-inverse

解决方案


问题可能来自您的 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)。

在此处输入图像描述


推荐阅读