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

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

Math.Pow(x, 2)*Math.Sin(x)

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

我该如何实现? 我从问题转换为数学方程式? 没有标准的方法来做到这一点。 但是我对如何“保存”数学公式有点迷茫,有没有办法用数学表达式创建委托?

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

实质上,您需要实现自己的语法分析器并将输入字符串转换为表达式树 。

我最终使用了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)”,我们将使用NCalc评估字符串“4 * 1 + Tan(2 * .5)” 。

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