2013-05-14 2 views
3

Я хотел бы построить функцию e и nu, где e - эксцентриситет, а nu - истинная аномалия. Я только смотрю на эллиптические орбиты, поэтому 0<e<1. Однако, когда я пытаюсь построить их друг против друга, у меня ошибка формы.построение нескольких графиков, но с диапазонами смещения python

ValueError: operands could not be broadcast together with shapes (10) (5000) 

Я знаю, это потому, что я хочу только 10 пробелов для эксцентриситета, но есть ли способ обойти это?

import numpy as np 

e = np.arange(0, 1, 0.1) 

vvals = [[] for i in range(len(e))] 
nu = np.linspace(0, 2 * np.pi, 5000) 


for i in e: 
    for j in nu: 
     i = float(i) 
     j = float(j) 
     v = np.sqrt(e ** 2 + 2 * e * np.cos(nu) + 1) 
     i = int(i) 
     vvals[i].append(v) 


for i in e: 
    pylab.plot(nu, vvals[i]) 


pylab.show() 
+0

Ваши циклы 'for' действительно ужасны, до такой степени, что я не совсем уверен, что вы пытаетесь сделать здесь. – tacaswell

+0

во всяком случае ошибка исходит из строки 'v = np.sqrt (e ** 2 + 2 * e * np.cos (nu) + 1)' и не имеет ничего общего с 'matplotlib' и' numpy' в правильном ведении. – tacaswell

+0

@tcaswell Я хочу сделать сюжет для e = .1, .2, ... 1 и наложить их друг на друга. – dustin

ответ

2

Я думаю, что это то, что вы пытаетесь сделать:

import numpy as np 

e = np.arange(0, 1, 0.1) 
vvals = [] 
nu = np.linspace(0, 2 * np.pi, 5000) 
for i in e: 
    v = np.sqrt(i ** 2 + 2 * i * np.cos(nu) + 1) 
    vvals.append(v) 

for v in vvals: 
    pylab.plot(nu, v) 

pylab.show() 

numpy вещания является вашим другом;)

Если вы хотите получить действительно фантазии:

import numpy as np 

e = np.arange(0, 1, 0.1).reshape(-1, 1) 
nu = np.linspace(0, 2 * np.pi, 5000).reshape(1, -1) 
vvals = np.sqrt((e ** 2) * np.ones(nu.shape) + 2 * e * np.cos(nu) + 1) 

for v, _e in zip(vvals, e.ravel()): 
    pylab.plot(nu.ravel(), v, label=str(_e)) 

pylab.legend()  

pylab.show() 
+0

сюжет заходит за миллисекунду, а затем сразу же закрывается. Как я могу остановить это? – dustin

+0

как вы управляете этим? – tacaswell

+0

Я использую emacs через строку shebang, и у меня есть в моем bashrc псевдоним для ipython --pylab = qt – dustin

Смежные вопросы