import numpy as np

def f(t,y) :
	z = 1/10*y
	return z

def exact(t) :
	z = np.exp(t/10)
	return z

def myeuler(a,b,y0,M) :
	h = (b-a)/M
	t = a
	yold = y0
	err = 0
	for n in range(M) :
		ynew = yold + h*f(t,yold)
		t = t + h
		yold = ynew
		error = abs(ynew - exact(t))
		if error > err :
			err = error
	return ynew, t, err
a = 0.0
b = 1.0
t0 = a
y0 = exact(t0)
M = np.array([8, 20, 40, 64, 128, 256, 512])
m = len(M)
error = np.zeros([m])
p = np.zeros([m])
for i in range(m) :
	(y,t,err) = myeuler(a,b,y0,M[i])
	error[i] = err
	if M[i] == 20 or M[i] == 40 :
		print(error[i])
	if i > 0 :
		p[i] = np.log(error[i-1]/error[i])/np.log(M[i]/M[i-1]);
	
print(error)
print(p)


