TypeError: can't convert expression to float - definite integral sympy

TypeError: can't convert expression to float - definite integral sympy

import math

import scipy.integrate

import sympy

m1 = sympy.Symbol('m1')

m2 = sympy.Symbol('m2')

s = sympy.Symbol('s')

T = sympy.Symbol('T')

k = sympy.Symbol('k')

integral = sympy.integrate(((k**2)/8 * math.pi)*(1/(math.sqrt(k**2 + m1**2) * math.sqrt(k**2 + m2**2)))*(1/(math.sqrt(s)-math.sqrt(k**2 + m1**2)-math.sqrt(k**2 + m2**2)))
                         * ((1/(math.exp((math.sqrt(k**2 + m1**2))/T)-1))+(1/(math.exp((math.sqrt(k**2 + m2**2))/T)-1))), (k, 10**-15, math.inf))
print(integral)

说明`@Oscar 的评论

In [28]: math.sqrt(s)                                                                    
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-28-443c32f84854> in <module>
----> 1 math.sqrt(s)

/usr/local/lib/python3.6/dist-packages/sympy/core/expr.py in __float__(self)
    323         if result.is_number and result.as_real_imag()[1]:
    324             raise TypeError("can't convert complex to float")
--> 325         raise TypeError("can't convert expression to float")
    326 
    327     def __complex__(self):

TypeError: can't convert expression to float

你的错误的回溯(你应该已经显示!!)与此类似。

改用sympy.sqrt

In [29]: sqrt(s)                                                                         
Out[29]: √s

math.sqrt(和其他函数)是一个数字运算符。它需要一个数字, returns 也是一个。给它一个 Symbol 会产生这个错误。

将数字函数与符号函数混合使用时要小心。这适用于 math 以及 numpyscipy(您导入但不使用)。