2013-12-08 2 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

Я думаю, что, может быть, у вас есть круглые скобки опечатка в коде, потому что у вас есть 'п * np.pi/2 + п * np.pi/2', что эквивалентно 'п * np.pi'. Вы хотите 'n * np.pi/2 + (n * np.pi/2) ** 2'? – askewchan

+0

Я понял, что совершил ошибку в своих круглых скобках, но этого я не хотел. Сейчас все исправлено, и это работает. – Petar

ответ

4

Способ определения ваших списков - проблема.

Try:

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

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

Обратите внимание, что он принимает значения h и m в качестве аргументов, но если ничего не предусмотрено, он будет использовать 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() 
Смежные вопросы