Das folgende Beispiel wird auf der Referenzseite Scipy
für integration
bereitgestellt.Wie verwende ich dblquad für die doppelte Integration?
from scipy import integrate
N = 5
def f(t, x):
return np.exp(-x*t)/t**N
integrate.nquad(f, [[1, np.inf],[0, np.inf]])
Im Folgenden ist der Fehler, den ich von meinem IPython
Notebook (auf cloud.sagemath.com) erhalten:
Es ist meine Vermutung, dass cloud.sagemath.com
auf die neueste Version von Scipy
nicht aktualisiert wird und daher Es fehlt das Modul für nquad
. Alles, was ich brauche, ist die Integration über zwei Variablen und daher wollte ich dblquad
verwenden, die bereits in der Cloud verfügbar ist.
Daher geändert ich die letzte Zeile der dblquad
Syntax zu entsprechen, wie unten dargestellt:
Aber es erscheint immer noch den Fehler auf: TypeError: 'int' object is not callable
. Was ist der Fehler in meinem Skript? Ich habe die gesamte Fehlermeldung unten eingefügt:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-2d0c5cf05694> in <module>()
4 def f(t, x):
5 return np.exp(-x*t)/t**N
----> 6 integrate.dblquad(f,1, np.inf,0, np.inf)
/usr/local/sage/sage-6.2.rc0/local/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc in dblquad(func, a, b, gfun, hfun, args, epsabs, epsrel)
424
425 """
--> 426 return quad(_infunc,a,b,(func,gfun,hfun,args),epsabs=epsabs,epsrel=epsrel)
427
428 def _infunc2(y,x,func,qfun,rfun,more_args):
/usr/local/sage/sage-6.2.rc0/local/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
246 if type(args) != type(()): args = (args,)
247 if (weight is None):
--> 248 retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,points)
249 else:
250 retval = _quad_weight(func,a,b,args,full_output,epsabs,epsrel,limlst,limit,maxp1,weight,wvar,wopts)
/usr/local/sage/sage-6.2.rc0/local/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)
313 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
314 else:
--> 315 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
316 else:
317 if infbounds !=0:
/usr/local/sage/sage-6.2.rc0/local/lib/python2.7/site-packages/scipy/integrate/quadpack.pyc in _infunc(x, func, gfun, hfun, more_args)
371
372 def _infunc(x,func,gfun,hfun,more_args):
--> 373 a = gfun(x)
374 b = hfun(x)
375 myargs = (x,) + more_args
TypeError: 'int' object is not callable
Edit 1: Ich habe ein funktionierendes Script die Eingaben von den Benutzern Weckesser
und Chen
verwenden. Nur der Vollständigkeit halber für jeden, der in Zukunft auf diese Frage stolpert.
import numpy as np
from scipy import integrate
N=5
def f(t, x):
return np.exp(-x*t)/t**N
R1=integrate.dblquad(f,0, np.inf,lambda x: 1, lambda x: np.inf)
print R1