在R上找到具有有限整数值的对称矩阵中的最大行列式

时间:2014-01-23 20:55:47

标签: r matrix symmetric

我正在使用R来尝试找到最大可能的决定因素,即对称的3x3矩阵,其所有条目都位于整数集{1,2,3,4,5,6}中可以有?

我有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

在3x3对称矩阵中选择元素有六个自由度(3个主对角条目和3个非对角条目)。这些中的每一个都可以采用6个不同的值,总共46,656个可能的矩阵。我们可以强行检查所有决定因素:

get.det = function(x) {
    det(matrix(c(x[1], x[2], x[3], x[2], x[4], x[5], x[3], x[5], x[6]), nrow=3))
}

vals = expand.grid(1:6, 1:6, 1:6, 1:6, 1:6, 1:6)
dets = apply(vals, 1, get.det)
vals[which.max(dets),]
#      Var1 Var2 Var3 Var4 Var5 Var6
# 6691    1    6    6    1    6    1

所以你的矩阵是:

[1 6 6
 6 1 6
 6 6 1]

带有行列式325。

答案 1 :(得分:2)

我比@josilber慢一点,得出相同的结论(我的答案是位更一般)

d <- 3
n <- d*(d+1)/2
xx <- do.call(expand.grid,replicate(n,1:n,simplify=FALSE))

构造对称矩阵:

mm <- matrix(nrow=d,ncol=d)  ## define once, outside loop
m <- function(x) {
   mm[lower.tri(mm,diag=TRUE)] <- unlist(x)
   mm[upper.tri(mm)] <- t(mm)[upper.tri(mm)]
   mm
}

获取矩阵列表:

library(plyr)
mList <- alply(xx,1,m,.progress="text")

获取每个矩阵的决定因素:

detvec <- laply(mList,det)

找到最大值:

max(detvec)  ## 325
mList[[which.max(detvec)]]

只是为了好玩:

plot(table(detvec))

数学猜测/猜想是max-det矩阵是否始终是对角线上的1和非对角线上的n的矩阵,或者这取决于矩阵是奇数还是偶数。以及如何证明这一点。