runge_kutta.py

View page source

Python runge_kutta Source Code

# BEGIN DEF
def runge_kutta(like_numpy, fun, yi, tf, ns) :
   assert type(ns) == int
   assert type(yi) == type( like_numpy.array(1.0) )
   # END DEF
   #
   # two, six
   two = like_numpy.array( 2.0 )
   six = like_numpy.array( 6.0 )
   #
   # h
   h = like_numpy.array( tf / float(ns) )
   #
   # i_step, yf
   yf = yi
   for i_step in range(ns) :
      #
      # k1
      k1 = fun(yf)
      #
      # k2
      y_tmp = yf + k1 * (h / two)
      k2    = fun(y_tmp)
      #
      # k3
      y_tmp = yf + k2 * (h / two)
      k3    = fun(y_tmp)
      #
      # k4
      y_tmp = yf + k3 * h
      k4    = fun(y_tmp)
      #
      # yf
      yf = yf + (k1 + two * k2 + two * k3 + k4) * (h / six)
   #
   # BEGIN RETURN
   return yf
   # END RETURN