【问题标题】:Error in the matrix Inverse逆矩阵中的误差
【发布时间】:2015-02-13 22:46:58
【问题描述】:

我有一个协方差矩阵的估计

我想取这个矩阵的逆,R给我以下错误

A=[ 3529861.470  8785861.47  6920.344 17120.34;
     8785861.470 26209861.47 17120.344 51920.34;
    6920.344    17120.34    14.000    34.00;
    17120.344    51920.34    34.000   104.00]

"solve.default(l) 中的错误:系统在计算上是奇异的: 倒数条件数 = 2.14511e-22"。

然而,Matlab 进行逆计算而没有给出任何错误信息。有谁知道 R 给我错误的原因?是否有其他方法来计算逆

【问题讨论】:

  • Matlab 给出的条件数 (cond(A)) 为 9.5e12,因此矩阵实际上接近奇异矩阵。也许 R 只是比 Matlab 有更严格的阈值来声明矩阵接近奇异
  • 您的示例不可重现。 solve() 反转这个矩阵没有问题。
  • 那是因为求解使用高斯消去避免行列式计算
  • @Spandy MATLAB 的 rcond 返回 7.5E-14。你确定 MATLAB 和 R 有相同的矩阵吗?
  • solve 在 R 中反转这个矩阵,对我来说也没有错误或警告。

标签: r matlab matrix-inverse


【解决方案1】:
A <- matrix(c(3529861.470,8785861.47,6920.344,17120.34,
       8785861.470,26209861.47,17120.344,51920.34,
   6920.344,17120.34,14.000,34.00,
   17120.344,51920.34,34.000,104.00),
     nrow=4,byrow=TRUE)

solve(A) ## works on my system

##              [,1]         [,2]         [,3]        [,4]
## [1,]   -1.2515442    0.7617239     535.4871   -349.3141
## [2,]    0.7617072   -0.4635922    -325.9051    212.5957
## [3,]  535.4884664 -325.9130639 -229114.3516 149458.2734
## [4,] -349.3061387  212.5955306  149454.4973 -97492.7335

eigen(A)$values
## [1]  2.921525e+07  5.245875e+05  1.440703e+00 -3.061760e-06

rcond(A)  ## condition number
## [1] 7.516179e-14

如果您在反转矩阵时遇到问题,您应该能够调整tol 参数,但这当然需要您自担风险——您忽略了矩阵运算可能在数值上不稳定的警告。

这是与

R Under development (unstable) (2015-02-11 r67792)
Platform: i686-pc-linux-gnu (32-bit)
Running under: Ubuntu precise (12.04.5 LTS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多