import numpy as np from matplotlib import pyplot as plt def ForwardEuler(h,T): N = int(T/h) x,y = np.zeros(N),np.zeros(N) x[0] = 1.0 y[0] = 0.0 for n in range(1,N): x[n] = x[n-1] - h*y[n-1] y[n] = y[n-1] + h*x[n-1] return x,y h = 0.02 T = 4.0*np.pi x,y = ForwardEuler(h,T) plt.plot(x,y) plt.axes().set_aspect('equal') def BackwardEuler(h,T): N = int(T/h) x,y = np.zeros(N),np.zeros(N) x[0] = 1.0 y[0] = 0.0 for n in range(1,N): x[n] = (x[n-1] - h*y[n-1])/(1.0 + h**2) y[n] = y[n-1] + h*x[n] return x,y h = 0.02 T = 4.0*np.pi x,y = BackwardEuler(h,T) plt.plot(x,y) plt.axes().set_aspect('equal') def Trapezoid(h,T): N = int(T/h) x,y = np.zeros(N),np.zeros(N) x[0] = 1.0 y[0] = 0.0 for n in range(1,N): x[n] = ((1.0-0.25*h**2)*x[n-1] - h*y[n-1])/(1.0 + 0.25*h**2) y[n] = y[n-1] + 0.5*h*(x[n-1] + x[n]) return x,y h = 0.02 T = 4.0*np.pi x,y = Trapezoid(h,T) plt.plot(x,y) plt.axes().set_aspect('equal')