# RungeKutta4¶

This solver solves an explicit ordinary differential equation using a Runge-Kutta method of order 4.

We want to approximate the solution to the ordinary differential equation of the form,

$\dot{y} = f(t,y), \quad y(t_0) = y_0 .$

Using a Runge-Kutta method of order 4, the approximation is defined as follow,

$y_{n+1} = y_n + \frac{1}{6}(k_1+2k_2+2k_3+k_4)$

where,

\begin{align}\begin{aligned}k_1 = hf(t_n,y_n)\\k_2 = hf(t_n+\frac{1}{2}h,y_n+\frac{1}{2}k_1)\\k_3 = hf(t_n+\frac{1}{2}h,y_n+\frac{1}{2}k_2)\\k_4 = hf(t_n+h,y_n+k_3)\end{aligned}\end{align}

with $$h$$ being the step-size and $$y_n$$ the previous solution to the equation.

## Support¶

• State events (root funtions) : False
• Step events (completed step) : False
• Time events : True

## Usage¶

Import the solver together with the correct problem:

from assimulo.solvers import RungeKutta4
from assimulo.problem import Explicit_Problem


Define the problem, such as:

def rhs(t, y): #Note that y are a 1-D numpy array.
yd = -1.0
return N.array([yd]) #Note that the return must be numpy array, NOT a scalar.

y0 = [1.0]
t0 = 1.0


Create a problem instance:

mod = Explicit_Problem(rhs, y0, t0)


Note

For complex problems, it is recommended to check the available examples and the documentation in the problem class, Explicit_Problem. It is also recommended to define your problem as a subclass of Explicit_Problem.

Warning

When subclassing from a problem class, the function for calculating the right-hand-side (for ODEs) must be named rhs and in the case with a residual function (for DAEs) it must be named res.

Create a solver instance:

sim = RungeKutta4(mod)


Modify (optionally) the solver parameters.

Parameters:

Simulate the problem:

Information: