【问题标题】:Blank graph and math Domain Error空白图和数学域错误
【发布时间】:2014-03-13 11:54:35
【问题描述】:

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

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

【问题讨论】:

    标签: graph python-3.2


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。负面错误的根源已解决,没有意识到我在那里。您提供的语法效果很好,再次感谢。
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多