求解R中的线性方程组

tquggr8v  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(204)

我把R中的矩阵方程写成这样

m1 <- rbind(c(1,-2,-1,3),
            c(-2,4,5,-5),
            c(3,-6,-6,8))
             
m2 <- c(0,3,2)

sol <-solve(m1, m2)

但结果表明:

Error in solve.default(m1, m2) : 'a' (3 x 4) must be square

我可以写代码如何解方程,非常感谢

dohp0rv5

dohp0rv51#

没有解,我们可以通过将m2回归到m1上来确定,并注意到偏差(=残差平方和)不为零--如果有解,那么残差将为零,因此它们的平方和也为零,但即使在这种情况下,给定有4列而只有3行,解也不是唯一的。
我们从非NA系数中看到,列的线性组合跨越2维空间,即平面,并且另一种陈述方式是m2不位于该平面中。

fm <- lm(m2 ~ m1 + 0)
fm
##
## Call:
## lm(formula = m2 ~ m1 + 0)
##
## Coefficients:
##   m11    m12    m13    m14  
## 3.222     NA  1.556     NA  

deviance(fm)
## [1] 8.333333

还应注意,第二列和第四列与NA所示的其他列呈线性关系。事实上,第二列是第一列的-2倍

fm2 <- lm(m1[, 2] ~ m1[, -2] + 0)
## ...
## Coefficients:
## m1[, -2]1  m1[, -2]2  m1[, -2]3  
##        -2          0         NA  

deviance(fm2)
## [1] 0

第四列是第一列的3.3333倍加上第三列的0.3333倍。

fm4 <- lm(m1[, 4] ~ m1[, -4] + 0)
fm4
## ...
## Coefficients:
## m1[, -4]1  m1[, -4]2  m1[, -4]3  
##    3.3333         NA     0.3333  

deviance(fm4)
## [1] 9.321501e-32

如果我们将m2投影到m1的值域上得到m2 a,并用m2 a代替m2,那么第1列和第3列将有唯一的解,而所有4列将有无限多个解,请看https://stats.stackexchange.com/questions/241025/why-is-mathbfy-mathbf-haty-perpendicular-to-the-subspace-spanned-by的第一个答案中的图表。这里的x1和x2向量对应于m1的第1列和第3列,黄色部分是它们跨越的平面。这里的y对应于m2,y是m2 a,m2在平面上的投影。m1的第2列和第4列位于第1列和第4列跨越的黄色区域中,而m2不在其中,这就是为什么使用m2求解时没有解的原因,而m2 a(投影)位于黄色平面中,这就是为什么存在解的原因。
下面我们可以看到,3.222乘以第1列加上1.556乘以第3列等于m2 a,即m2在m1的值域上的投影。

m2a <- fitted(fm) # projection of m2 onto range of m1
fma <- lm(m2a ~ m1[, c(1, 3)] + 0)
fma
## ...
## Coefficients:
## m1[, c(1, 3)]1  m1[, c(1, 3)]2  
##          3.222           1.556  

deviance(fma)
## [1] 4.930381e-32

相关问题