假设我有以下等式:
x + 2y + 3z = 20
2x + 5y + 9z = 100
5x + 7y + 8z = 200
我如何求解x
,y
和的这些方程z
?如果可能的话,我想使用 R 或任何其他计算机工具来求解这些方程。
假设我有以下等式:
x + 2y + 3z = 20
2x + 5y + 9z = 100
5x + 7y + 8z = 200
我如何求解x
,y
和的这些方程z
?如果可能的话,我想使用 R 或任何其他计算机工具来求解这些方程。
这应该工作
A <- matrix(data=c(1, 2, 3, 2, 5, 9, 5, 7, 8), nrow=3, ncol=3, byrow=TRUE)
b <- matrix(data=c(20, 100, 200), nrow=3, ncol=1, byrow=FALSE)
round(solve(A, b), 3)
[,1]
[1,] 320
[2,] -360
[3,] 140
为清楚起见,我修改了上一个答案中构建矩阵的方式。
a <- rbind(c(1, 2, 3),
c(2, 5, 9),
c(5, 7, 8))
b <- c(20, 100, 200)
solve(a, b)
如果我们需要显示分数:
library(MASS)
fractions(solve(a, b))
另一种方法是使用以下方法对方程进行建模lm
:
lm(b ~ . + 0,
data = data.frame(x = c(1, 2, 5),
y = c(2, 5, 7),
z = c(3, 9, 8),
b = c(20, 100, 200)))
产生
Coefficients:
x y z
320 -360 140
如果你使用这个tibble
包,你甚至可以让它像原始方程一样读取:
lm(b ~ . + 0,
tibble::tribble(
~x, ~y, ~z, ~b,
1, 2, 3, 20,
2, 5, 9, 100,
5, 7, 8, 200))
产生相同的输出。
A <- matrix(data=c(1, 2, 3, 2, 5, 9, 5, 7, 8),nrow=3,ncol=3,byrow=TRUE)
b <- matrix(data=c(20, 100, 200),nrow=3,ncol=1,byrow=FALSE)
solve(A)%*% b
请注意,这是一个方阵!