我有以下 R 矩阵,它是 2x3 和 3x3 子矩阵的组合,它可以是 2 个以上具有不同维度的子矩阵(例如 m1xp 和 m2xp 和 m3xp,其中 m1、m2、m3
A2 <- list(rbind(c(1,1,1),c(-1,1,-1)),
rbind(c(-1,1,1),c(1,-1,2),c(2,-1,2)))
library(Matrix)
A2 <- as.matrix(Matrix::bdiag(A2))
Rhs <- matrix(c(0,5,0.5,4),nrow = 4)
beta <- c(rep(1.2,3),c(0.5,0.2,0.1))
> A2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 0 0 0
[2,] -1 1 -1 0 0 0
[3,] 0 0 0 -1 1 1
[4,] 0 0 0 1 -1 2
[5,] 0 0 0 2 -1 2
我想获得第一个子矩阵和第二个子矩阵之间的所有行索引组合来解决线性优化问题。该组合必须来自两个子矩阵,然后求解新的 beta,然后检查条件是否成立Aq %*% beta == Rhs
满足了,就停下来。如果没有,则采取另一种组合。我认为下面是子矩阵之间的所有行组合:
来自第一子矩阵和第二子矩阵的组合
Aq <- A2[c(1,3),]
Aq <- A2[c(1,4),]
Aq <- A2[c(1,5),]
Aq <- A2[c(2,3),]
Aq <- A2[c(2,4),]
Aq <- A2[c(2,5),]
然后,组合为第一个矩阵中的一个和第二个矩阵中的 2 个
Aq <- A2[c(1,3,4),]
Aq <- A2[c(1,3,5),]
Aq <- A2[c(1,4,5),]
Aq <- A2[c(2,3,4),]
Aq <- A2[c(2,3,5),]
Aq <- A2[c(2,4,5),]
然后,组合为第一个矩阵中的一个和第二个矩阵中的 3 个
Aq <- A2[c(1,3,4,5),]
Aq <- A2[c(2,3,4,5),]
然后,组合为第一个矩阵中的 2 和第二个矩阵中的 1
Aq <- A2[c(1,2,3),]
Aq <- A2[c(1,2,4),]
Aq <- A2[c(1,2,5),]
然后,组合为第一个矩阵中的 2 和第二个矩阵中的 2
Aq <- A2[c(1,2,3,4),]
Aq <- A2[c(1,2,3,5),]
Aq <- A2[c(1,2,4,5),]
然后,组合为第一个矩阵中的 2 和第二个矩阵中的 3
Aq <- A2[c(1,2,3,4,5),]
有没有更好的方法来获得所有组合?
然后我想创建一个循环,一次在上述组合上选择一个,并检查是否
if (Aq %*% beta == Rhs) {
break
} else {
TAKE ANOTHER COMBINATION Aq
}
请注意,我可以有两个以上的子矩阵来创建块矩阵。然后我必须创建第一个、第二个和第三个矩阵之间的所有行组合。我希望在 R 中可以有简单的方法。我尝试过 grid.expand 函数,但它没有给我所需的输出。