有时Sympy会给我一些替代答案,具体取决于函数参数,例如
integrate(sin(pi*x/L), (x, 0, L))
⎧ π
⎪ 0 for ─ = 0
⎪ L
⎨
⎪2⋅L
⎪─── otherwise
⎩ π
我知道值L
是正数并且是有限的,因此第一个答案与我无关...我如何告诉Sympy π/L
严格大于零,或者,正如我在标题中所述,L
有界吗?
答案 0 :(得分:2)
SymPy符号也可以表示无穷大(oo
,-oo
,zoo
)。可以对这些进行一些算术运算。当L为无穷大时,pi / L为零,因此我们得到的积分为0,即为零。从这个意义上说,SymPy的答案是正确的。如果L表示是有限的,则用
L = symbols("L", finite=True)
足以获得2*L/pi
的答案。
或者您可以保留L并告诉SymPy不用担心积分的conds="none"
参数的边缘情况。
integrate(sin(pi*x/L), (x, 0, L), conds="none") # 2*L/pi
此外:real=True
并不排除L是oo
或-oo
的可能性,因为它们被认为是真实的:oo.is_real
是True(这是一个有争议的观点SymPy开发)。