# Charged particle trajectory under electric and magnetic fields
from pylab import *
from scipy import integrate
m = 25.0 # Mass and
q = 5.0 # Charge of the particle
Ex = 0.0 # Electric Field vector
Ey = 0.0
Ez = 0.1
Bx = 0.0 # Magnetic field vector
By = 0.0
Bz = 5.0
def solver(X, t0): # X contains x,y,z and dx,dy,dz , 6 elements
vx = X[3]
vy = X[4]
vz = X[5]
ax = q * (Ex + (vy * Bz) - (vz * By) ) /m # Lorentz force / mass
ay = q * (Ey - (vx * Bz) + (vz * Bx) ) /m
az = q * (Ez + (vx * By) - (vy * Bx) ) /m
return [vx, vy, vz, ax, ay, az ]
pv0 = [0,0,0, 0,1,0] # position & velocity at t = 0
t = arange(0, 50, 0.01) # duration and steps
pv = integrate.odeint(solver, pv0, t) # integrate
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(figure())
ax.plot(pv[:,0], pv[:,1], pv[:,2]) # 3d plot of x, y and z
ax.set_zlabel('Z axis')
show()