0

区間演算を使用して、特定の方程式の範囲を計算したいと考えています。たとえば、C = f(A, B) ここで

f = -12.5 * log10 ( 1 + ( 0.64*( 1-cos(A) )/( 1-cos(B/4) ))

A と B の範囲を入力として指定し、f を含む文字列を指定します。私が持っている区間演算ライブラリは、f = log A などの単純な関数の範囲を計算します。したがって、上記の関数の範囲を計算するには、最初に cos(A) を見つけ、次に 1 - cos(A) のように複数のステップを手動で記述する必要があります。等式全体の範囲を取得するまで続けます。この方程式を解析する方法があるかどうかを見つけようとしています。おそらくパーサーによる計算中に計算されたステップを取得して、すべてのステップで範囲を見つけてパーサーを次のステップに進めることができるようにします。

より明確にするために、式の評価中の各ステップを知りたいです。たとえば、f = A + B (1-C) の場合。ソフトウェアは最初に 1-c を計算し、次に B * (1-C) を計算し、それを A に加算します。したがって、これまでに評価された式の範囲を見つけることができるように、すべてのステップで制御が必要です。

任意のポインタをいただければ幸いです。

4

1 に答える 1

-1

私は次のようにすることを好みます:

import javax.script.*;


ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
try {
     // evaluate JavaScript code for evaluating formulas
     Object result = engine.eval(formula);
     System.out.println(result);
} catch (ScriptException ex) {
    System.out.println("Something went wrong. Was your syntax invalid?");
}

log10をに置き換える必要がMath.log10あり、代入演算子を削除する必要があることに注意してください。実装するのはそれほど難しくないはずです。

String formula = input.substring(intput.indexOf("=") + 1).replace("log10","Math.log10").replace("cos","Math.cos");
于 2014-02-27T21:22:39.077 に答える