Skip to content
Snippets Groups Projects

leapfrog and stormer_verlet

Closed jim92 requested to merge jima into main
+ 6
5
@@ -22,6 +22,7 @@ def verlet(F: Callable, q0: np.ndarray, p0: np.ndarray, m: np.ndarray, dt: float
return p, q
def leapfrog(F: Callable, q0: np.ndarray, p0: np.ndarray, m: np.ndarray, dt: float):
'''
# using leapfrog integration. https://en.wikipedia.org/wiki/Leapfrog_integration
@@ -36,13 +37,13 @@ def leapfrog(F: Callable, q0: np.ndarray, p0: np.ndarray, m: np.ndarray, dt: flo
q = q0
# 1. Update Momentum at Half Step:
p += dt / 2 * F(q)
p = p + dt / 2 * F(q)
# 2. Update Position:
q += p / m * dt
q = q + p / m * dt
# 3. Update Momentum at Full Step:
p += dt / 2 * F(q)
p = p + dt / 2 * F(q)
# print("-------------------")
# print(f'accelerations={accelerations}')
@@ -63,10 +64,10 @@ def stormer_verlet(F: Callable, q0: np.ndarray, p0: np.ndarray, m: np.ndarray, d
# 1. Update Position at Half Step:
acc = F(q) / m
q += p / m * dt + acc * (dt ** 2 * 0.5)
q = q + p / m * dt + acc * (dt ** 2 * 0.5)
# 2. Update Momentum:
p += acc * (dt * 0.5) * m + F(q) * (dt * 0.5)
p = p + acc * (dt * 0.5) * m + F(q) * (dt * 0.5)
return p, q
Loading