sympy 定义积分常见三角函数结果不如预期

0 投票
1 回答
38 浏览
提问于 2025-04-14 17:28

我正在尝试用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错误地把积分计算成了分段函数,而实际上对于任何整数nintegral的值应该是直接为零。然后当我把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

撰写回答