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 ++ код для 1D числової інтеграції (використовуючи розширене правило трапеції) func()між межами використовуючи трапеція.
Я фактично роблю 3D-інтеграцію, де цей код називається рекурсивно. Я працюю з даючи мені гідні результати.
Крім скорочення далі, чи хтось може підказати, як оптимізувати код вище, щоб він працював швидше? Або, навіть, може запропонувати швидший метод інтеграції?
trapezoidal_integrationзамістьtrap,sumабоrunning_totalзамістьs(і також використовувати+=замістьs = s +),trapezoid_widthабоdxзамістьh(або ні, залежно від бажаного позначення трапецієподібного правила), і змінюватиfunc1таfunc2відображати той факт, що вони є значеннями, а не функціями. Наприкладfunc1->previous_valueіfunc2->current_value, або щось подібне.