0

我有一些函数(例如,双函数(双值))和一些范围(例如,从 A 到 B)。我需要计算这个范围内函数的最大值。是否有针对它的库?请给我建议。

4

4 回答 4

2

如果函数需要处理浮点值,您将不得不使用Golden section search之类的东西。请注意,对于这种特定方法,可以处理的功能有很大的限制(特别是它必须是unimodal)。您可以对算法进行一些调整,将其扩展到更多功能,特别是这些修改将允许它适用于连续功能。

于 2013-02-20T15:59:46.893 回答
0

我不知道 Java 中是否有任何库可以解决您的问题。但我知道您可以使用 MatLab(或 OpenSource 等价物的 Octave)轻松做到这一点。

于 2013-02-20T16:20:19.773 回答
0

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

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

一个快速的谷歌搜索让我明白了这一点: http ://code.google.com/p/javacalculus/

但我自己从未使用过它,所以我不知道它是否实现了所需的功能。不过,它确实有微分方程,所以我认为它们会有像基本微分这样的“婴儿用品”。

于 2013-02-20T16:13:12.353 回答
0

如果您没有任何关于函数内部工作原理的指示(即函数是一个接受输入并产生输出的黑盒子),则没有“简单”的方法可以找到全局最大值。

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

有多种算法可以为您提供估计的最大值,如下所示:

爬山算法萤火虫算法是两种,但还有很多。这是一个相当有据可查/研究过的计算机科学问题,网上有很多资料供您查看。我建议从爬山算法开始,并可能扩展到其他全局优化算法。

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

于 2013-02-20T16:24:45.760 回答