def RK2(fct, a, b, y0, h):
    t = np.arange(a, b, h)
    y = np.zeros((len(y0), len(t)))
    y[:, 0] = y0

    for i in range(1, len(t)):
        k1 = fct(t[i-1], y[:, i-1])
        k2 = fct(t[i-1] + 0.5*h, y[:, i-1] + 0.5*h*k1)
        y[:, i] = y[:, i-1] + h*(0*k1 + 1*k2)

    return t, y


a, b = 0, 30
y0 = [1]
h = 0.1

t_e, y_e = euler(f1, a, b, y0, h)
plt.plot(t_e, y_e[0], label="euler")

t_2, y_2 = RK2(f1, a, b, y0, h)
plt.plot(t_2, y_e[0], label="euler")