r中对角矩阵的逆

问题描述

我想对这个子集对角矩阵求逆(我希望我以正确的方式创建了一个dput):

dput(DMIdiag[1:20,1:20])
structure(c(581.166666666667,5397.42,1254652.485,15164.7616666667,3721176.8,1805.11333333333,266406189.456667,478590.468333333,508510.586666667,348034.096666667,945785.841666667,1056505.53666667,1389813.64166667,28585.2133333333,713675.006666667,661456.686666667,53533.9066666667,7291.31666666667,49375.4466666667,807758.686666667
),.Dim = c(20L,20L))

我的代码:

DMI <- p + rowSums(Z,na.rm = TRUE)*1 #p is a vector and Z is a matrix
DMIdiag <- diag(DMI) #produces the matrix above
DMIinv <- solve(DMIdiag)

运行最后一行会给我:

Error in solve.default(DMIdiag) : 
  Lapack routine dgesv: system is exactly singular: U[173,173] = 0

我什至不明白这个矩阵是如何奇异的,即使这是问题所在?

解决方法

通过将对角矩阵的对角分量替换为对角矩阵的倒数,可以获得对角矩阵的逆。因此,如果您这样做

DMIinv <- DMIDiag
diag(DMIinv) <- 1/diag(DMIDiag)

然后DMIinv将是DMIDiag的倒数,如我们所显示:

DMIDiag %*% DMIinv
#>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
#>  [1,]    1    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [2,]    0    1    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [3,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [4,]    0    0    0    1    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [5,]    0    0    0    0    1    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [6,]    0    0    0    0    0    1    0    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [7,]    0    0    0    0    0    0    1    0    0     0     0     0     0     0     0     0     0     0     0     0
#>  [8,]    0    0    0    0    0    0    0    1    0     0     0     0     0     0     0     0     0     0     0     0
#>  [9,]    0    0    0    0    0    0    0    0    1     0     0     0     0     0     0     0     0     0     0     0
#> [10,]    0    0    0    0    0    0    0    0    0     1     0     0     0     0     0     0     0     0     0     0
#> [11,]    0    0    0    0    0    0    0    0    0     0     1     0     0     0     0     0     0     0     0     0
#> [12,]    0    0    0    0    0    0    0    0    0     0     0     1     0     0     0     0     0     0     0     0
#> [13,]    0    0    0    0    0    0    0    0    0     0     0     0     1     0     0     0     0     0     0     0
#> [14,]    0    0    0    0    0    0    0    0    0     0     0     0     0     1     0     0     0     0     0     0
#> [15,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     1     0     0     0     0     0
#> [16,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     1     0     0     0     0
#> [17,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     1     0     0     0
#> [18,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     1     0     0
#> [19,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     1     0
#> [20,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     1

这是20 x 20的单位矩阵。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...