适当的symja评估?

时间:2013-12-17 17:26:45

标签: java math evaluate symja

编辑:我发现即使我尝试在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。用“)”替换逗号,但这些都不起作用。 谢谢!

3 个答案:

答案 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?