Many physical, chemical, and biological processes in nature are described by a set of coupled first-order autonomous differential equations, or autonomous flows. A widely used technique in the study of these systems is the Poincaré surface of section (also referred as Poincaré section or Poincaré map) technique. On a Poincaré section, the dynamics can be described by a discrete map whose phase-space dimension is one less ($n-1$) than that of the original continuous flow. This sectioning technique provides a natural link between continuous flows and discrete maps. In some cases these maps facilitate analysis of many fundamental dynamical properties of the underlying flow. A carefully selected Poincaré section also provides visual cues on the nature of underlying attractor. These advantages have made the Poincaré surface of section technique one of the most popular analysis tools in nonlinear dynamics and chaos.
%matplotlib inline
import utils
utils.plot_poincare_surface()
A surface of section is generated by looking at successive intersections of a trajectory, or a set of trajectories with a plane in the phase space. Typically, the plane is spanned by a coordinate axis and the canonically conjugate momentum axis. We will see that surfaces of section made in this way have nice properties. The choice of Poincaré surface is a bit of black art and a matter of convenience, but care should be taken so that the resulting Poincaré map will help us understand the intrinsic properties of the underlying flow.
For example, in Lorenz equations, for most initial conditions the trajectory appears to look around on two surfaces that resemble famous butterfly wings, flowing one wing to another in an irregular manner. More interestingly, the trajectories are aperiodic, i.e. under successive magnification trajectories remain separate and exhibit self-similar striations seen in many chaotic flows and maps. This detailed structure is best revealed by Poincaré section.
We start with randomly selected $N=30$ points and integrate Lorenz equations for $t_{max} = 400$.
%matplotlib inline
import matplotlib.pyplot as plt
N=30
t, x_t = utils.solve_lorenz(10.0, 8.0/3, 28.0, N, 400)
We use again the bmh style to plot. Each color in the plot represents a different trajectory with randomly selected initial conditions. We add sub-plot region in the lower left corner of the figure and zoom in to a small section of the plot.
plt.style.use('bmh')
fig, ax = plt.subplots(figsize=[10, 10])
xc = []
zc = []
# zoom-in lower-left corner of inset axes, and its width and height.
axins = ax.inset_axes([0.06, 0.07, 0.3, 0.3])
# sub-region of the original image
x1, x2, y1, y2 = -3.0, -2.5, 24.8, 25.8
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
axins.set_xticklabels('')
axins.set_yticklabels('')
axins.set_facecolor('white')
ax.indicate_inset_zoom(axins)
for i in range(N):
x, y, z = x_t[i,:,:].T
xi, zi = utils.find_zero_crossings(x,y,z)
ax.plot(xi, zi, '.')
axins.plot(xi, zi, '.')
plt.xlabel('$x$')
plt.ylabel('$z$')
plt.title('Poincaré Section at $y=0$')
plt.show()
The figure above is a Poincaré section of the Lorenz attractor constructed by plotting $x-z$ plane everytime a trajectory passes through the butterfly wings at $y=0$. The figure shows a symmetry axis located at $x=0$. The points do not appear to form a single strand around the symmetry axis, but successive magnifications reveal a fine scale structure.
Chaotic trajectories can be visually distinguished from others by inspecting Poincaré sections. For instance, periodic behavior show itself as fixed points in Poincare section whereas a quasi periodic behavior exhibits a closed curve or points. However, the Poincaré section in the figure above is categorically different from periodic or quasi-periodic flows. The distinct set of points above indicate that the time evolution of the trajectories are chaotic with extreme sensitivity to initial conditions. Furthermore, cross section of the Lorenz attractor, as well as the Lorenz attractor itself, show a fractal structure and have a non-integer fractal dimension.
In the next section , we will look at how we can compute fractal dimension .