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_integrationalih-alihtrap,sumataurunning_totalalih-alihs(dan juga menggunakan+=alih-alihs = s +),trapezoid_widthataudxalih-alihh(atau tidak, tergantung pada notasi yang Anda sukai untuk aturan trapesium), dan ubahfunc1danfunc2untuk mencerminkan fakta bahwa itu adalah nilai, bukan fungsi. Misalnyafunc1->previous_valuedanfunc2->current_value, atau sesuatu seperti itu.