空白图和数学域错误

时间:2014-03-13 11:54:36

标签: graph python-3.2

我的以下代码未生成图表。当我运行该程序时,我收到以下错误:

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()

1 个答案:

答案 0 :(得分:0)

for循环中,您可以为E_y1y1分配单个值,在之后分配一个,每个新值都会覆盖前一个值。你想要的是它们代表范围或列表。语法如下所示:

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是一个列表。

关于那个域错误:你正在采用负数的平方根,所以问题就不足为奇了。