[Scipy-tickets] [SciPy] #1573: Proposed n-space integrator for quadpack.py
SciPy Trac
scipy-tickets@scipy....
Wed Dec 7 19:05:39 CST 2011
#1573: Proposed n-space integrator for quadpack.py
-------------------------------------------------------+--------------------
Reporter: trobinso | Owner: somebody
Type: enhancement | Status: new
Priority: low | Milestone: 0.11.0
Component: scipy.integrate | Version: devel
Keywords: multiple integration, quadpack, integrate |
-------------------------------------------------------+--------------------
While working with a multivariate information problem for a paper yet to
be defined, I wrote a useful multivariate integrator for n integrations
over n variables. The following is my rough code, as based on ''dblquad''
and ''tplquad'' in ''scipy/integrate/quadpack.py'':
{{{
def _infuncn(x,func,gfun,hfun,count,epsabs,epsrel,more_args):
a = gfun(x)
b = hfun(x)
myargs = (x,) + more_args
if count == 1:
return quad(func,a,b,args=myargs,epsabs=epsabs,epsrel=epsrel)[0]
else:
return
quad(_infuncn,a,b,(func,a,b,count-1,epsabs,epsrel,args),epsabs=epsabs,epsrel=epsrel)
def nquad(func, a, b, args=(), epsabs=1.49e-8, epsrel=1.49e-8, count=2)
''' Recursive, N-depth integrator with number of variables given '''
# Preconditions
if not isinstance( count, int )
raise TypeError('Variable "count" must be an integer value')
if count < 2:
raise ValueError('Variable "count" must be at least 2 to perform \
meaningful multivariate integration. Consider using quad(...)
instead.')
return
quad(_infuncn,a,b,(func,a,b,count-1,epsabs,epsrel,args),epsabs=epsabs,epsrel=epsrel)
}}}
This form makes several assumptions for simplicity's sake:
1) epsabs and epsrel are the same value for all integrations
2) a and b define static bounds for all integrations
3) In cases where fewer than two integrations are desired, ''quad'' should
be used instead.
It's a simple thing that I'd like to contribute back to the project. I
expect it can be made more robust by your team; in its current form, it
proves quite useful for n-interaction information (that is, n-term mutual
information for every n+1).
--
Ticket URL: <http://projects.scipy.org/scipy/ticket/1573>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.
More information about the Scipy-tickets
mailing list