用矩阵代数求解长方程

时间:2018-07-07 03:17:29

标签: r matrix

我正在尝试使用矩阵代数求解下面的长方程。我已经能够做到。但是,我的解决方案似乎过于复杂。我必须将方程式分成三部分,分别由如下所示的#####描绘:

有人可以提出更有效的解决方案吗?抱歉,这个问题是否在其他论坛上。我想它可以被视为编程问题或矩阵代数问题。

这是等式:

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  )

这是我的解决方法。

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

1 个答案:

答案 0 :(得分:0)

我想出了一个效率更高的解决方案。

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