Sha*_*ant 5 python numpy ipython scipy quad
以下示例在Scipy参考页面上提供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]])
Run Code Online (Sandbox Code Playgroud)
以下是我从IPython笔记本上得到的错误(在cloud.sagemath.com上):

我的猜测是cloud.sagemath.com没有升级到最新版本,Scipy因此缺少模块nquad.但是,我需要的只是两个变量的集成,因此想要使用dblquad已经在云上可用的变量.
因此,我修改了最后一行以适应dblquad语法,如下所示:

但它仍然会出现错误:TypeError: 'int' object is not callable.我的脚本中有什么错误?我已粘贴下面的整个错误消息:
---------------------------------------------------------------------------
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
Run Code Online (Sandbox Code Playgroud)
编辑1:我做了使用了用户的输入工作的脚本Weckesser和Chen.只是为了对任何在将来绊倒这个问题的人的完整性.
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
Run Code Online (Sandbox Code Playgroud)
dblquad 的签名是
integrate.dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)
Run Code Online (Sandbox Code Playgroud)
gfun : 可调用
y 中的下边界曲线是一个采用单个浮点参数 (x) 并返回浮点结果的函数:lambda 函数在这里很有用。
hfun : 可调用
y 中的上边界曲线(与 的要求相同gfun)。
所以需要将 gfun 和 hfun 替换为函数。
| 归档时间: |
|
| 查看次数: |
12379 次 |
| 最近记录: |