sympy.integrate 和 Heaviside 的奇怪结果

问题描述 投票:0回答:1

我使用 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,它就会崩溃。为什么这很重要?

python sympy symbolic-integration
1个回答
1
投票

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

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                 ⎠  
© www.soinside.com 2019 - 2024. All rights reserved.