double trap(double func(double), double b, double a, double N) {
double j;
double s;
double h = (b-a)/(N-1.0); //Width of trapezia
double func1 = func(a);
double func2;
for (s=0,j=a;j<b;j+=h){
func2 = func(j+h);
s = s + 0.5*(func1+func2)*h;
func1 = func2;
}
return s;
}
以上是我的 C++ 代码,用于使用func()
梯形在限制之间进行一维数值积分(使用扩展梯形规则)。
我实际上是在做一个 3D 集成,这个代码是递归调用的。我使用给我带来了不错的结果。
除了进一步减少之外,是否有人能够建议如何优化上面的代码以使其运行得更快?或者,甚至可以建议一种更快的集成方法?