[Numpy-discussion] Forth-Order Runge-Kutta

Chad Netzer cnetzer at mail.arc.nasa.gov
Thu Dec 13 13:12:25 CST 2001


> Date: Thu, 13 Dec 2001 12:39:32 +0100
> From: Nils Wagner <nwagner at mecha.uni-stuttgart.de>
> Subject: [Numpy-discussion] Forth-Order Runge-Kutta
>
> I am looking for an implementation of the fourth-order Runge-Kutta
> method in Numpy.

Here is one I wrote (based on a similar I had seen in lorentz.py in the 
PyOpenGL demos, I believe), that I used for chaotic dynamics 
visualizations.

# A simple, non-stepsize adaptive fourth order Runge-Kutta integration
# estimator method.
def fourth_order_runge_kutta(self, xyz, dt):
    derivative = self.differentiator
    hdt = 0.5 * dt
        
    xyz = asarray(xyz) # Force tuple or list to an array

    k1 = array(derivative(xyz))
    k2 = array(derivative(xyz + k1 * hdt))
    k3 = array(derivative(xyz + k2 * hdt))
    k4 = array(derivative(xyz + k3 * dt))

    new_xyz = xyz + (k1 + k4) * (dt / 6.0) + (k2 + k3) * (dt / 3.0)
    return new_xyz

where self.differentiator is a function that takes an x,y,z coordinate 
tuple, and returns the deriviative as an x,y,z coordinate tuple.  I 
wrote this when I was much more naive about Runge-Kutta and Python 
Numeric, so don't use it without some looking over.  It is at least a 
good starting point.

-- 

Chad Netzer
cnetzer at mail.arc.nasa.gov




More information about the Numpy-discussion mailing list