[英]Parsing mathematical equation in Java
我想使用區間算術來計算給定方程的范圍。 例如,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。因此,我需要在每一步進行控制,以便可以找到到目前為止已求值的表達式的范圍。
任何指針表示贊賞。
我喜歡做這樣的:
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");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.