【发布时间】:2018-07-07 03:17:28
【问题描述】:
我正在尝试使用矩阵代数求解下面的长方程。我已经能够这样做了。但是,我的解决方案似乎过于复杂。我不得不将方程分解为由##### 描绘的三个部分,如下所示:
有人可以提出更有效的解决方案吗?对不起,如果这个问题属于不同的论坛。我想它可以被视为编程问题或矩阵代数问题。
这是等式:
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
【问题讨论】:
-
您是否要求进行代码审查?因为Code Review 有一个单独的站点。与其只是转储代码,不如用文字描述你需要完成的事情。可能已经有一些函数可以完全满足您的需求(但很难仅从代码中猜出意图)。
a1、a2、...、c4的所有值在实际应用程序中真的是单独的变量吗?你如何将这些读入R?手写吗? -
是的,我正在手动输入值。一般问题类似于将所有可能的组合相乘并相加。但是,我认为这不是一个足够普遍的方法。我需要离开电脑几个小时,但可以稍后再回来查看。