from solvers import * from pylab import * # Our system of differential equations f = ( lambda t, y: y[1], # y1' = y2 lambda t, y: -1.0 * y[0] # y2' = -y1 ) # Initial conditions f0 = (1.0, 0.0) # Step size steps = [0.45, 0.4, 0.35, 0.3, 0.25, 0.2, 0.1, 0.05, 0.025, 0.0125] # Interval interval = (0.0, 100.0 * pi) errs_euler = [] errs_rk4 = [] global_errs_euler_value = [] global_errs_rk4_value = [] global_errs_euler_slope = [] global_errs_rk4_slope = [] for h in steps: print h t1, y1, err_local_euler = solver(euler_step, f, f0, interval, h) t2, y2, err_local_rk4 = solver(RK4_step, f, f0, interval, h) errs_euler.append(mean(err_local_euler)) errs_rk4.append(mean(err_local_rk4)) global_errs_euler_value.append( abs(cos(t1[-1]) - y1[0][-1]) ) global_errs_rk4_value.append( abs(cos(t2[-1]) - y2[0][-1]) ) global_errs_euler_slope.append( abs(-sin(t1[-1]) - y1[1][-1]) ) global_errs_rk4_slope.append( abs(-sin(t2[-1]) - y2[1][-1]) ) """ subplot(121) plot(steps, errs_euler) xlabel("step size") ylabel("error") title("Average local error, Euler method") subplot(122) plot(steps, errs_rk4) xlabel("step size") ylabel("error") title("Average local error, RK4 method") """ """ subplot(121) plot(steps, global_errs_euler_value) xlabel("step size") ylabel("error") title("Global value error, Euler method") subplot(122) plot(steps, global_errs_rk4_value) xlabel("step size") ylabel("error") title("Global value error, RK4 method") """ subplot(121) plot(steps, global_errs_euler_slope) xlabel("step size") ylabel("error") title("Global slope error, Euler method") subplot(122) plot(steps, global_errs_rk4_slope) xlabel("step size") ylabel("error") title("Global slope error, RK4 method") show()