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;
}
上記は、拡張された台形規則を使用して、台形を使用しfunc()制限間の1D数値積分の私のC ++コードです。
私は実際に3D統合を行っています。このコードは再帰的に呼び出されます。私は作業して、適切な結果を出しています。
さらに減らす以外に、上記のコードを最適化してより速く実行する方法を提案できる人はいますか?または、より速い統合方法を提案できますか?
trapezoidal_integrationの代わりにtrap、sumまたはrunning_total代わりにs(とも使う+=代わりにs = s +)、trapezoid_widthまたはdx代わりにh(またはしない、お好みの台形規則の表記に依存する)、および変更func1とfunc2、彼らは値ではなく、機能しているという事実を反映します。例えばfunc1->previous_valueとfunc2->current_value、またはそのようなもの。