我正在使用scipy.integrate.dblquad
,我收到此错误:
UserWarning: The maximum number of subdivisions (50) has been achieved.
If increasing the limit yields no improvement ...
我想增加此限制以查看积分是否收敛良好。 documentation指定了如何为scipy.integrate.quad
执行此操作(该函数将最大迭代次数作为参数),但不是scipy.integrate.dblquad
。如何增加dblquad
的细分数量?
答案 0 :(得分:6)
更简单的方法是使用nquad
函数代替dblquad
。示例代码:
from scipy.integrate import nquad
options={'limit':100}
integral=nquad(func,[[xmin,xmax],[ymin,ymax]],
args=(other_arg,),opts=[options,options])
请注意,有几个参数是列表。这些列表的元素按顺序应用于每个坐标。请参阅nquad here的文档。
答案 1 :(得分:4)
根据source code,dblquad
来电 quad
,只需阅读:
return quad(_infunc,a,b,(func,gfun,hfun,args),epsabs=epsabs,epsrel=epsrel)
因此,您可以使用附加的maxp1
参数直接实现此操作。
from scipy import integrate
def _infunc(x,func,gfun,hfun,more_args):
a = gfun(x)
b = hfun(x)
myargs = (x,) + more_args
return quad(func,a,b,args=myargs)[0]
def custom_dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-8,
epsrel=1.49e-8, maxp1=50, limit=50):
return integrate.quad(_infunc, a, b, (func, gfun, hfun, args),
epsabs=epsabs, epsrel=epsrel, maxp1=maxp1, limit=limit)