The
RK4
function uses the fourth-order
Runge-Kutta method to advance a solution to a system of
ordinary differential equations one time-step *
H*
, given values for the variables *
Y*
and their derivatives *
Dydx*
known at *
X*
.

RK4 is based on the routine ```
rk4
```

described in section 16.1 of *
Numerical Recipes in C: The Art of Scientific Computing*
(Second Edition), published by Cambridge University Press, and is used by permission.

A scalar string specifying the name of a user-supplied IDL function that calculates the values of the derivatives *
Dydx*
at *
X*
. This function must accept two arguments: A scalar floating value *
X*
, and one *
n*
-element vector *
Y*
. It must return an *
n*
-element vector result.

For example, suppose the values of the derivatives are defined by the following relations:

*
dy*
_{
0}
/ *
dx*
= -0.5*
y*
_{
0, }
*
dy*
_{
1}
/ *
dx*
= 4.0 - 0.3*
y*
_{
1}
- 0.1*
y*
_{
0}

We can write a function DIFFERENTIAL to express these relationships in the IDL language:

To integrate the example system of differential equations for one time step, H:

H = 0.5 *;
Define the step size.*

X = 0.0 *;
Define an initial X value.*

Y = [4.0, 6.0] *;
Define initial Y values.*

dydx = DIFFERENTIAL(X,Y) *;
Calculate the initial derivative values.*

result = RK4(Y, dydx, X, H, 'differential')

*;
Integrate over the interval (0, 0.5).*

PRINT, result *;
Print the result.*

This is the exact solution vector to five-decimal precision.