我正在使用 R 来尝试找到对称 3x3 矩阵的最大可能行列式,其所有条目都位于整数集合 {1,2,3,4,5,6} 可以具有?
有什么想法我会怎么做?
在选择 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。
我比@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 矩阵是否始终是对角线和n
非对角线为 1 的矩阵,或者这是否取决于矩阵是奇数还是偶数......以及如何证明这一点。