Я пытаюсь построить звездную орбиту с заданным потенциалом. Сначала я инициализирую положение и скорость и получаю ускорение из положения в соответствии с заданным потенциалом.
Затем я увеличиваю время с заданным временным шагом и вычисляю орбиту. Проблема возникает, когда я пытаюсь сохранить рассчитанные позиции в пустом списке. Вот мой код:
## Initial position, velocity, and acceleration
r = np.array([20., 20., 0.])
v = np.array([0., 1., 0.])
g = acc(*r) #calculates acceleration from a function
## empty list to store position data
posdata = []
## Orbit integration
dt = 0.1
for t in np.arange(0, 1000, dt):
v += 0.5 * g * dt
r += v * dt
if t%100 == 0:
print(r) #check if r actually changes
g = acc(*r)
v += 0.5 * g * dt
posdata.append(r)
Вот что я ожидаю получить:
posdata
>>> [array([19.999875, 20.099875, 0.]), array([19.99950125, 20.19950001, 0.]), array([19.99887999, 20.29887502, 0.]), ...]
Но я на самом деле понимаю:
>>> [array([-17.57080611, -34.03696644, 0.]), array([-17.57080611, -34.03696644, 0.]), array([-17.57080611, -34.03696644, 0.])]
Все элементы идентичны последнему рассчитанному элементу. Как видите, я проверил, действительно ли r
меняется, и это так. Я думаю, что это связано с тем, что r
является массивом, но я не знаю, как это исправить.