sympy TypeError:无法将表达式转换为浮点型

时间:2019-12-23 17:52:59

标签: python python-3.x sympy

我正在尝试使用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)则不可以,也不能用于其他组合。

1 个答案:

答案 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