如何计算范围内函数的最大值?

时间:2013-02-20 15:51:22

标签: java

我有一些功能(例如,双功能(双值))和一些范围(例如,从A到B)。我需要在这个范围内计算函数的最大值。是否有现有的图书馆?拜托,给我建议。

4 个答案:

答案 0 :(得分:2)

如果函数需要处理浮点值,则必须使用Golden section search之类的函数。请注意,对于此特定方法,可以处理的功能存在重大限制(特别是它必须是unimodal)。您可以对算法进行一些adjustments扩展到更多功能,特别是这些修改将使其适用于连续函数。

答案 1 :(得分:0)

这是一个连续函数,还是一组离散值?如果是离散值,那么您可以遍历所有值,并将最大/最小标志设置为808sound建议,或者您可以将所有值加载到数组中。

如果它是一个连续函数,那么你可以在离散输入处填充函数值的数组,并找到上面的最大值,或者如果它是可微分的,那么你可以使用基本微积分来找到df的点( x)/ dx是0.后一种情况有点抽象,可能比你想要的更复杂?

快速谷歌搜索引导我这样: http://code.google.com/p/javacalculus/

但我自己从未使用它,所以我不知道是否实现了所需的功能。然而,它确实是微分方程,因此我认为它们具有像基本差异一样的“婴儿用品”。

答案 2 :(得分:0)

我不知道你的问题是否有Java库。 但我知道你可以轻松地使用MatLab(或开源等效的Octave)。

答案 3 :(得分:0)

如果您没有任何关于内部工作功能的指示(即该功能是接受输入并产生输出的黑盒子),则没有“简单”的方法来查找全局最大值。

您的输入可以选择无数个点(技术上),因此“迭代所有可能的输入”在数学上是不可行的。

有各种算法可以在这样的函数中为您提供估计最大值:

hill climbing algorithmfirefly algorithm是两个,但还有更多。这是一个相当充分记录/研究过的计算机科学问题,网上有很多资料可供您查看。我建议从爬山算法开始,并可能扩展到其他全局优化算法。

注意:这些算法并不保证结果是最大值,而是提供其值的估计值。 *