2017-09-29 13 views
0

私はapache-commons-mathソルバを使って "V"の次の数学的方程式を解こうとしています。Apache Common Maths - 単変量関数ソルバ

式:

V =ログ(X /(V-1))

後はMWEあります。

import org.apache.commons.math3.analysis.UnivariateFunction; 
import org.apache.commons.math3.analysis.solvers.*; 

public class Test { 
    public static void main(String[] args) { 

     UnivariateFunction function = v -> v - Math.log((9/(v-1))); 
     UnivariateSolver solver = new BrentSolver(); 
     double c = solver.solve(100, function, -10.0, 10.0, 0); 
     System.out.println(c); 
    } 
} 

ただし、次のエラーが発生します。エンドポイントでの関数値が異なる符号、エンドポイントを持っていない:[-10、10]、値:[10]

スレッド "メイン" org.apache.commons.math3.exception.NoBracketingExceptionで

例外

私はそれを解決するためにインターネットの周りを見てきましたが、これまでのところ成功はありません。私は "V"を解決するためにMWEを探しています、どんな助けも高く評価されます。

答えて

1

BrentSolverは、単変量関数でのみ実数で動作します。関数f(v) = v - log(c/(v - 1))の実数サポートは(1, Infinity)です。 vが1以下の場合、関数は複素数と評価されます。

ソルバーは、-10で関数を評価しようとしていて、値でNaNを受け取るため、失敗しています。これにより、NaNの符号が不定であるため、ブラケット例外が発生します。

したがって、ソルバーを動作させるには、実数サポートに含まれる初期の下限を指定する必要があります。 1より大きい何かで十分です。

+0

清算していただきありがとうございます、それは問題を解決しました – Ahmad

関連する問題