编辑:我发现即使我尝试在evaluate()方法中使用最简单的表达式,即1 + 1,它也无法做到。它给了我运行时错误。
我下载了symja_android_library.jar文件,并将其添加到我的类路径中。我的代码如下:
import static org.matheclipse.core.expression.F.*;
import org.matheclipse.core.eval.EvalUtilities;
import org.matheclipse.core.interfaces.IAST;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.parser.client.SyntaxError;
import org.matheclipse.parser.client.math.MathException;
public class CalculusExample {
public static void main(String[] args) {
try {
EvalUtilities util = new EvalUtilities(false);
IExpr result;
result = util.evaluate("d(x^2,x)");
System.out.println(result.toString());
result = util.evaluate("integrate(sin(x)^5,x)");
System.out.println(result.toString());
} catch (SyntaxError e) {
System.out.println(e.getMessage());
} catch (MathException me) {
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
问题是,两个“.evauate()”方法都给出了控制台输出中出现的错误,说明“预期的行中的语法错误:1 - '”。 将(sin(x)^ 5,x)与指向逗号的插入符号集成。有人可以用正确的语法帮助我吗?我试过1.删除逗号和“x”,2。用“)”替换逗号,但这些都不起作用。 谢谢!
答案 0 :(得分:0)
这绝不是一个合理的解释,但这有效,应该可以让你在工作中取得进步
ScriptEngine fScriptEngine = fScriptManager.getEngineByExtension("m");
try {
String evaledResult = (String) fScriptEngine.eval("D[x^2,x]");
System.out.println(evaledResult);
} catch (Exception e) {
e.printStackTrace();
}
结果:2 * x
此API的文档非常薄弱。我不得不通读他们的JUnit测试来把它们放在一起......
我使用的表达式也适用于EvalUtils
,但它返回的结果略有不同。
结果:时间[2,x]
答案 1 :(得分:0)
试试这个
public static void main(String[] args) {
try {
EvalUtilities util = new EvalUtilities(true);
IExpr result;
result = util.evaluate("d(x^2)");
System.out.println(result.toString());
result = util.evaluate("integrate[sin[x]^5,x]");
System.out.println(result.toString());
} catch (SyntaxError e) {
System.out.println(e.getMessage());
} catch (MathException me) {
System.out.println(me.getMessage());
} catch (Exception e) {
e.getMessage();
}
}
我认为EvalUtilities
有一些问题,但我修复了“行语法错误:1 - ')'预期”问题。
答案 2 :(得分:0)
ScriptEngine fScriptEngine = fScriptManager.getEngineByExtension("m");
为什么上面的代码返回null?