将字符串转换为数学方程式?

时间:2014-01-15 14:44:17

标签: java android

我是初学者。我想将字符串转换为数学方程式,以便成为我的图形计算器的输入 例如:

cos(x+1)+ ln(x)

所以我们将其转换为

double x = -10;
for (int i=0; i<100; i++) { 
double y=Math.cos(x+1)+Math.log(x)
x=x+0.5         
}

所以我想知道一种转换y的方法

谢谢

5 个答案:

答案 0 :(得分:2)

java中没有“开箱即用”的解决方案。

然而: 强制性答案:google - &gt; “将字符串转换为数学表达式java”前几个答案都很不错(如:What's a good library for parsing mathematical expressions in java?) 必要的答案2:网上有很多用于将字符串转换为数学表达式的库,根据规则命名它们是偏离主题的,所以我建议“必须回答”前几次点击。

最有可能选择您将收到的格式,并为该格式编写自己的解析器。

答案 1 :(得分:1)

您需要先编写解析器,构建输入表达式的树。然后,您可以使用它来生成代码。

但是,“我是初学者”并不适合编写解析器:)

答案 2 :(得分:1)

您需要一个描述表达式语法的小型正式语法,然后您需要将输入字符串表达式转换为AST表示。

http://en.wikipedia.org/wiki/Abstract_syntax_tree

最后,你需要有一个程序来评估某些参数值的AST。

答案 3 :(得分:1)

在纯Java中,这不是一件简单的事情。还有很多其他类似的问题,这里有很好的答案。大多数解决方案都与在解释器中计算表达式或解析表达式(有一些可用于此的库),甚至是脱壳有关。我不知道Android中有什么可用来做这个,但在SO中有很多很好的答案。这是一个很好的开始:Evaluating a math expression given in string form

答案 4 :(得分:0)

我使用NCalc做了那件事。我传入了用户的字符串表达式,用我正在评估的值替换变量,然后使用Evaluate方法并解析为double。

private double Function(double t, double y)
    {
        NCalc.Expression expression = new NCalc.Expression(this.Expression);
        expression.Parameters["t"] = t;
        expression.Parameters["y"] = y;

        double value;

        double.TryParse(expression.Evaluate().ToString(), out value);

        return value;        
    }

例如,假设输入t = .5和y = 1且表达式为“4 * y + Tan(2 * t)”,我们将评估字符串“4 * 1 + Tan(2 * .5) “使用NCalc。

它并不完美,如果NCalc无法解析用户的字符串或函数的数据类型不同,则抛出异常。我正在研究它。

我也问了同样的问题here