使用 Sympy 在 Python 中进行符号集成
Posted
技术标签:
【中文标题】使用 Sympy 在 Python 中进行符号集成【英文标题】:Symbolic Integration in Python using Sympy 【发布时间】:2012-08-23 14:05:30 【问题描述】:我想使用 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不能取积分!
【问题讨论】:
一般来说,这个积分没有闭式解。 【参考方案1】:(我是 SymPy 的首席开发人员)
DSM 是正确的,您可以通过调用 expand 来使其工作,并且没有通用的方法可以做到这一点(因为通常,积分没有封闭形式)。
我只是想指出,如果 SymPy 无法进行具有封闭形式的积分,我们认为这是一个错误,您可以随时通过 http://code.google.com/p/sympy/issues 报告它。
【讨论】:
其实我尝试用python、matlab和mathematica解决,我感觉这些软件有不同的算法来评估积分。无论如何,我更喜欢使用 python,因为我想从我的 c++ 程序中调用它。【参考方案2】: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))
【讨论】:
谢谢,有通用的方法吗?既然这里的方程很简单,那么对于微妙的方程我该怎么办? 我不知道;并准备好进行实验。很抱歉成为坏消息的承担者!B1.expand(alpha1)
应该只是 B1.expand()
。 expand 的参数只是提示。以上是关于使用 Sympy 在 Python 中进行符号集成的主要内容,如果未能解决你的问题,请参考以下文章