#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 .