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
, या ऐसा ही कुछ।