如何求解/转换方程组(线性代数/R)

问题描述 投票:0回答:2

假设我有以下矩阵形式的方程组,如何获得预期的输出?

例一:

#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)
),但它不起作用。也许我用错了?

r matrix linear-algebra
2个回答
3
投票

修复问题输入中的错误,我们可以使用

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

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
© www.soinside.com 2019 - 2024. All rights reserved.