使用 sympy 更有效地集成表达式

Integrate expression more effectively with sympy

我正在尝试与 Sympy 进行以下集成:

import sympy as sp
sp.var('a e nu lamb omeg')
r = a*(1.-e**2)/(1. + e*sp.cos(lamb-omeg))
I = sp.integrate(r**2, lamb)

然后发生的事情是处理器保持在 100% 的状态几分钟,我的笔记本电脑变热,最后我厌倦了等待并放弃了。

令人惊讶的是,当我与 Maxima 进行相同的集成时,我几乎立即得到了结果。唯一的区别是 Maxima 问我 e**2-1 是正数还是负数。

如何使用 Sympy 获得相同的功能?为什么这不会自动发生?

显然,可以通过对常数进行假设来完成,尽管这与 Maxima 使用的假设不同:

import sympy as sp
sp.var('a e nu lamb omeg', positive=True, real=True)
r = a*(1.-e**2)/(1. + e*sp.cos(lamb-omeg))
I = sp.integrate(r**2, lamb)