2014-01-23 4 views
0

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

Любые идеи о том, как бы я это сделал?

+5

Этот вопрос не соответствует теме, потому что речь идет о математике. –

+0

... в то время как вы могли бы сделать это с помощью R ** в принципе ** каким-то алгоритмом грубой силы, на практике, вероятно, гораздо лучше попытаться решить проблему, подумав об этом ... могли бы мы иметь немного больше контекста, пожалуйста? Вы можете начать с создания всех 6^6 комбинаций записей через 'xx <- do.call (expand.grid, replicate (6,1: 6, simplify = FALSE))', поместить их в симметричную матрицу и вычислить детерминант - это всего около 45000 записей, поэтому ** ** можно было бы сделать грубой силой. –

ответ

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.

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)) 

Математическое предположения/гипотеза, является ли максимальной-ой матрица всегда матрица с 1 по диагонали и n на Недиагональном, или это зависит от матрицы является нечетным против даже ... и как это доказать.