使用JOM在JAVA中使用MATLAB fzero

时间:2015-02-25 03:36:39

标签: java matlab optimization

我试图在JAVA中重现fzero的MATLAB函数的结果。 在搜索之后,我找到了库JOM(Java Optimization Modeler)。 我写了一个非常简单的程序,以测试它的效率,我无法找到正确的值,我使用一个非常简单的评估函数:x - 100,目标是最小化它。我想知道我的代码是错误的还是你可以建议我另一个库做得更好? 下面的代码发现最佳解决方案是0.0,我期待100。

    /* Create the optimization problem object */
    OptimizationProblem op = new OptimizationProblem();
    op.addDecisionVariable("x", false, new int[] { 1 , 1 }, 0 , Double.MAX_VALUE);
    /* Sets the objective function */
    op.setObjectiveFunction("minimize", "x-100");
    op.solve("ipopt");
    if (!op.solutionIsOptimal ()) throw new RuntimeException ("An optimal solution was not found");
    System.out.println (op.getPrimalSolution("x").toValue());
    System.out.println("Total cost obtained: " + op.getOptimalCost());

1 个答案:

答案 0 :(得分:1)

我认为这里有一个问题,你没有。如果再考虑一下,你会发现在等于[0,Double.MAX_VALUE)的区间中,等式的最小值确实为0.0。这是因为函数单调递增并以其最小值-100开始。要求解方程,您需要最小化绝对值。

但是,您要解决的功能是否会在您尝试解决的时间间隔内持续解决?在这种情况下,我建议你使用Newtons method,它们已被证明具有良好的方程求解性能。如果你有一个想要求解的方程的函数(例如f(x)= x-100),那么该方法可以很容易地实现。可以使用不同的近似值找到导数,其中一些可以在wikipedia上找到。