我该如何绘制这些数据?

时间:2013-12-08 17:13:16

标签: python numpy matplotlib plot

我正在尝试绘制这些数据:

h = 1
m = 1

E1 = (((h**2)/(2*m)) * ((((1*np.pi)/2)+((1*np.pi)/2))**2))
E2 = (((h**2)/(2*m)) * ((((2*np.pi)/2)+((2*np.pi)/2))**2))
E3 = (((h**2)/(2*m)) * ((((3*np.pi)/2)+((3*np.pi)/2))**2))
E4 = (((h**2)/(2*m)) * ((((4*np.pi)/2)+((4*np.pi)/2))**2))

k1 = ((((1*np.pi)/2)+((1*np.pi)/2))**2)
k2 = ((((2*np.pi)/2)+((2*np.pi)/2))**2)
k3 = ((((3*np.pi)/2)+((3*np.pi)/2))**2)
k4 = ((((4*np.pi)/2)+((4*np.pi)/2))**2)


E = list[E1, E2, E3, E4]
k = list[k1, k2, k3, k4]

plt.scatter(k,E)
plt.show()

list功能似乎不适用于此。我不认为它可以获得预定义的值。使用np.array似乎也不起作用。

2 个答案:

答案 0 :(得分:4)

您定义列表的方式是问题。

尝试:

E = [E1, E2, E3, E4]
k = [k1, k2, k3, k4]

或者如果你想使用numpy:

E = np.array([E1, E2, E3, E4])
k = np.array([k1, k2, k3, k4])

答案 1 :(得分:0)

不是答案,只是一个建议,但我想写出不适合评论的足够代码。

您可以定义一个函数,而不是写出四条几乎相同的行:

def E(n, h=1.0, m=1.0):
    return (((h**2)/(2*m)) * ((((n*np.pi)/2)+((n*np.pi)/2))**2))

请注意,它接受hm的值作为参数,但如果没有提供,则它将使用1.0作为默认值。这甚至可以进一步简化,只需稍微清理一下符号(例如,你有something/2 + something/2,相当于something,请参阅我对你问题的评论)

def E(n, h=1.0, m=1.0):
    return (.5*h**2/m) * (n*np.pi)**2

同样适用于k

def k(n):
    return (n*np.pi)**2

关于这一点最好的事情是,您现在可以立即执行此操作而无需手动构建该列表:

>>> ns = np.arange(1,5)  # this is np.array([1,2,3,4])
>>> E(ns)
array([  4.9348022 ,  19.7392088 ,  44.4132198 ,  78.95683521])
>>> k(ns)
array([   9.8696044 ,   39.4784176 ,   88.82643961,  157.91367042])

显然,这个精确的代码对你来说不适用于括号错字,但我希望它有助于使用numpy!这是整个代码:

import numpy as np
import matplotlib.pyplot as plt

def E(n, h=1.0, m=1.0):
    return (.5*h**2/m) * (n*np.pi)**2

def k(n):
    return (n*np.pi)**2

ns = np.arange(1, 5)
plt.scatter(k(ns), E(ns))
plt.show()