我正在尝试将c#中的trapezodial规则作为函数实现:
Int_a^b f(x) = (b-a) * [f(a) + f(b)] / 2
c#中是否有一个功能允许我这样编写函数?
double integrate(double b, double a, function f)
{
return (b-a) * (f(a) + f(b)) / 2;
}
其中f
可以是在另一个函数内定义的任何多项式表达式,例如:
double f (double x)
{
return x*x + 2*x;
}
答案 0 :(得分:7)
在您的情况下,您想要传递Func<double, double>
。像这样
double integrate(double b, double a, Func<double, double> f)
{
return (b-a) * (f(a) + f(b)) / 2;
}
double integrand = integrate(0, 2 * Math.PI, x => x*x + 2*x);
答案 1 :(得分:2)
您可以使用Func<>
泛型类型执行此操作,其中第一个泛型表示传递的类型,第二个表示函数的返回类型:
double integrate(double b, double a, Func<double, double> f)
{
return (b-a) * (f(a) + f(b)) / 2;
}
您的电话将如下所示:
var a = 1.0;
var b = 2.0;
var result = integrate(b, a, f);
或者如果您更喜欢lambda表达式:
var result = integrate(b, a, x => x*x + 2*x);