How can I increase the number of subdivisions for functions in `scipy.integrate.dblquad`?
Asked Answered
S

2

19

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?

Shuck answered 3/1, 2014 at 23:58 Comment(0)
S
16

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.

Shuck answered 2/4, 2014 at 1:0 Comment(0)
D
7

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)
Decalcify answered 4/1, 2014 at 0:10 Comment(4)
Do you know of any ways to do this that don't involve modifying the source code?Shuck
I don't mean modify the source code, I mean call quad with those arguments, plus maxpl, yourself.Decalcify
I've added an example implementationDecalcify
@jonrsharpe, would you be able please to write an implementation of the above for the current dblquad ? Thank you github.com/scipy/scipy/blob/v1.7.0/scipy/integrate/…Vic

© 2022 - 2024 — McMap. All rights reserved.