在commons.math中找到PolynomialFunction的最优值

时间:2015-05-15 07:33:50

标签: java mathematical-optimization apache-commons-math

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-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();
}