0
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()関数がありますが、私は標準ライブラリを使いたいです!どうやってそれをどこで見つけることができますか?標準のSimpsonIntegratorをインポートorg.apache.commons.math3.analysis.integration.SimpsonIntegratorで使用する方法。

答えて

1

実際にインテグレータオブジェクトを使用する場合は、UnivariateFunctionのインスタンスを取るintegrate methodを呼び出す必要があります。 Java 8を使用している場合、これは単一メソッドのインターフェースなので、自動的に機能インターフェースになります。したがって、あなたは同様に、ラムダまたはメソッド参照を渡すことができます。

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"); 
+0

ありがとう、それは動作します。 – AlexTitov

+0

UnivariateFunction形式のorg.apache.commons.math3を使用できますか? sin(x)を使用したい場合は、Taylorシリーズで分解する必要がありますか? – AlexTitov

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

関連する問題