使用Sympy进行Python中的符号集成

时间:2012-08-29 01:49:08

标签: python math symbols sympy

我想使用sympy库在python中集成exp( - (x ^ 2 + y ^ 2))。 我可以找到exp( - (x ^ 2))

的积分
>>> 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))

但是当我想尝试整合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)

没有输出,python无法获取积分!

2 个答案:

答案 0 :(得分:6)

(我是SymPy的首席开发人员)

DSM是正确的,您可以通过调用expand来使其工作,并且没有通用的方法来执行此操作(因为通常,积分没有封闭的表单)。

我只是想指出,如果SymPy不能做一个封闭形式的积分,我们认为这是一个错误,你可以随时在http://code.google.com/p/sympy/issues报告。

答案 1 :(得分:3)

sympy并不总能识别每种形式,所以有时你必须给它一点帮助:

>>> 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))