将字符串转换为函数

3

我想在我的应用程序中实现绘制数学函数的功能。在我使用的绘图库(OxyPlot)中,对此有很好的支持。可以参考以下示例:

y = ax³ + bx² + cx + d = 0

这样绘制出来的是:
new FunctionSeries( x => a*x*x*x + b*x*x + c*x + d, /* other stuff, spacing, number of points, etc */ )

三角函数的计算方式也是一样的:
   y = sin(3x) + 5cos(x)

is

   new FunctionSeries(x => Math.Sin(3*x) + 5*Math.Cos(x) , ....);

如果有人能指导我怎样将一个在文本框中输入的字符串与一个具有内部语法的方法进行转换,我会非常高兴。

编辑:在FunctionSeries(a, ....)中的第一个参数aFunc<double, double>

编辑2:是否有一种方式告诉编译器,“嘿,相信我'x => 5*x*x'是一个Func,直接使用它”

类似于:

Func<double, double> f = (Func<double, double>)myString;

https://dev59.com/D3RA5IYBdhLWcg3wzhRY - zs2020
https://dev59.com/e3RC5IYBdhLWcg3wROzk#392355 - Chris O
对于这么简单的事情,NCalc是一个不错的选择。 - Simon Whitehead
谢谢您的建议,我会选择NCalc。如果不介意的话,Simon,您能否提供一个世界上最简单的例子给我呢?因为在NCalc的简短文档中,我找不到我需要的东西。在示例中,他们只是计算从字符串解析出来的表达式的结果。我想将字符串转换为Func。您认为这在NCalc中是否可能实现? - Sturm
1个回答

0

这里我有一个部分解决方案:

        var expresionData = new List<DataPoint>();
        Regex pattern = new Regex("[x]");

        for (int i = 0; i < 100; i++)
        {
            string a = pattern.Replace(ExpresionString, i.ToString());
            NCalc.Expression exp = new NCalc.Expression(a);
            expresionData.Add(new DataPoint(i,Double.Parse(exp.Evaluate().ToString())));
        }

我在这里使用了一个小技巧:我将键入的字符串中的每个 'x' 转换为 i,然后评估表达式并添加点。 这相当慢。 我仍然对原始问题非常感兴趣:
如何将字符串转换为 Func<double, double>(或只需使编译器按照字面意思接受它)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接