def runge_kutta(ode, state, dt=0.01):
    """
    The Classic Runge Kutta Method
    https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods
    
    :param ode: ODE object;
    :param state: input function;
    :param dt: interval (h);
    :return: integration result.
    """
    k1 = dt * ode.f(state)
    k2 = dt * ode.f(state + 0.5 * k1)
    k3 = dt * ode.f(state + 0.5 * k2)
    k4 = dt * ode.f(state + k3)
    
    return state + (k1 + 2 * k2 + 2 * k3 + k4) / 6