我的以下代码未生成图表。当我运行该程序时,我收到以下错误:
y3 =( - 1)* sqrt(E_y3 / v-E_y3)
ValueError:数学域错误
为了测试剩下的代码,我把这条线拿出来,认为它可以减去那条线。但是,当我这样做时,我会收到一张空白图表。我的目标是用0到20的值绘制y1方程,用0到20的偶数值的y2方程和用0到20的奇数值的y3方程。
from pylab import plot,show
from numpy import tan
from math import sqrt
w = 1
v = 20
m = 9.1094e-31
h = 6.62606957e-34
for E_y1 in range (21):
y1 = tan(sqrt(w**2*m*E_y1/2*h**2))
for E_y2 in range (2,22,2):
y2 = sqrt(v-E_y2/E_y2)
for E_y3 in range (1,21,2):
y3 = (-1)*sqrt(E_y3/v-E_y3)
x1 = E_y1
x2 = E_y2
x3 = E_y3
plot(x1,y1)
plot(x2,y2)
plot(x3,y3)
show()
答案 0 :(得分:0)
在for
循环中,您可以为E_y1
和y1
分配单个值,在之后分配一个,每个新值都会覆盖前一个值。你想要的是它们代表范围或列表。语法如下所示:
E_y1 = range(21)
y1 = [tan(sqrt(w**2*m*x/2*h**2)) for x in E_y1]
x1 = E_y1
plot(x1,y1)
show()
现在Ey1
是一系列数字,y1
是一个列表。
关于那个域错误:你正在采用负数的平方根,所以问题就不足为奇了。