0

有没有一种简单的方法可以在 commons.math 中找到 PolynomialFunction(也是 UnivariateDifferentiableFunction)的最优值?有一系列令人眼花缭乱的多维优化器,但 AFAICS 唯一明确的单变量优化器是 Brent,它没有利用可微性。

4

2 回答 2

1

多项式是特殊函数(一般意义上的“特殊”),具有许多独特的有用属性。我的建议是利用这些属性,而不是尝试使用一种方法来实现更通用的功能。具体来说,多项式的极值是其导数的根(其中二阶导数非零)。多项式的导数很容易构造和计算,即使在 Java 中也是如此。我看到 Apache Commons Math 有 LaguerreSolver 来找到多项式的根。

于 2015-05-15T18:52:45.777 回答
-1

以下是一些本着 ortis 回答精神的代码:

Optional< Double >
optimizeNR( PolynomialFunction f, double min, double max, double tol ) {

    NewtonRaphsonSolver solver = new NewtonRaphsonSolver();
    final double opt = solver.solve( MAX_EVAL, f.polynomialDerivative(), min, max);

    if( f.value( opt - tol ) < opt && f.value( opt + tol ) < opt )
        return Optional.of( opt );
    else
        return Optional.empty();
}
于 2015-05-15T12:50:33.557 回答