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 回答