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

Java 如何计算范围内函数的最大值?,java,Java,我有一些函数(例如,双函数(双值)),和一些范围(例如,从A到B)。我需要计算这个范围内函数的最大值。有图书馆吗?请给我一些建议 如果函数需要处理浮点值,则必须使用类似的方法。请注意,对于这个特定的方法,对于可以处理的函数有很大的限制(特别是必须处理)。您可以对算法进行一些修改,将其扩展到更多函数,特别是这些修改将允许其用于连续函数。这是一个连续函数还是一组离散值?如果是离散值,则可以迭代所有值,并按照808sound的建议设置最大/最小标志,或者可以将所有值加载到数组中 如果它是一个连续函数,

我有一些函数(例如,双函数(双值)),和一些范围(例如,从A到B)。我需要计算这个范围内函数的最大值。有图书馆吗?请给我一些建议

如果函数需要处理浮点值,则必须使用类似的方法。请注意,对于这个特定的方法,对于可以处理的函数有很大的限制(特别是必须处理)。您可以对算法进行一些修改,将其扩展到更多函数,特别是这些修改将允许其用于连续函数。

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

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

通过快速的谷歌搜索,我发现:


但我自己从未使用过它,所以我不知道它是否实现了所需的功能。不过,它有微分方程,所以我想它们会有一些“小东西”,比如基本微分。

我不知道Java中是否有适合你的问题的库。
但是我知道你可以很容易地用MatLab(或Octave,相当于开源软件)来实现这一点。

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

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

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

有,有两个,但还有更多。这是一个相当有文献记载/研究过的计算机科学问题,网上有很多资料供你查阅。我建议从爬山算法开始,也许扩展到其他全局优化算法


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

问题不清楚。请添加一个好的问题stmt。您需要更具体地说明
函数
。例如,如果它是一个由
值播种的随机数生成器,该怎么办?那么,您可以保证
函数的任何细节吗?如果函数本质上是一个“黑盒”,那么唯一的方法就是检查double的每个可能值。但是,有许多现有的技术可以获得估计的最大值,参见爬山、各种遗传算法等。你的意思是,在数学中,当你有一个函数f(x)随x变化时,你想知道当x在[a;B]之间时,f(x)的最大值是多少?我相信输入是有限制的(OP提到的范围“A到B”)。您是对的,黄金分割搜索假设为单峰函数,这就是我在最后一句中给出限定的原因。输入是双精度的,所以很可能是x∈R,而不仅仅是x∈N.@Khonghiem我同意,我只是在想OP可能会改变/简化他们的算法/函数,使其只使用整数。好的,我编辑了答案,以解决您提到的这些问题。请看一看。@808sound将我的DV改为UV。仅供参考,这就是我认为大多数算法都是与Golden s进行比较分析的原因这是因为黄金分割搜索将保证线性收敛。它不是寻找全局最小值/最大值的常用方法,但由于其独特的性质,它是比较其他算法的一个很好的基准。