2012-08-29 22 views
5

Quiero integrar exp (- (x^2 + y^2)) en python usando la biblioteca sympy. que pude encontrar la integral de exp (- (x^2))Integración simbólica en Python usando Sympy

>>> B1 = sympy.exp(-alpha1 * (r1_x**2)) 
>>> p = integrate(B1,r1_x) 
>>> p 
pi**(1/2)*erf(alpha1**(1/2)*r1_x)/(2*alpha1**(1/2)) 

Pero cuando quiero intentar integrar exp (- (x^2 + y^2))

>>> B1 = sympy.exp(-alpha1 * (r1_x**2 + r1_y**2)) 
>>> p = integrate(B1,r1_x) 
>>> p 
Integral(exp(-alpha1*(r1_x**2 + r1_y**2)), r1_x) 

¡No hay salida y Python no puede tomar la integral!

+1

En general, no existe una solución de formulario cerrada para esta integral. – unutbu

Respuesta

3

sympy no siempre reconoce todas las formas, y por lo tanto a veces hay que darle un poco de ayuda:

>>> import sympy 
>>> alpha1, r1_x, r1_y = sympy.var("alpha1 r1_x r1_y") 
>>> B1 = sympy.exp(-alpha1 * (r1_x**2 + r1_y**2)) 
>>> B1.integrate(r1_x) 
Integral(exp(-alpha1*(r1_x**2 + r1_y**2)), r1_x) 
>>> B1.expand(alpha1) 
exp(-alpha1*r1_x**2)*exp(-alpha1*r1_y**2) 
>>> B1.expand(alpha1).integrate(r1_x) 
sqrt(pi)*exp(-alpha1*r1_y**2)*erf(sqrt(alpha1)*r1_x)/(2*sqrt(alpha1)) 
+0

Gracias, ¿hay una manera general de esto? Dado que la ecuación aquí es fácil, ¿qué debo hacer para las ecuaciones delicadas? – Hesam

+1

No es que yo sepa; y prepárate para experimentar ¡Siento ser el portador de malas noticias! – DSM

+1

'B1.expand (alpha1)' debería ser 'B1.expand()'. Los argumentos de expandir son solo sugerencias. – asmeurer

6

(yo soy el desarrollador principal de sympy)

DSM es correcto que se puede hacer que esto funcione llamando a expandir, y que no hay una forma general de hacerlo (porque, en general, las integrales no tienen formularios cerrados).

Solo quería señalar que si SymPy no puede hacer una integral que sí tiene un formulario cerrado, consideramos que se trata de un error y no dude en denunciarlo al http://code.google.com/p/sympy/issues.

+0

En realidad, traté de resolver con python, matlab y mathematica y tengo la sensación de que estos softwares tienen diferentes algoritmos para evaluar las integrales. De todos modos, prefiero usar Python ya que quiero llamarlo desde mi programa C++. – Hesam