1

我首先要说这感觉应该很容易......但这对我来说并不完全明显。我正在尝试使用 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 处寻找那个根?它实际上归结为构造函数参数和初始点。是否有任何最佳实践(假设您对函数的形状有所了解)可以用来以合理的方式设置这些参数?

谢谢

4

1 回答 1

0

您现在可能已经解决了这个问题,但是包围方法根本不期望任何初始点,其目的BracketFinder是找到您应该在调用BrentOptimizer时应用的起始猜测。应该可以在BracketFinder.

optimize收到括号点后,使用抽象基类BaseAbstractUnivariateOptimizer中定义的三点方法,其中min, max,startValue分别取自BracketFinder:s和。getLo()getHi()getMid()

BracketFinder的实现显然是基于本书 C 版本的第 10.1 章的Numerical Recipes中的实现。这可以为您提供有关所使用的包围原则的更多背景知识。

于 2012-06-15T10:01:12.183 回答