R 计算矩阵的逆:系统在计算上是奇异的[错误]

R 计算矩阵的逆:系统在计算上是奇异的[错误],r,matrix,matrix-inverse,R,Matrix,Matrix Inverse,我有一个矩阵m: (m <- matrix(c(26,14,24,14,20,42,24,42,90), 3)) # [,1] [,2] [,3] # [1,] 26 14 24 # [2,] 14 20 42 # [3,] 24 42 90 求解时出错。默认值(m): 系统在计算上是奇异的:倒数条件数=6.21104e-18 问题是这些列不是线性独立的 第一列*-1/3+第二列*7/3等于第三列 -m[, 1] * 1/3 + 7/3 *

我有一个矩阵
m

(m <- matrix(c(26,14,24,14,20,42,24,42,90), 3))

#      [,1] [,2] [,3]
# [1,]   26   14   24
# [2,]   14   20   42
# [3,]   24   42   90
求解时出错。默认值(m): 系统在计算上是奇异的:倒数条件数=6.21104e-18


问题是这些列不是线性独立的

第一列*-1/3+第二列*7/3等于第三列

-m[, 1] * 1/3 + 7/3 * m[, 2]

# [1] 24 42 90

我们可以看到,这在几个方面都必须如此,每个方面都意味着不可逆性:

1)m的行列式为零:

> det(m)
[1] -2.685852e-12
2)m的特征值为零,即
特征值(m)$values[3]
。等价地,
m
的空空间是非空的——它等于
eigen(m)$vectors[,3]

> e <- eigen(m); e
$values
[1]  1.180000e+02  1.800000e+01 -6.446353e-15

$vectors
           [,1]          [,2]       [,3]
[1,] -0.2881854  9.486833e-01  0.1301889
[2,] -0.4116935  1.110223e-16 -0.9113224
[3,] -0.8645563 -3.162278e-01  0.3905667

> N <- e$vector[, 3]  # nullspace
> m %*% N  # shows that N is indeed mapped to zero
             [,1]
[1,] 5.329071e-15
[2,] 0.000000e+00
[3,] 0.000000e+00
4)cholesky分解的对角线上有一个零:

> chol(m, pivot = TRUE)
         [,1]     [,2]      [,3]
[1,] 9.486833 2.529822 4.4271887
[2,] 0.000000 4.427189 0.6324555
[3,] 0.000000 0.000000 0.0000000
attr(,"pivot")
[1] 3 1 2
attr(,"rank")
[1] 2
Warning message:
In chol.default(m, pivot = TRUE) :
  the matrix is either rank-deficient or indefinite
5)
m
不是满秩,即秩小于3:

> attr(chol(m, pivot = TRUE), "rank")
[1] 2
Warning message:
In chol.default(m, pivot = TRUE) :
  the matrix is either rank-deficient or indefinite
注:输入可通过以下方式重复给出:

m <- matrix(c(26, 14, 24, 14, 20, 42, 24, 42, 90), 3)

m您期望的输出是什么?你想找到这个矩阵的广义逆吗?感谢@rawr将其转换为R。嗨,G.Grothendieck,在我的例子中,我遇到了与“求解中的错误。默认值(R,结果$Structure):系统在计算上是奇异的:互易条件数=6.23118e-19”相同的错误消息“。但是,如果我从数据中随机删除一列,它将成功运行。为什么,我发现列之间没有一对相关性>0.9。为什么会发生这种情况?您删除的列位于其他列跨越的子空间中,其余列是线性独立的。
> attr(chol(m, pivot = TRUE), "rank")
[1] 2
Warning message:
In chol.default(m, pivot = TRUE) :
  the matrix is either rank-deficient or indefinite
m <- matrix(c(26, 14, 24, 14, 20, 42, 24, 42, 90), 3)