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
或类似的东西。