Skip to content
Snippets Groups Projects

Optimize the method of leapfrog

Closed jim92 requested to merge integrators into main
6 unresolved threads
Files
4
+ 34
0
import numpy as np
def leapfrog(initial_states, num_steps, dt, gravitational_constant):
positions, velocities = initial_states
traj = [positions]
for _ in range(num_steps):
# Leapfrog integration
accelerations = -gravitational_constant * positions / np.linalg.norm(positions, axis=1)[:, None]**3
velocities += accelerations * dt
positions += velocities * dt
traj.append(positions.copy())
return np.array(traj)
def stormer_verlet(initial_states, num_steps, dt, gravitational_constant):
positions, velocities = initial_states
traj = [positions]
for _ in range(num_steps):
# Stormer-Verlet integration
half_velocities = velocities + 0.5 * dt * (-gravitational_constant * positions /
np.linalg.norm(positions, axis=1)[:, None]**3)
positions += dt * half_velocities
velocities = half_velocities + 0.5 * dt * (-gravitational_constant * positions /
np.linalg.norm(positions, axis=1)[:, None]**3)
traj.append(positions.copy())
return np.array(traj)
Loading