The Lorenz Differential Equations

Before we start, we import some preliminary libraries. We will also import (below) the accompanying lorenz.py file, which contains the actual solver and plotting routine.


In [ ]:
%matplotlib inline
from ipywidgets import interactive, fixed

We explore the Lorenz system of differential equations:

$$ \begin{aligned} \dot{x} & = \sigma(y-x) \\ \dot{y} & = \rho x - y - xz \\ \dot{z} & = -\beta z + xy \end{aligned} $$

Let's change ($\sigma$, $\beta$, $\rho$) with ipywidgets and examine the trajectories.


In [ ]:
from lorenz import solve_lorenz
w=interactive(solve_lorenz,sigma=(0.0,50.0),rho=(0.0,50.0))
w

For the default set of parameters, we see the trajectories swirling around two points, called attractors.

The object returned by interactive is a Widget object and it has attributes that contain the current result and arguments:


In [ ]:
t, x_t = w.result

In [ ]:
w.kwargs

After interacting with the system, we can take the result and perform further computations. In this case, we compute the average positions in $x$, $y$ and $z$.


In [ ]:
xyz_avg = x_t.mean(axis=1)

In [ ]:
xyz_avg.shape

Creating histograms of the average positions (across different trajectories) show that, on average, the trajectories swirl about the attractors.


In [ ]:
from matplotlib import pyplot as plt

In [ ]:
plt.hist(xyz_avg[:,0])
plt.title('Average $x(t)$');

In [ ]:
plt.hist(xyz_avg[:,1])
plt.title('Average $y(t)$');