sympy 定义积分常见三角函数结果不如预期
我正在尝试用sympy计算cos(n*theta)
的定积分。下面是我的代码片段。
import sympy as sp
theta = sp.symbols('theta')
n = sp.symbols('n', integer=True, nonnegative=True)
integrand = sp.cos(n*theta)
integral = sp.integrate(integrand, (theta, 0, 2*sp.pi))
print(integral)
print(integral.subs(n,0))
这个脚本的输出结果是:
Piecewise((0, Ne(n, 0)), (2*pi, True))
2*pi
在这里,sympy错误地把积分计算成了分段函数,而实际上对于任何整数n
,integral
的值应该是直接为零。然后当我把n=0
代入时,它却给出了一个非零的答案。我希望integral
对于任何整数值的n
都是零。请问该怎么做呢?
1 个回答
2
问题是:
我希望积分在任何整数值的情况下都为零。
但是,当n = 0
时,积分的结果并不是零,因此SymPy返回的结果在数学上是正确的,不管你想要的是什么。
如果你想排除n = 0
的情况,那么你可以把n
声明为非零或者正数,而不是非负数:
In [8]: n = symbols('n', integer=True, nonzero=True)
In [9]: integrate(cos(n*theta), (theta, 0, 2*pi))
Out[9]: 0