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集成,其中此代码被递归调用。我一起工作 给我不错的结果
除了减少 此外,有人能建议如何优化上面的代码,使其运行更快吗?或者甚至可以建议一种更快的集成方法?
trapezoidal_integration代替trap,sum或running_total代替s(也可以使用+=代替s = s +),trapezoid_width或者dx代替h(或不使用,取决于梯形规则的首选表示法),然后更改func1并func2反映它们是值而不是函数的事实。例如func1->previous_value和func2->current_value或类似的东西。