gpt4 book ai didi

java - Java中单变量非线性函数的最小查找

转载 作者:行者123 更新时间:2023-12-01 23:29:43 27 4
gpt4 key购买 nike

我正在寻找一种简单的方法来在 Java 中完成 MATLAB 的 fminsearch() 的功能。我不需要像 fminsearch 那样通用,就我而言,我只想找到单变量非线性函数的最小值(函数和参数值最小)。我不知道该函数的解析表达式,但我可以轻松评估它。

您知道执行此操作的库,或者我可以重新实现的简单算法吗?

注意:我看到apache的common-math似乎有类似的东西(UnivariateOptimizer),但大多数方法似乎已被弃用,我找不到如何使用它的良好解释。也欢迎任何与此相关的提示。

谢谢!

最佳答案

Apache Commons Math通常是 Java 数值计算的一个不错的起点。最好通过示例来学习用法,查看 API documentationunit test source code对于各种类和方法。

user guide 中引用的优化类正如您所指出的,已弃用。它们仍然可以被调用,但最终它们当然会从库中逐步淘汰。由于我不知道的原因,正在进行的优化开发现在是在 optim 中进行的,而不是在 optimization 子包中进行的。

对于单变量函数(局部最优)最小化,Apache Commons Math 提供了 Brent 方法的实现。 unit tests 中概述了用法。 BrentOptimizer,我从中复制了以下摘录:

@Test
public void testSinMin() {
UnivariateFunction f = new Sin();
UnivariateOptimizer optimizer = new BrentOptimizer(1e-10, 1e-14);

Assert.assertEquals(3 * Math.PI / 2,
optimizer.optimize(new MaxEval(200),
new UnivariateObjectiveFunction(f),
GoalType.MINIMIZE,
new SearchInterval(4, 5)).getPoint(), 1e-8);

Assert.assertTrue(optimizer.getEvaluations() <= 50);
Assert.assertEquals(200, optimizer.getMaxEvaluations());
...
}

关于java - Java中单变量非线性函数的最小查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com