2014-03-13 42 views
0

我的下面的代碼沒有生成圖形。當我運行該程序,收到以下錯誤:空白圖形和數學域錯誤

Y3 =(-1)* SQRT(E_y3/V-E_y3)

ValueError異常:數學域誤差

要測試代碼的其餘部分我把這條線拿出來,認爲它會起作用。但是,當我這樣做時,我會收到一張空白圖。我的目標是與值Y1方程繪製從0到20,甚至值Y2方程從0到20,並與奇數值的Y3方程從0到20

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

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

而關於該域錯誤:你正在取一個負數的平方根,所以這個問題並不奇怪。

+0

謝謝。一個負面的錯誤的根源已經解決,沒有意識到我在那裏。你給的語法非常好,再次感謝。 – user3290682