Причину такого поведения легко найти с помощью Trace
. Что происходит, так это то, что ваша функция оценивается внутри Maximize с символом x
, и, поскольку ваш список не содержит символ x
, результат равен нулю. По сути, вы звоните Maximize[0,x,Integers]
, отсюда и результат. Единственное, что вы можете сделать, это защитить функцию от немедленной оценки, используя функцию, определяемую шаблоном, с ограничительным шаблоном, например, например:
Clear[ff];
ff[x_?IntegerQ] :=
With[{list = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5}}, Count[list, x]]
Похоже, что Maximize
не может с этим легко справиться, но NMaximize
может:
In[73]:= NMaximize[{ff[x], Element[x, Integers]}, x]
Out[73]= {4., {x -> 4}}
Но, как правило, любая из функций семейства Maximize
не совсем подходит для данной работы. Вам может быть лучше, явно вычислив максимум, например, так:
In[78]:= list = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5};
Extract[#, Position[#, Max[#], 1, 1] &[#[[All, 2]]]] &[Tally[list]]
Out[79]= {{4, 4}}
HTH