簡體   English   中英

用Java解析數學方程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM