代码段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。
如果您对此有任何见解,我会很感激。
答案 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