我想用Python绘制不同温度和频率的曲线图,我定义了一个函数,但是当我想绘制它时,它显示了一个错误。在
def planck(v,T):
h=6.62606957*(10**-34.0)
c=3*(10**8.0)
k=1.3806488*(10**-23.0)
x=(h*8*pi/c**3.0)
y=v**3
exponente = (h*v/k*T)
ex = math.exp(exponente)-1
PLANCK=(x*y)*(ex**-1)
return PLANCK
x0, xf, dx = 800,2*(10**8),1000
X = arange(x0, xf, dx)
print X
P1=planck(X, 3000)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-034ad82af010> in <module>()
----> 1 P1=planck(X, 3000)
<ipython-input-11-e52b9512e92c> in planck(v, T)
7 y=v**3
8 exponente = (h*v/k*T)
----> 9 ex = math.exp(exponente)-1
10
11 PLANCK=(x*y)*(ex**-1)
TypeError: only length-1 arrays can be converted to Python scalars
然后,如果我只使用exp
而不是math.exp
,那么图的结果是一个常量。在
@Sven Marnach的编程位正确,您需要使用Numpy
exp
。在至于为什么要得到常数,你已经用国际单位制写了你的函数。因此,您的输入必须使用国际单位制。在
如果你的波长是纳米的话,你想用
X
除以1e9
。就目前情况来看,你通过的波长约为800米。在除了使用}。对于
numpy.exp
而不是math.exp
,还需要将X
的数据类型指定为float
,而不是{int32
,可表示的最大数为并且
^{pr2}$y=v**3
超过此值:因此,您的值看起来像常量的原因是因为算术溢出。在
所以改变
到
计算一次常量值,然后硬编码,如果你需要一些速度。。。在
相关问题 更多 >
编程相关推荐