簡體   English   中英

如何繪制這些數據?

[英]How can I plot this data?

我正在嘗試繪制此數據:

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

問題是您定義列表的方式。

嘗試:

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

不是答案,只是建議,但我想寫出足夠多的代碼,這些代碼不適合注釋。

您可以定義一個函數,而不必寫出幾乎相同的四行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM