无法使用solve()或ginv()反转R中的矩阵

时间:2012-06-14 18:43:54

标签: r optimization matrix matrix-inverse

TL / DR

是否有人知道允许使用tikhonov正则化来求解线性系统的函数或例程?更一般地说,正确解决线性系统的功能或程序,无论是好还是病态?

详细信息

使用R标准函数solve和ginv找到正确的逆矩阵存在很大问题。我不明白为什么解决或ginv无法正确反转某些矩阵。例如,反转以下矩阵$ X $ $(4 \ times 4)$:

[r1] 112    114.02675   -99.0725    48.21424
[r2] 114.02675  116.09108   -100.91021  49.01754
[r3] -99.0725   -100.91021  89.97304    -39.267
[r4] 48.21424   49.01754    -39.267         26.11804

给出了这个奇怪的结果$ X ^ { - 1} $:

[r1]  7581993.46   -7459378.79  -46534.6234 -66885.6052
[r2] -7459378.79   7338753.44   45787.7223  65800.3842
[r3] -46534.62     45787.72 290.6085    407.4297
[r4]  66885.61     65800.38 407.4297    592.1243

MS Excel提供了一个正确的:

[r1] 290607.5736   -285895.9835 -1773.086548    -2570.2266
[r2] -285895.9835  281267.2032  1749.988341 2524.997062
[r3] -1773.086548  1749.988341  15.81951395 12.59978592
[r4] -2570.2266    2524.997062  12.59978592 24.81554691

我知道这是正确的解决方案,因为$ XX ^ { - 1} $给出了Identity矩阵(不是使用solve或ginv计算的逆矩阵)。

  1. 有没有人有解释?

  2. 如何在R中计算正确的逆矩阵?

  3. 感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我刚看到这个问题。让我分享一些信息:

我使用 Microsoft R open v. 4.0。 看看我的结果:

> a = c(112,    114.02675,   -99.0725,    48.21424,
+ 114.02675,  116.09108,   -100.91021,  49.01754,
+ -99.0725,   -100.91021,  89.97304,    -39.267,
+ 48.21424,   49.01754,    -39.267,         26.11804)
> 
> matA = matrix(a, ncol=4)
> matA
          [,1]       [,2]       [,3]      [,4]
[1,] 112.00000  114.02675  -99.07250  48.21424
[2,] 114.02675  116.09108 -100.91021  49.01754
[3,] -99.07250 -100.91021   89.97304 -39.26700
[4,]  48.21424   49.01754  -39.26700  26.11804
> 
> solve(matA)
            [,1]        [,2]        [,3]        [,4]
[1,]  290607.572 -285895.982 -1773.08654 -2570.22659
[2,] -285895.982  281267.202  1749.98833  2524.99705
[3,]   -1773.087    1749.988    15.81951    12.59979
[4,]   -2570.227    2524.997    12.59979    24.81555