我正在尝试使用sympy计算积分,这是我的代码:
import sympy as sp
from scipy.integrate import quad
import math
def f(x):
return math.exp(-2.0*math.pi*sp.I*x*n)
x = sp.Symbol('x')
n = sp.Symbol('n')
res,err = quad(f,0,1)
print(res)
它在f(x)内给了TypeError: can't convert expression to float
,我该如何解决?
尝试解决此问题:e^(-2*pi*n*I*x)
相对于x的积分范围为0到1
不支持数学ajax:$$ \ int_0 ^ 1 e ^ {-2 \ pi inx} dx $$
如果我只写math.exp(-2.0*math.pi*x)
可以用,但是如果我写math.exp(-2.0*math.pi*sp.I)
或math.exp(-2.0*math.pi*n)
则不可以,也不能用于其他组合。
答案 0 :(得分:2)
Sympy无法使用数学导入,您需要特定的sympy函数。 sympy和scipy不能很好地配合使用。
一个纯粹的sympy解决方案:
import sympy as sp
def f(x):
return sp.exp(-2.0*sp.pi*sp.I*x*n)
x = sp.Symbol('x')
n = sp.Symbol('n')
res = sp.integrate(f(x), (x, 0, 1))
输出:
Piecewise((-0.5*I/(pi*n) + 0.5*I*exp(-2.0*I*pi*n)/(pi*n), (n > -oo) & (n < oo) & Ne(n, 0)), (1, True))
如果您知道n = sp.Symbol('n', nonzero=True)
永远不会为零,请使用n
,从而将输出简化为-0.5*I/(pi*n) + 0.5*I*exp(-2.0*I*pi*n)/(pi*n)
然后,您可以使用sympy的lambdify
将结果转换为普通的python函数n
。