Пустой график и ошибка математического домена

Мой следующий код не создает график. Когда я запускаю программу, я получаю следующую ошибку:

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

person user3290682    schedule 13.03.2014    source источник


Ответы (1)


В циклах 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 — это список.

И об этой ошибке домена: вы берете квадратный корень из отрицательного числа, так что проблема неудивительна.

person pentadecagon    schedule 13.03.2014
comment
Спасибо. Корень отрицательной ошибки был устранен, я не знал, что у меня это было. Синтаксис, который вы дали, работал очень хорошо, еще раз спасибо. - person user3290682; 13.03.2014