2013-12-08 40 views
0

我試圖繪製這樣的數據:如何繪製這些數據?

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也似乎不起作用。

+0

我想,也許你有你的代碼中的括號錯字,因爲你有'N * np.pi/2 + N * np.pi/2'這相當於'N * np.pi'。你想要'n * np.pi/2 +(n * np.pi/2)** 2'嗎? – askewchan

+0

我意識到我用括號犯了一個錯誤,但那不是我想要的。它現在全部修好了,它可以工作。 – Petar

回答

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]) 
+0

哦,是的,傻了。好的,那是有效的。任何想法爲什麼我所有的E值輸出0? – Petar

+2

是,((h ** 2)/(2 * m))是0,因爲它是整數操作。試着用h = 1.0和m = 1.0 – GHL

+0

太好了,謝謝! – Petar

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