11

Estoy tratando de integrar una función multivariable en SciPy en un área 2D. ¿Cuál sería el equivalente al siguiente código Mathematica?integrales 2D en SciPy

In[1]:= F[x_, y_] := Cos[x] + Cos[y] 

In[2]:= Integrate[F[x, y], {x, -\[Pi], \[Pi]}, {y, -\[Pi], \[Pi]}] 

Out[2]= 0 

Mirando el SciPy documentation sólo podía encontrar apoyo para cuadratura unidimensional. ¿Hay alguna manera de hacer integrales multidimensionales en SciPy?

Respuesta

12

creo que funcionaría así:

def func(x,y): 
    return cos(x) + cos(y) 

def func2(y, a, b): 
    return integrate.quad(func, a, b, args=(y,))[0] 

print integrate.quad(func2, -pi/2, pi/2, args=(-pi/2, pi/2))[0] 

Wolfram|Alpha agrees

edición: acabo de descubrir dblquad que parece hacer exactamente lo que quiere:

print integrate.dblquad(func, -pi/2, pi/2, lambda x:-pi/2, lambda x:pi/2)[0] 
+0

Esto funciona. Sin embargo, voy a integrar la función en cientos de miles de celdas pequeñas. ¿No sería demasiado lento ya que implicaría llamar a una función de pitón? – dzhelil

+0

No sé si integrate.quad vectorizará internamente la función o no. Sé que integration.quadrature sí, pero me salió un error cuando lo intenté en una doble integral. Siempre puedes hacer que la integración sea más rápida al aumentar la tolerancia. O mejor aún, ¡encuentre una solución exacta! – Paul

9

Si desea para hacer una integración simbólica, eche un vistazo a sympy (code.google.com/p/sympy):

import sympy as s 
x, y = s.symbols('x, y') 
expr = s.cos(x) + s.sin(y) 
expr.integrate((x, -s.pi, s.pi), (y, -s.pi, s.pi)) 
+0

Debe haber un espacio entre xey en 'xy'. – MOON

+0

Gracias, arreglé el problema. –