Graph 空白图与数学域错误

Graph 空白图与数学域错误,graph,python-3.2,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

我下面的代码没有生成图形。运行程序时,我收到以下错误:

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

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


关于这个域错误:你是取一个负数的平方根,所以这个问题并不奇怪。

谢谢。一个负面错误的根源已经解决了,我没有意识到我在那里。您提供的语法非常有效,再次感谢。