Dan*_*Dan 9 python integral scipy numerical-methods
我正在使用scipy.integrate.dblquad,我收到此错误:
UserWarning: The maximum number of subdivisions (50) has been achieved.
If increasing the limit yields no improvement ...
Run Code Online (Sandbox Code Playgroud)
我想增加这个限制,看看积分是否融合良好.该文档指定了如何执行此操作scipy.integrate.quad(该函数将最大迭代次数作为参数),但不是scipy.integrate.dblquad.如何增加细分数量dblquad?
更简单的方法是使用nquad函数而不是dblquad.示例代码:
from scipy.integrate import nquad
options={'limit':100}
integral=nquad(func,[[xmin,xmax],[ymin,ymax]],
args=(other_arg,),opts=[options,options])
Run Code Online (Sandbox Code Playgroud)
请注意,有几个参数是列表.这些列表的元素按顺序应用于每个坐标.请在此处查看nquad的文档.
根据该源代码,dblquad 电话 quad,阅读,简单地说:
return quad(_infunc,a,b,(func,gfun,hfun,args),epsabs=epsabs,epsrel=epsrel)
Run Code Online (Sandbox Code Playgroud)
因此,您可以自己使用附加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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7323 次 |
| 最近记录: |