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;
}
Yukarıdaki trapezi kullanarak func()
sınırları arasındaki 1D sayısal entegrasyon (genişletilmiş yamuk kuralı kullanılarak) benim C ++ kodum.
Aslında bu kodun özyinelemeli olarak adlandırıldığı bir 3D entegrasyonu yapıyorum. ile çalışarak bana iyi sonuçlar verdim .
daha da azaltmanın dışında , daha hızlı çalışması için yukarıdaki kodu nasıl optimize edebileceğinizi önerebilen var mı? Hatta daha hızlı bir entegrasyon yöntemi önerebilir mi?
trapezoidal_integration
yerinetrap
,sum
yarunning_total
yerines
(ve aynı zamanda kullanımı+=
yerines = s +
),trapezoid_width
ya dadx
yerineh
(ya da değil, tercih trapez kuralı için gösterimde bağlı olarak), ve değişimfunc1
vefunc2
onlar değerleri değil işlevleri olduğu gerçeğini yansıtmak için. Örneğinfunc1
->previous_value
vefunc2
->current_value
veya bunun gibi bir şey.