如何在导入org.apache.commons.math3.analysis.integration.SimpsonIntegrator中使用标准的SimpsonIntegrator;

时间:2017-07-02 21:28:50

标签: java integration apache-commons numerical-integration numerical-computing

public double evalute(double distance){

    /**
     * equation (3.2)
     */
    this.from = 0;
    this.to = distance;
    this.n = 2;
    return - 10 * Math.log10(Math.exp(-IntSimpson(this.from, this.to, this.n)));
}

我手动设计了IntSimpson()函数,但我想使用标准库!我该怎么做以及在哪里可以找到它?

2 个答案:

答案 0 :(得分:1)

如果您想实际使用积分器对象,则需要调用integrate method,该实例需要UnivariateFunction的实例。如果您使用的是Java 8,那么这是一个单方法接口,因此它自动成为一个功能接口。因此,您可以传递lambda或方法引用,如:

final SimpsonIntegrator si = new SimpsonIntegrator();
final double result = si.integrate(50, x -> 2*x, 0, 10);
System.out.println(result + " should be 100");

否则,您必须自己创建一个接口实现,方法是让类实现它,或者使用匿名类:

final double result = si.integrate(50, new UnivariateFunction() {
        @Override public double value(double x) {
            return 2*x;
        }
    }, 0, 10);
System.out.println(result + " should be 100");

答案 1 :(得分:0)

有效!

final SimpsonIntegrator si = new SimpsonIntegrator();
final double result1 = si.integrate(10, x -> 2*Math.pow(x, 1), 0.0, 10.0);
System.out.println(result1 + " should be 100.0");
final double result2 = si.integrate(1000, x -> Math.sin(x), 0.0, Math.PI);
System.out.println(result2 + " should be 2.0000...");

谢谢Javier Martín