Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:无法将表达式转换为浮点_Python_Python 2.7_Numpy_Scipy_Sympy - Fatal编程技术网

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

Python TypeError:无法将表达式转换为浮点,python,python-2.7,numpy,scipy,sympy,Python,Python 2.7,Numpy,Scipy,Sympy,我是python新手。我试图用python计算普朗克方程。我写了一个简单的程序。但当我给它输入时,它给了我一个错误。有人能告诉我哪里出了问题吗?以下是程序和错误: 节目: from __future__ import division from sympy.physics.units import * from math import * import numpy from scipy.interpolate import interp1d #Planck's Law evaluation a

我是python新手。我试图用python计算普朗克方程。我写了一个简单的程序。但当我给它输入时,它给了我一个错误。有人能告诉我哪里出了问题吗?以下是程序和错误:

节目:

from __future__ import division
from sympy.physics.units import *
from math import *
import numpy
from scipy.interpolate import interp1d

#Planck's Law evaluation at a single wavelength and temperature
def planck_law(wavelength,temperature):
    T=temperature
    f=c/wavelength
    h=planck
    k=boltzmann
    U=2*h/(c**3)*(f**3)/(exp(h*f/(k*T))-1)
    return U.evalf()
输入: 我已将函数作为“cp”导入,输入如下

value = (cp.planck_law(400,2000))
错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>`enter code here`
  File "Camera_performance.py", line 14, in planck_law
  U=2*h/(c**3)*(f**3)/(exp(h*f/(k*T))-1)
  File "/usr/lib/python2.7/dist-packages/sympy/core/expr.py", line 221, in __float__
  raise TypeError("can't convert expression to float")

TypeError: can't convert expression to float
你的术语h*f/k*T不是无单位的,所以你不能将它传递给exp。在物理上下文中也没有意义-

如果将其除以K和m,可以得到一个结果:

但这毫无意义。这只是为了让程序变得毫无意义

我想你必须检查你的公式,找出你真正想要如何计算你想要传递给exp的值

编辑:

正如Pascal指出的,您只是缺少了传递的参数的单位。尝试以下方法:

planck_law(400e-9*m,2000*K)
返回:

3.20224927538564e-22*kg/(m*s)
你的术语h*f/k*T不是无单位的,所以你不能将它传递给exp。在物理上下文中也没有意义-

如果将其除以K和m,可以得到一个结果:

但这毫无意义。这只是为了让程序变得毫无意义

我想你必须检查你的公式,找出你真正想要如何计算你想要传递给exp的值

编辑:

正如Pascal指出的,您只是缺少了传递的参数的单位。尝试以下方法:

planck_law(400e-9*m,2000*K)
返回:

3.20224927538564e-22*kg/(m*s)

调用函数时,需要将单位传递给温度和波长参数。调用cp.planck_law400*meters,2000*K得到预期的1.15133857387385e-33*kg/m*s


问题出现在指数函数上,它理所当然地期望得到一个无量纲的参数。由于您传递的参数不包括单位,Symphy将其视为无量纲浮点,而不是要求的温度和长度。

调用函数时,需要将单位传递给温度和波长参数。调用cp.planck_law400*meters,2000*K得到预期的1.15133857387385e-33*kg/m*s


问题出现在指数函数上,它理所当然地期望得到一个无量纲的参数。由于您传递的参数不包括单位,Symphy将它们视为无量纲浮点,而不是要求的温度和长度。

似乎您在混合名称空间,因为您使用的是from。。。导入*。您想使用sympy.exp,但代码使用math.exp。将名称空间分隔开是一种很好的做法,即永远不要使用。。。import*-一开始似乎需要更多的输入,但最终会生成更干净、更容易理解的代码。 尝试:


似乎您正在混合名称空间,因为您正在使用来自。。。导入*。您想使用sympy.exp,但代码使用math.exp。将名称空间分隔开是一种很好的做法,即永远不要使用。。。import*-一开始似乎需要更多的输入,但最终会生成更干净、更容易理解的代码。 尝试:


hf/kT在物理上是无单元的。问题是OP没有通过T和f的正确单位。hf/kT在物理上是无单位的。问题是OP没有为T和f传递正确的单位。首先,不要使用sympy,因为它非常慢,并且使用自己的数据类型。从scipy.constants您也可以获得常量,它们是numpy浮点。另一件事是首先使用numpy.exp而不是math.exp:不要使用sympy,因为它非常慢,并且使用自己的数据类型。从scipy.constants您也可以获得常量,它们是numpy浮点。另一件事是使用numpy.exp而不是math.exp.I不知何故有一种感觉,400米不是OP想要通过的值-对添加单元确实解决了我的问题。谢谢你的快速回复。我有一种感觉,400米不是OP想要通过的数值-对添加单元确实解决了我的问题。谢谢你的快速回复。