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;
}
Lo anterior es mi código C ++ para una integración numérica 1D (usando la regla de trapecio extendida) de func()entre límites usando trapecia .
Realmente estoy haciendo una integración 3D, donde este código se llama recursivamente. Trabajo con dándome resultados decentes.
Además de reducir aún más , ¿alguien puede sugerir cómo optimizar el código anterior para que se ejecute más rápido? ¿O incluso puede sugerir un método de integración más rápido?
trapezoidal_integrationlugar detrap,sumo enrunning_totallugar des(y también usar en+=lugar des = s +),trapezoid_widtho endxlugar deh(o no, dependiendo de su notación preferida para la regla trapezoidal), y cambiarfunc1yfunc2reflejar el hecho de que son valores, no funciones. Por ejemplo,func1->previous_valueyfunc2->current_value, o algo así.