将用户输入字符串转换为数学函数

时间:2015-09-01 13:37:20

标签: c# math symbolic-math

出于我想要做的目的,我需要将用户输入作为字符串并将其转换为未评估的函数。例如,如果用户输入是“x ^ 2 * sin(x)”,我需要一个带有双输入x并返回的函数

owl:sameAs

我需要这个函数,我不能传入x的值,我会多次调用该函数(可能数百个)所以每次进行计算时我都无法解析字符串。

我该如何实现?我从问题Convert a string into mathematical equation?中得出结论,没有标准的方法来做到这一点。但我对如何“保存”数学公式有点迷失,有没有办法用数学表达式创建委托?

至少,我需要它来识别基本代数方程,幂,指数和触发函数。此外,虽然我使用了单个变量x的函数示例,但我希望能够解析多个变量的函数。

2 个答案:

答案 0 :(得分:3)

基本上,您需要实现自己的语法分析器并将输入字符串转换为Expression Tree

答案 1 :(得分: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无法解析用户的字符串或函数的数据类型不同,则抛出异常。我正在研究它。