Sympy 允许定义整数符号,但不考虑它们的行为

use*_*882 7 python sympy

我有以下一组命令来做一个定积分

n [2]: from sympy import *
init_printing()

x,L = symbols('x, L')
n = symbols('n', integer = True)

exp = sin((n+Rational(1,2))*pi*x/L)**2
integrate(exp, (x,0,L))
Run Code Online (Sandbox Code Playgroud)

这些命令的结果如下所示:

在此处输入图片说明

第一个结果意味着 n=-1/2 这意味着 n 不是整数。如果在如上所示的操作中不考虑它,则为符号提供整数属性有什么意义?如果 n 是整数,我如何强制 sympy 认识到分段结果的第一部分是不可能的?

smi*_*chr 7

如果已经评估了等式,则此条件将被拒绝,并且 Piecewise 将评估为您的预期结果。因为 SymPy 不知道您的 L 是否为零,所以它无法评估该相等性。

所以试试

>>> n = var('n', integer=True)
>>> L = var('L', nonzero=True)
>>> exp = sin((n+Rational(1,2))*pi*x/L)**2
>>> integrate(exp, (x,0,L))
L/2
Run Code Online (Sandbox Code Playgroud)

你去吧!:-)(但是请注意,仅仅说 L 是有限的就应该足以知道等式永远不会为真,但是 SymPy 也无法评估该条件。)

/C