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;
}
위의 내용은 trapezia를 사용하여 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
또는 이와 유사한 것입니다.