我想在我的应用程序中构建绘制数学函数的可能性。在我正在使用的绘图库(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, ....)
a
中的第一个参数是Func<double, double>
EDIT2:有没有办法对编译器说,嘿,相信我"x => 5*x*x"
是一个Func,从字面上理解
类似的东西:
Func<double, double> f = (Func<double, double>)myString;
答案 0 :(得分: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
&gt; (或者只是让编译器从字面上理解它)。