I'm using scipy.integrate.dblquad
, and I get this error:
UserWarning: The maximum number of subdivisions (50) has been achieved.
If increasing the limit yields no improvement ...
I want to increase this limit to see if the integral is well-converged. The documentation specifies how to do this for scipy.integrate.quad
(that function takes the maximum number of iterations as an argument), but not for scipy.integrate.dblquad
. How can I increase the number of subdivisions for dblquad
?
The scipy. integrate sub-package provides several integration techniques including an ordinary differential equation integrator. An overview of the module is provided by the help command: >>> help(integrate) Methods for Integrating Functions given function object.
dblquad() method, we can get the double integration of a given function from limit a to b by using scipy. integrate. dblquad() method. Return : Return the double integrated value of a polynomial.
Numerical integrationis provided by the quad() function of the scipy. integrate module. It takes as input arguments the function f(x) to be integrated (the “integrand”), and the lower and upper limits a and b.
A simpler way of doing this is to use the nquad
function instead of dblquad
. Example code:
from scipy.integrate import nquad
options={'limit':100}
integral=nquad(func,[[xmin,xmax],[ymin,ymax]],
args=(other_arg,),opts=[options,options])
Note that several of the arguments are lists. The elements of these lists apply to each of the coordinates in order. See the documentation for nquad here.
According to the source code, dblquad
calls quad
, reading, simply:
return quad(_infunc,a,b,(func,gfun,hfun,args),epsabs=epsabs,epsrel=epsrel)
Therefore, you could implement this directly yourself with the additional maxp1
argument.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With