简体   繁体   中英

solving long equation with matrix algebra

I am trying to solve the long equation below using matrix algebra. I have been able to do so. However, my solution seems overly complex. I had to break the equation into three parts delineated by the ##### shown below:

Could someone suggest a more efficient solution? Sorry if this question belongs on a different forum. I suppose it could be viewed as either a programming issue or a matrix algebra issue.

Here is the equation:

a1 <- 0.1
a2 <- 0.2
a3 <- 0.3
a4 <- 0.4
b1 <- 1
b2 <- 2
b3 <- 3
b4 <- 4
b5 <- 5
b6 <- 6
b7 <- 7
b8 <- 8
c1 <- 10
c2 <- 20
c3 <- 30
c4 <- 40

x1 <- (a1 * b1 * c1  +
       a2 * b1 * c1  +
       a3 * b2 * c1  +
       a4 * b2 * c1  +
       a1 * b3 * c1  +
       a2 * b3 * c1  +
       a3 * b4 * c1  +
       a4 * b4 * c1  +
       a1 * b1 * c2  +
       a2 * b1 * c2  +
       a3 * b2 * c2  +
       a4 * b2 * c2  +
       a1 * b3 * c2  +
       a2 * b3 * c2  +
       a3 * b4 * c2  +
       a4 * b4 * c2  +
#####
       a1 * b5 * c3  +
       a2 * b5 * c3  +
       a1 * b6 * c3  +
       a2 * b6 * c3  +
       a1 * b5 * c4  +
       a2 * b5 * c4  +
       a1 * b6 * c4  +
       a2 * b6 * c4  +
#####
       a3 * b7 * c3  +
       a4 * b7 * c3  +
       a3 * b8 * c3  +
       a4 * b8 * c3  +
       a3 * b7 * c4  +
       a4 * b7 * c4  +
       a3 * b8 * c4  +
       a4 * b8 * c4  )

Here is my solution.

m.a1     <- matrix(c(a1, a2, a3, a4), nrow=1, ncol=4, byrow = TRUE) 
m.b1     <- matrix(c(b1,  b3,
                     b1,  b3,
                     b2,  b4,
                     b2,  b4), nrow=4, ncol=2, byrow=TRUE)
m.ab1    <- m.a1 %*% m.b1
m.c1     <- matrix(c(c1, c2,
                     c1, c2), nrow=2, ncol=2, byrow=TRUE)
m.abc1   <- m.ab1 %*% m.c1
#####
m.a2     <- matrix(c(a1, a2, a1, a2), nrow=1, ncol=4, byrow = TRUE) 
m.b2     <- matrix(c(b5,
                     b5,
                     b6,
                     b6), nrow=4, ncol=1, byrow=TRUE)
m.ab2    <- m.a2 %*% m.b2
m.c2     <- matrix(c(c3, c4), nrow=1, ncol=2, byrow=TRUE)
m.abc2   <- m.ab2 %*% m.c2
#####
m.a3     <- matrix(c(a3, a4, a3, a4), nrow=1, ncol=4, byrow = TRUE) 
m.b3     <- matrix(c(b7,
                     b7,
                     b8,
                     b8), nrow=4, ncol=1, byrow=TRUE)
m.ab3    <- m.a3 %*% m.b3
m.c3     <- matrix(c(c3, c4), nrow=1, ncol=2, byrow=TRUE)
m.abc3   <- m.ab3 %*% m.c3
#####
x2 <- sum(m.abc1) + sum(m.abc2) + sum(m.abc3)
x1 == x2
#[1] TRUE

I figured out a solution that seems much more efficient.

a1 <- 0.1
a2 <- 0.2
a3 <- 0.3
a4 <- 0.4
b1 <- 1
b2 <- 2
b3 <- 3
b4 <- 4
b5 <- 5
b6 <- 6
b7 <- 7
b8 <- 8
c1 <- 10
c2 <- 20
c3 <- 30
c4 <- 40

x1 <- (a1 * b1 * c1  +
       a2 * b1 * c1  +
       a3 * b2 * c1  +
       a4 * b2 * c1  +
       a1 * b3 * c1  +
       a2 * b3 * c1  +
       a3 * b4 * c1  +
       a4 * b4 * c1  +

       a1 * b1 * c2  +
       a2 * b1 * c2  +
       a3 * b2 * c2  +
       a4 * b2 * c2  +
       a1 * b3 * c2  +
       a2 * b3 * c2  +
       a3 * b4 * c2  +
       a4 * b4 * c2  +

       a1 * b5 * c3  +
       a2 * b5 * c3  +
       a3 * b7 * c3  +
       a4 * b7 * c3  +
       a1 * b6 * c3  +
       a2 * b6 * c3  +
       a3 * b8 * c3  +
       a4 * b8 * c3  +

       a1 * b5 * c4  +
       a2 * b5 * c4  +
       a3 * b7 * c4  +
       a4 * b7 * c4  +
       a1 * b6 * c4  +
       a2 * b6 * c4  +
       a3 * b8 * c4  +
       a4 * b8 * c4  )

m.a     <- matrix(c(a1, a2, a3, a4), nrow=1, ncol=4, byrow = TRUE)

m.b     <- matrix(c(b1,  b3,  b5,  b6,
                    b1,  b3,  b5,  b6,
                    b2,  b4,  b7,  b8,
                    b2,  b4,  b7,  b8), nrow=4, ncol=4, byrow=TRUE)

m.ab    <- m.a1 %*% m.b1

m.c     <- matrix(c(c1, c2,
                    c1, c2,
                    c3, c4,
                    c3, c4), nrow=4, ncol=2, byrow=TRUE)

m.abc   <- m.ab %*% m.c
x3 <- sum(m.abc)

x3 == x1
#[1] TRUE
x3 == x2
#[1] TRUE

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM