Solving simultaneous equations with R

后端 未结 4 1141
迷失自我
迷失自我 2020-12-04 21:56

Suppose I have the following equations:

 x + 2y + 3z = 20  
2x + 5y + 9z = 100  
5x + 7y + 8z = 200

How do I solve these equations for

相关标签:
4条回答
  • 2020-12-04 22:19

    For clarity, I modified the way the matrices were constructed in the previous answer.

    a <- rbind(c(1, 2, 3), 
               c(2, 5, 9), 
               c(5, 7, 8))
    b <- c(20, 100, 200)
    solve(a, b)
    

    In case we need to display fractions:

    library(MASS)
    fractions(solve(a, b))
    
    0 讨论(0)
  • 2020-12-04 22:29

    This should work

    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
    
    0 讨论(0)
  • 2020-12-04 22:34

    Another approach is to model the equations using lm as follows:

    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)))
    

    which produces

    Coefficients:
       x     y     z  
     320  -360   140
    

    If you use the tibble package you can even make it read just like the original equations:

    lm(b ~ . + 0, 
       tibble::tribble(
         ~x, ~y, ~z,  ~b,
          1,  2,  3,  20,
          2,  5,  9, 100,
          5,  7,  8, 200))
    

    which produces the same output.

    0 讨论(0)
  • 2020-12-04 22:34
    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
    

    Note that this is a square matrix!

    0 讨论(0)
提交回复
热议问题