Нужна помощь в понимании Apache Commons Math BracketFinder
Я начну с того, что мне кажется, что это должно быть легко... но для меня это не совсем очевидно. Я пытаюсь использовать BrentOptimizer, чтобы найти локальные минимумы и максимумы функции. У меня есть представление о их периодичности, и я чувствую, что должен иметь возможность использовать BracketFinder, чтобы заключить в скобки оптимумы, а затем отправить это на BrentOptimizer.
Ее документация: http://commons.apache.org/math/api-2.2/org/apache/commons/math/optimization/univariate/BracketFinder.html
Итак, для простого случая рассмотрим:
f(x) = sin(x)
Мы знаем, что есть максимум в Pi/2 и минимум в 3Pi/2. Если бы я начинал с нуля и двигался по функции, как бы я искал этот корень в Pi/2? Это действительно сводится к аргументам конструктора и начальным точкам. Есть ли рекомендации (если вы немного знаете о форме вашей функции), которые я могу использовать, чтобы установить эти параметры разумным способом?
Спасибо
1 ответ
Вы, наверное, уже разобрались с этим, но метод брекетинга вообще не предполагает никаких начальных точек, намерение с BracketFinder
заключается в том, чтобы найти начальную догадку, которую вы должны применить в своем звонке в BrentOptimizer. Должно быть хорошо, чтобы применить конструктор по умолчанию в BracketFinder
,
После получения точек брекетинга используйте трехточечный optimize
метод, определенный в абстрактном базовом классе BaseAbstractUnivariateOptimizer, где min
, max
, startValue
взяты из BracketFinder
: s getLo()
, getHi()
а также getMid()
соответственно.
Реализация BracketFinder, очевидно, основана на том, что можно найти в " Числовых рецептах", глава 10.1, в C-версии книги. Это может дать вам дополнительную информацию об используемых принципах брекетинга.