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_integrationyerinetrap,sumyarunning_totalyerines(ve aynı zamanda kullanımı+=yerines = s +),trapezoid_widthya dadxyerineh(ya da değil, tercih trapez kuralı için gösterimde bağlı olarak), ve değişimfunc1vefunc2onlar değerleri değil işlevleri olduğu gerçeğini yansıtmak için. Örneğinfunc1->previous_valuevefunc2->current_valueveya bunun gibi bir şey.