Нахождение наибольшего определителя в симметричной матрице с ограниченными целочисленными значениями на R

Я использую R, чтобы попытаться найти максимально возможный определитель, который может иметь симметричная матрица 3x3, все записи которой лежат в наборе целых чисел {1,2,3,4,5,6}?

Есть идеи, как мне поступить?

2 ответа

Существует шесть степеней свободы при выборе элементов в симметричной матрице 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 является матрицей с 1 на диагонали и n на недиагональной, или это зависит от того, будет ли матрица нечетной или четной... и как это доказать.

Другие вопросы по тегам