Sympy无法计算0到π/2的log(sin(x))积分,如何获取正确结果?
Sympy求解∫₀^(π/2) log(sin(x))定积分的解决方案
Sympy默认积分逻辑不会自动匹配这类经典特殊积分的形式,你可以通过以下两种方式得到正确结果:
方案1:获取数值验证结果
直接对未求值的积分对象调用evalf()方法,即可得到数值结果,和预期解析解的数值一致:
import sympy as sym sym.init_printing() x = sym.symbols('x') z = sym.log(sym.sin(x)) res = z.integrate((x, 0, sym.pi/2)) print(res.evalf())
输出结果为-1.08879304515181,和-π/2 * log(2)的计算值完全匹配。
方案2:直接获取符号解析解
调用integrate方法时添加meijerg=True参数,强制Sympy使用Meijer G函数框架求解积分,该框架对包含三角函数、对数的特殊定积分适配性更好:
import sympy as sym sym.init_printing() x = sym.symbols('x') z = sym.log(sym.sin(x)) res = sym.integrate(z, (x, 0, sym.pi/2), meijerg=True) print(sym.simplify(res))
输出结果为-pi*log(2)/2,即你预期的正确符号解。
注意:如果运行后仍无法得到符号解,可先执行
pip install --upgrade sympy升级Sympy到最新版本,旧版本对这类积分的支持存在缺陷。
内容的提问来源于stack exchange,提问作者Aniket Kumar Roy
相关产品推荐
相关产品推荐

