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;
}
Di atas adalah kode C ++ saya untuk integrasi numerik 1D (menggunakan aturan trapezium diperpanjang) dari func()
antara batas menggunakan trapezia.
Saya sebenarnya melakukan integrasi 3D, di mana kode ini disebut secara rekursif. Saya bekerja dengan memberi saya hasil yang layak.
Selain mengurangi lebih lanjut, adakah yang bisa menyarankan cara mengoptimalkan kode di atas sehingga berjalan lebih cepat? Atau, bahkan, dapat menyarankan metode integrasi yang lebih cepat?
trapezoidal_integration
alih-alihtrap
,sum
ataurunning_total
alih-alihs
(dan juga menggunakan+=
alih-alihs = s +
),trapezoid_width
ataudx
alih-alihh
(atau tidak, tergantung pada notasi yang Anda sukai untuk aturan trapesium), dan ubahfunc1
danfunc2
untuk mencerminkan fakta bahwa itu adalah nilai, bukan fungsi. Misalnyafunc1
->previous_value
danfunc2
->current_value
, atau sesuatu seperti itu.