0

如果不能提供相反的符号,我想知道如何使用布伦特算法。

例如,在Brent 算法的 C++ 库中,必须使用实现 Brent 方法的寻根程序,在头文件之后,形式为

双零(双a,双b,双t,func_base&f);其中 a, b 满足符号相反的条件: f(a).f(b) < 0

在我的问题设置中,我需要找到一个黑盒函数 f 的根。提供了初始猜测,但没有端点 a,b,因此提供了 f(a) f(b)<0 似乎在 Matlab 中有一个函数fmin只需要初始猜测。我想知道如何使用 C++ 来做到这一点,特别是使用上面链接的 Brent 的实现?

谢谢你的想法。

4

2 回答 2

3

如果不进行详尽的搜索(在实值函数的情况下,你不能,因为 的值x不可数的),如果存在的话,就没有办法真正保证找到根。

解决该问题的一种启发式方法是使用梯度下降法,以最小化(/最大化)函数的值,直到找到局部最小值(/最大值)或找到根。

这种方法的问题是,在找到根之前,您可能会陷入局部最小值(/最大值),并且“认为”没有根,即使确实存在根。

于 2014-05-29T12:28:01.930 回答
1

在这样的假设下

  • f是一个黑盒,即它可以被评估,但是关于它的形状的信息是未知的。

  • 您必须使用一种方法,该方法需要先验知道包含 f 的根的区间 [ a , b ] 假设f连续的)。

我认为您唯一的选择是初步搜索两个有效点ab。这可以通过多种方式完成。最简单的方法可能是从您最初的猜测开始运行线性搜索(有一些规定的步骤),如果结果不成功,可以用更精细的步骤重复。如果f不是太“奇怪”,则应该使用简单的方法。

显然,关于f的性质的一些基本线索总是必要的,例如它实际上有一个根,它是连续的、可微的等。所有的根查找方法(梯度下降、Newton-Raphson、二等分等)假设函数的一些基本性质。

于 2014-05-29T13:48:18.127 回答