from pylab import *
h = 0.1
x0 = 1.0
y0 = 1.0
xn = 15
def fn(x, y):
return 0.2 * x * y;
def fn_exact(x):
return exp(0.1*(x*x - 1))
yrk = y0
yeu = y0
xr=arange(x0,xn,h)
yr = []
ye = []
yx = []
for x in xr:
k1 = fn(x, yrk)
k2 = fn(x + 0.5 * h, yrk + 0.5 * h * k1)
k3 = fn(x + 0.5 * h, yrk + 0.5 * h * k2)
k4 = fn(x + h, yrk + h * k3)
yr.append(yrk)
yrk = yrk + (h/6) * (k1 + 2 * k2 + 2 * k3 + k4)
ye.append(yeu)
yeu = yeu + h * fn(x, yeu)
yx.append(fn_exact(x))
figure()
plot(xr,yr, 'b', label="rk4")
plot(xr,ye, 'r', label="euler")
plot(xr,yx, 'g', label="exact")
legend()
savefig("rk-vs-euler.png")