【发布时间】:2013-08-29 10:06:04
【问题描述】:
是否可以动态解析数学函数,例如通过使用给定的 API?
给定一个函数
a = b + c
有没有办法写出类似的东西:
Function func = new Function("a=b+c");
Result result = func.resolve("a=1", "b=?", "c=a");
System.out.println(result.getValue());
理想情况下,resolve(Object... args) 应该接受更多 Function 类型的类。
编辑 1: API 应该包含在 Java EE 环境中,例如 jBossAS。
编辑 2: 实际上我想用一个未知变量求解方程,但我想避免硬编码函数。因此,对于函数
a+b=c
我不想写硬编码的函数
getA(int b, int c){...}
getB(int a, int c){...}
getC(int a, int b){...}
相反,正如@Berylium 所说,我想动态评估表达式。
编辑 3: 我现在正在尝试 symja,我想我越来越接近了,但我在语法上遇到了麻烦。
try {
F.initSymbols(null);
EvalUtilities util = new EvalUtilities();
StringBufferWriter buf = new StringBufferWriter();
String input = "....";
IExpr result = util.evaluate(input);
OutputFormFactory.get().convert(buf, result);
String output = buf.toString();
System.out.println("Evaluation for " + input + " is " + output);
} catch (final Exception e) {
你能帮我输入语法吗?
编辑 4:知道了 :-) 输入
String input = "Solve[{a==10,c==20,a+b==c},{a,b,c}]";
输出是
Evaluation for Solve[{a==10,c==20,a+b==c},{a,b,c}] is {{a->10,c->20,b->10}}
【问题讨论】:
标签: java api math expression-evaluation