在sympy中集成不适用于x * cos(n * pi * x / L),但DOES适用于sqrt(1。)* x * cos(n * pi * x / L)。请参阅下面的代码段

时间:2014-02-13 03:31:05

标签: python sympy integrate

代码段1:

from sympy import symbols, integrate, cos, pi
from numpy import sqrt
n = symbols('n', integer=True)
x, L = symbols('x L', real=True)
fs_coeff = integrate(sqrt(1.)*x*cos(n*pi*x/L), (x, 0, L))
print fs_coeff

我得到了:

-1.0 *分段((0,n == 0),(0.101321183642338 * L * 2 / n * 2,真))+ 1.0 *分段((L ** 2/2) ,n == 0),(0.318309886183791 * L ** 2 * sin(3.14159265358979 * n)/ n + 0.101321183642338 * L ** 2 * cos(3.14159265358979 * n)/ n ** 2,真))

代码段2:

from sympy import symbols, integrate, cos, pi
from numpy import sqrt
n = symbols('n', integer=True)
x, L = symbols('x L', real=True)
fs_coeff = integrate(x*cos(n*pi*x/L), (x, 0, L))
print fs_coeff

我收到错误:

追踪(最近一次呼叫最后一次):

文件“test-sympy.py”,第6行,

fs_coeff = integrate(x * cos(n * pi * x / L),(x,0,L))

...

ValueError:要解压缩的值太多

我正在使用最新的Enthought Canopy python发行版,1.3版。 Python版本2.7.6,SymPy 0.7.3。

如果您对此有任何见解,我会很感激。

2 个答案:

答案 0 :(得分:2)

SymPy 0.7.3不是最新版本。在0.7.4.1中尝试一下。这是一个已修复的错误。

>>> fs_coeff = integrate(x*cos(n*pi*x/L), (x, 0, L))
>>> fs_coeff
Piecewise((L**2/2, n == 0), ((-1)**n*L**2/(pi**2*n**2) - L**2/(pi**2*n**2), True))

答案 1 :(得分:0)

问题似乎在于n=0的分段间隔的处理,当使用精确数学时会中断,但不会使用近似数学。 sqrt不是必需的,您可以使用1.*x*cos(n*pi*x/L)获得相同的结果。由于您不太可能需要n=0,因此您可以通过将n限制为正面来获得一个干净利落的答案:

from sympy import symbols, integrate, cos, pi
from numpy import sqrt
n = symbols('n', integer=True, positive=True)
x, L = symbols('x L', real=True)
fs_coeff = integrate(x*cos(n*pi*x/L), (x, 0, L))
print fs_coeff