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
、またはそのようなもの。