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
以及 numpy
和 scipy
(您导入但不使用)。
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
以及 numpy
和 scipy
(您导入但不使用)。