系统在计算上是单数的:R中的倒数条件数

时间:2018-06-19 12:44:40

标签: r matrix solver

x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
solve(c)

我收到错误消息:

  

solve.default(c)中的错误:系统在计算上是单个的:   互惠条件编号= 6.57889e-18

我一直在试图找出问题背后的原因,而Stack Overflow上的其他线程都认为该问题可能是由于奇异矩阵,高度相关的变量,线性组合等引起的。但是,我认为{{ 1}}可以避免上述问题。

对于另一个我正在使用det()的矩阵给出rnorm,但是它仍然可以与8.313969e-95求逆。

1 个答案:

答案 0 :(得分:3)

两个基本线性代数性质:

  1. 奇异(正方形)矩阵是不可逆的(正方形)矩阵。
  2. 矩阵的行列式等于零是不可逆的。

如果您检查

set.seed(2018);
x <- matrix(rnorm(80, mean = 0, sd = 0.1), 8, 8)
c <- cov(x)
det(c)
#[1] -3.109158e-38

实际上,det(c)为零(在机器精度范围内);因此c不可逆,而这正是solve(c)试图做的。

PS 1:看看?solve,看得出solve(a)将返回a的反数。
PS 2:关于协方差矩阵的行列式的解释,在交叉验证中有一个nice post。看一看,了解为什么看到的东西。