gpt4 book ai didi

java - 是否可以动态求解数学函数

转载 作者:行者123 更新时间:2023-12-01 14:11:20 26 4
gpt4 key购买 nike

是否可以动态解析数学函数,例如通过使用给定的 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 脚本引擎都可以:

例如,使用 BeanShell :

    final Interpreter interp = new Interpreter();
try {
interp.eval("System.out.println(\"Hello, world\");");

final String s = "Hello, world (2)";
interp.set("test", s);
interp.eval("System.out.println(test);");

System.out.println("3+4=" + interp.eval("3+4"));

interp.set("a", 4);
interp.set("b", 5);
System.out.println("a + b = " + interp.eval("a + b"));

final String script1 =
"public int f(int a) { return a * a; }; System.out.println(f(4));";
interp.eval(script1);

final String script2 =
"public int f(int a) { return a * a; }; f(4)";
System.out.println(interp.eval(script2));

final String script3 =
"import java.util.Date; Date date = new Date(); date";
System.out.println(interp.eval(script3));

final String script4 =
"class X { public int a; } X x = new X(); x.a = 5; x.a";
System.out.println(interp.eval(script4));

} catch (EvalError e) {
e.printStackTrace();
}

一个优点是 BeanShell 使用与 Java 非常接近的 Java 语法。因此无需学习/使用另一种语言/语法。

关于java - 是否可以动态求解数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com