Skip to main content
 首页 » 编程设计

Python (+SymPy) : How to get the same result as in Mathematica

2025年05月04日22lhb25

我使用 Mathematica 和 Python 计算了以下内容。

Mathematica 使用以下代码

f[x_] = a*b/(a - b)^2*Exp[-r*x] (Exp[-b*x] - Exp[-a*x]) (a*Exp[-b*x] - b*Exp[-a*x]) 
Assuming[{a > 0, b > 0, r > 0}, Integrate[f[x], {x, 0, \[Infinity]}]] 

给出了一个相当不错的结果:

但是,下面的 Python(带有 SymPy)代码

from sympy import * 
init_printing() 
x = symbols('x') 
a, b, r = symbols('a b r', positive=True) 
fun = a*b/((a-b)**2) * exp(-r*x) * (exp(-b*x) - exp(-a*x)) * (a*exp(-b*x) - b*exp(-a*x)) 
simplify(integrate(fun, (x, 0, oo))) 

生成一个相当困惑的结果:

为了在 Mathematica 中获得相同的结果,我在 Python 代码中缺少什么?或者根本不可能吗?

请您参考如下方法:

函数cancel可用于抵消分数:

from sympy import * 
init_printing() 
x = symbols('x') 
a, b, r = symbols('a b r', positive=True) 
fun = a*b/((a-b)**2) * exp(-r*x) * (exp(-b*x) - exp(-a*x)) * (a*exp(-b*x) - b*exp(-a*x)) 
factor(cancel(integrate(fun, (x, 0, oo))) 

给予

      a⋅b⋅(2⋅a + 2⋅b + r) 
─────────────────────────────── 
(2⋅a + r)⋅(2⋅b + r)⋅(a + b + r)