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;
}
ऊपर की func()सीमाओं के बीच 1 डी संख्यात्मक एकीकरण (विस्तारित ट्रेपेज़ियम नियम का उपयोग करके) के लिए मेरा सी ++ कोड है का उपयोग करते हुए trapezia।
मैं वास्तव में एक 3D एकीकरण कर रहा हूं, जहां इस कोड को पुनरावर्ती कहा जाता है। मैं साथ काम करता हूं जिससे मुझे अच्छे परिणाम मिले।
और कम करने के अलावा, क्या कोई सुझाव दे सकता है कि ऊपर दिए गए कोड को कैसे अनुकूलित किया जाए ताकि यह तेजी से चले? या, यहां तक कि, एक तेज एकीकरण विधि का सुझाव दे सकता है?
trapezoidal_integrationबजायtrap,sumया केrunning_totalबजायs(और भी के+=बजाय का उपयोग करेंs = s +),trapezoid_widthया केdxबजायh(या नहीं, trapezoidal नियम के लिए अपने पसंदीदा अंकन के आधार पर), और परिवर्तनfunc1औरfunc2इस तथ्य को प्रतिबिंबित करने के लिए कि वे मूल्य हैं, कार्य नहीं। जैसेfunc1->previous_valueऔरfunc2->current_value, या ऐसा ही कुछ।