Mathematica: как найти максимальное значение выражения с показателями в качестве параметров

#optimization #statistics #wolfram-mathematica #probability

#оптимизация #Статистика #wolfram-mathematica #вероятность

Вопрос:

Я использую Mathematica 8, чтобы найти аналитическое решение для максимального значения выражения. Когда я использую команду Maximize, чтобы попытаться найти решение, оно просто повторяет то, что я ввел, подразумевая, что Mathematica не знает, как это сделать. Я сузил проблему до этого: похоже, что если есть показатель, который является параметром, максимизация не работает. Вот пример. Это функция правдоподобия из испытания Бернулли, где a и b — успехи и неудачи.

 Maximize[{t^a*(1 - t)^b, {t >= 0, t <= 1, a > 0, b > 0}}, {t}]
 

То, что я хотел бы получить в качестве решения a/(a b) , в этом случае. Если я предоставляю константы, такие как 3 и 2, вместо a и b тогда он находит решение.

Есть ли другой способ указать выражение или ограничения, чтобы Mathematica могла найти максимум для выражений с показателями, которые являются параметрами? Я чувствую, что мне чего-то не хватает, потому что это так просто.

Комментарии:

1. По-видимому, Mma не может решить эту задачу проще Maximize[{t^a*(1 - t), 0 < t < 1 amp;amp; a > 0 }, t]

2. @belisarius, это очень странно, поскольку это легко решается с помощью метода первой производной.

3. @rcollyer Да. Я думаю, что все еще существует разрыв между аналитическими и алгебраическими методами

Ответ №1:

Я играл с этим, то есть перемещал условия, менял форму выражения, удалял условия, и я тоже не могу заставить Maximize себя вести себя. Однако это можно решить напрямую, следующим образом

 Solve[ D[ t^a (1 - t)^b, t ] == 0, t]
 

что дает, как вы сказали, {{t -> a/(a b)}} . Иногда Reduce может использоваться, чтобы помочь понять, почему функция, подобная Maximize неправильному поведению, дает более полную картину пространства решений. Он вызывается Solve следующим образом

 Reduce[ D[ t^a (1 - t)^b, t ] == 0, t]
 

предоставление

 ((-1   t) t != 0 amp;amp; a == 0 amp;amp; b == 0) || 
 (a   b != 0 amp;amp; a b != 0 amp;amp; t == a/(a   b)) || 
 (Re[b] > 1 amp;amp; t == 1) || 
 (Re[a] > 1 amp;amp; t == 0)
 

в данном случае это не так уж и полезно.

Комментарии:

1. Используя ваш подход, я попытался добавить ограничения в команду Reduce, и Mathematica в основном зависла. Я бы подумал, что ограничения должны помочь этому, устранив бесполезные пути, но, возможно, это так не работает. Reduce[{D[t^a*(1 - t)^b, t] == 0, t >= 0, t <= 1, a > 0, b > 0, D[t^a*(1 - t)^b, {t, 2}] < 0}, t]

2. @Sam, вместо того, чтобы помещать их в список, разделите их с amp;amp; помощью , например , это то, что у меня есть Reduce[D[t^a (1 - t)^b, t] == 0 amp;amp; a > 0 amp;amp; b > 0 amp;amp; 0 <= t <= 1, t] , и оно отлично работает.

3. @Sam, кроме того, как вы можете видеть, условия не являются строго необходимыми, поскольку решение, которое вы искали, уже присутствовало в списке. Добавление условий просто обеспечивает точки на границах.

4. Запоздалое спасибо за вашу помощь. Забавно, что исчисление все еще пригодится, даже когда у нас есть такие инструменты, как Mathematica.

5. @Sam добро пожаловать. Исчисление — это просто еще один инструмент, поэтому стоит иметь несколько разных доступных инструментов.

Ответ №2:

Функция максимизации в Mathematica, применяемая к экспоненциальной функции, работает только в том случае, если вы максимизируете все параметры (a, b и t в вашем случае). Теперь вы максимизируете только относительно t, что не работает.

Рассмотрим этот простой пример (с использованием Mathematica 8.0):

 Maximize[{Exp[a   b], a <= 1, b <= 1}, {a, b}]
Maximize[{Exp[a   b], a <= 1, b <= 1}, {a}]
Maximize[{a   b, a <= 1, b <= 1}, {a}]
 

Комментарии:

1. Это было бы более наглядным, если бы вы показали результаты каждой из этих команд. Если вам было особенно приятно, вы могли бы даже ссылаться на результаты Wolfram Alpha .

2. Было бы здорово, если бы a и b можно было выбирать произвольно, но они являются константами. К сожалению, это не работает только в отношении t .