5

我想使用 sympy 库将 exp(-(x^2 + y^2)) 集成到 python 中。我可以找到 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不能取积分!

4

2 回答 2

7

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

DSM 是正确的,您可以通过调用 expand 来使其工作,并且没有通用的方法可以做到这一点(因为通常,积分没有封闭形式)。

我只是想指出,如果 SymPy 不能进行具有封闭形式的积分,我们认为这是一个错误,您应该随时在http://code.google.com/p/sympy/issues报告它.

于 2012-08-30T01:29:30.110 回答
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))
于 2012-08-29T02:03:36.970 回答