Mathematical Graphics#

import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as spi
mu = 1.

def f(u,t):
    dudt = np.array([0.,0.,0.,0.])
    D1 = ((u[0] + 1)**2 + u[2]**2)**(3/2)
    D2 = ((u[0] - 1)**2 + u[2]**2)**(3/2)
    dudt[0] = u[1]
    dudt[1] = -(u[0] + 1)/D1 - mu*(u[0] - 1)/D2
    dudt[2] = u[3]
    dudt[3] = -u[2]/D1 - mu*u[2]/D2
    return dudt

u0 = [0.,1.5,1.,0.]
t = np.linspace(0,200,2000)
u = spi.odeint(f,u0,t)
plt.plot(u[:,0],u[:,2],-1,0,'r*',1,0,'r*'), plt.axis('off')
plt.savefig('euler3body.png',dpi=300)
plt.show()
../_images/cd4fd36463e6d1ae342f9747225d2c919d4b39359a374b31de5daa230fea045a.png
f = lambda u,t: np.array([1 - u[1]**2,u[0] - u[1]])
t = np.linspace(0,-1,100)
for _ in range(10):
    u0 = [-3,2*np.random.rand() - 3]
    u = spi.odeint(f,u0,t)
    plt.plot(u[:,0],u[:,1],c='b',alpha=0.2)
plt.axis([-3,3,-3,3]), plt.grid(True)
#plt.savefig('phaseportrait.png',dpi=300)
plt.show()
../_images/c55afb1c4af10b56b8f42aaf9b5547655e5c89f557f89f9b46d4ba68e9330cc9.png