繁体   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