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)

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

如果有人可以指导我在字符串(例如写在文本框中)和在所示语法内的方法调用之间进行转换,我会非常高兴。

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

EDIT2:有没有办法对编译器说,嘿,相信我"x => 5*x*x"是一个 Func,从字面上理解

就像是 :

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

1 回答 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>(或者只是让编译器按字面意思理解)。

于 2013-09-02T03:38:26.117 回答