sympy.integrate 和 Heaviside 的奇怪结果

Weird results from sympy.integrate and Heaviside

我使用 Heaviside 集成到 sympy 中得到了奇怪的结果。这是我的代码:

import sympy as sp
x = sp.symbols('x')
L=1
def q(x): return (x-1/L)*sp.Heaviside(x-1/L)
def V(foo): return sp.integrate(q(x),(x,foo))
display(V(x))

如果我 运行 这个,它就有效。但是,如果我将 L 更改为 2,它就会崩溃。为什么这很重要?

这是一个错误,但有一种方法可以解决它,即显式重写为 Piecewise:

In [39]: expr
Out[39]: (x - 0.5)⋅θ(x - 0.5)

In [40]: expr.rewrite(Piecewise)
Out[40]: 
          ⎛⎧ 0    for x - 0.5 < 0⎞
          ⎜⎪                     ⎟
(x - 0.5)⋅⎜⎨θ(0)  for x - 0.5 = 0⎟
          ⎜⎪                     ⎟
          ⎝⎩ 1    for x - 0.5 > 0⎠

In [41]: expr.rewrite(Piecewise).integrate(x)
Out[41]: 
⎧          0             for x < 0.5
⎪                                   
⎨     2                             
⎪0.5⋅x  - 0.5⋅x + 0.125   otherwise 
⎩  

禁用 meijerg 算法也给出了正确的结果:

In [44]: integrate(expr, meijerg=False)
Out[44]: 
⎛ 2                ⎞           
⎜x                 ⎟           
⎜── - 0.5⋅x + 0.125⎟⋅θ(x - 0.5)
⎝2                 ⎠