假设我有以下矩阵形式的方程组,如何获得预期的输出?
例一:
#2x+2y+2z
#0x+0y+1z
mat1 <- matrix(c(2, 2, 2, 0, 0, 1), 2, byrow = TRUE)
#want to get x+y+z
u1 <- matrix(c(1,1,1), 1, byrow=TRUE)
Expected output:
exp1 <- matrix(c(0.5,0), 2, byrow=TRUE)
例二:
#1x+1y+1z
#0x+1y+0z
mat2 <- matrix(c(1, 1, 1, 0, 1, 0), 2, byrow = TRUE)
#want to get x+z
u1 <- matrix(c(1,1,1), 1, byrow=TRUE)
Expected output:
exp1 <- matrix(c(1,-1), 2, byrow=TRUE)
我尝试使用 ginv(即
mat1 %*% MASS::ginv(u1)
),但它不起作用。也许我用错了?
修复问题输入中的错误,我们可以使用
ginv
或 lm
。在显示的情况下有一个解决方案,但可能会遇到没有解决方案的类似问题,因此通常建议检查答案。
library(MASS)
mat1 <- matrix(c(2, 2, 2, 0, 0, 1), 2, byrow = TRUE)
u1 <- matrix(c(1,1,1), 1)
t(u1 %*% ginv(mat1))
## [,1]
## [1,] 5.000000e-01
## [2,] 2.220446e-16
matrix(coef(lm(t(u1) ~ t(mat1) + 0)))
## [,1]
## [1,] 0.5
## [2,] 0.0
mat2 <- matrix(c(1, 1, 1, 0, 1, 0), 2, byrow = TRUE)
u2 <- matrix(c(1,0,1), 1)
t(u2 %*% ginv(mat2))
## [,1]
## [1,] 1
## [2,] -1
matrix(coef(lm(t(u2) ~ t(mat2) + 0)))
## [,1]
## [1,] 1
## [2,] -1
使用
solve
功能
solve(tcrossprod(mat1), tcrossprod(mat1, u1))
[,1]
[1,] 0.5
[2,] 0.0
solve(tcrossprod(mat2), tcrossprod(mat2, u2))
[,1]
[1,] 1
[2,] -1