from math import exp class TrapezIntegral: """Approssima l'integrale definito di f tra a e b con la formula dell'integrazione trapezioidale su n intervalli""" def __init__(self,f,ta,tb,n): self.f=f self.ta=ta self.tb=tb self.n=n def __call__(self , *fpars): h = (self.tb - self.ta) / self.n s = self.f(self.ta,*fpars) + self.f(self.tb,*fpars) for i in range(1, self.n): s += 2 * self.f(self.ta + i * h,*fpars) return s * h / 2 def g(t,a,A,B): return A*exp(-a*t)+B if __name__=='__main__': #integrale definito di g tra 0 e 1 indipendentemente dai parametri integrale_di_g = TrapezIntegral(g,0,1,100) i1 = integrale_di_g(0.6,2.,0.0) i2 = integrale_di_g(2.0,1.7,0.7) print("Integrale di g(t,0.6,2.0) tra 0 ed 1 con 100 intervalli = {0:.3f}".format(i1)) print("Integrale di g(t,2.0,1.7) tra 0 ed 1 con 100 intervalli = {0:.3f}".format(i2))