java - Java中非线性方程的最大化

标签 java math mathematical-optimization scientific-computing nonlinear-functions

我想确定最大化某个函数(类似于下一个函数)的 x 值: enter image description here

很明显,当x = 0时达到A的最大值,然后A = 200。

我如何用 Java 解决这个问题?

更新:很抱歉没有从一开始就说清楚。 x 是一个 int,但我需要一种方法来在 x 不是上限时也找到最大值,如下一个示例所示: enter image description here

最佳答案

floor 函数有一个线性上限和一个下限,x-1 < floor(x) < x , 这应该可以确定曲线的一般形状。然后可以找到下限的最大值(这是一个线性函数)并枚举 x 的值。属于A上限的区域可能达到下界的最大值,即上界超过下界的最小值的区域。 如果这个区域是有限的,x最大化 A从而可以找到。如果不是,则表明该函数是循环的,因此您必须确定它的周期并找到周期的最大值。

在示例中,下限为 (x + 100) / 1000 - 1 + 3 * (x / 1000 - 1) + 200 - x , 等于 (196100 - 996 * x) / 1000 , 和上限 (x + 100) / 1000 + 3 * (x / 1000) + 200 - x(200100 - 996 * x) / 1000 .下界显然达到了最大值 196100 / 1000x == 0因此我们只需要检查那些上限较高的 x 值,(200100 - 996 * x) / 1000 > 196100 / 1000 , 可以简化为 x < 4.02 , 所以只需要检查 x 的值从 0 到 4。

关于java - Java中非线性方程的最大化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11725175/

相关文章:

java - 关于 lambda 的 Cassandra 编译问题

java - 使用 JdbcTemplate 时转义单引号

javascript - 使用衰减正弦波从 Val 过渡到 Val

c++ - 如何使这个颜色百分比函数更快? C++

java - 模运算符在 Java 中给出意外的输出

java - 业务逻辑的同步实现

java - 错误 : cannot find symbol in gradle compileTestJava

python - 制作具有精确长度的 sin 'arc'

python - 如何优化 Python 中的黑盒函数?

python - 如何在cvxpy中写几个约束?