Dynamical Billiards

A Demonstration of Chaos Theory

By the Billiard Ballers

Chaotic Systems History

  • Began in 1880s, with Henri Poincare study of 3-body systems (found there could be non-periodic motion that does not tend towards a fixed point)
  • Edward Lorenz was an early pioneer, studying weather systems
  • Began to increase in popularity when electronic computers were invented
  • Gained interest in field because computer simulations’ roundoff errors caused large variation in simulation results

For Phoenix.

Overview of Chaotic Systems: A Descent into Chaos

In order for a Dynamical system to be classified as chaotic it must:

  1. Be sensitive to initial conditions
  2. Be topologically mixing
  3. Have dense periodic orbits

Stephen for next few slides

  • Topologically transitive?

Linear -> non-linear -> chaotic

Sensitivity to Initial Conditions

Non-chaotic System

  • A driven damped linear oscillator approaches a unique attractor regardless of the initial conditions.
  • The difference in solutions Z(x,t), with differing initial conditions, can be expressed as:$$\mid \Delta Z \mid=e^{ƛ t} \mid \Delta Z_0 \mid$$
  • As $t \rightarrow \infty$ the transient solutions die out, so ƛ must be negative
  • Any errors in the initial conditions will decay

Sensitivity to Initial Conditions

  • Nonlinear dynamic systems can have many attractors, each of which depends on the initial conditions.
  • The difference in solutions of nonlinear systems with differing initial conditions, can also be expressed as:$$\mid \Delta Z \mid=e^{ƛ t} \mid \Delta Z_0 \mid$$
  • As $t \rightarrow \infty$ the, ƛ no longer must be negative
  • Chaotic systems are all nonlinear

Sensitivity to Initial Conditions

$$\mid \Delta Z \mid=e^{ƛ t} \mid \Delta Z_0 \mid$$
  • ƛ is called the Lyapunov exponent
  • ƛ is positive in a chaotic system
  • So solutions with different initial conditions will diverge exponentially as time passes
  • So any errors in the initial conditions will grow exponentially with time; this is what is meant by sensitivity to initial conditions

Topologically Mixing

Definition: A dynamical system $f$ on a phase space $X$ is said to be topologically mixing if for every two open sets $A$ and $B$ in $X$, there is $N$ sufficiently large such that $f^n(A)\cap B \neq \varnothing$ for all $n \geq N$.

  • By iterating $f$ over any subset of the phase space we can make two different subsets eventually overlap
  • This means that any two different trajectories will become arbitrarily close regardless of initial conditions

Dense Periodic Orbits

  • Any orbits appearing to be periodic are actually arbitrarily close to, but not repeating
  • The union of the sets of all these orbits forms the phase space

Billiards

Physics of the Simulation

  • Can be represented as by using a infinite potential well
  • Infinite on the boundary and zero inside
  • No loss of speed due to friction
  • Specular reflection

  • Can use either Hamiltonian or Lagrangian

Physics of the Simulation: Example of a Square

  • We can approximate the potential of square well as $U(x,y)=x^n+y^n$ ,$\lim_{n\to\infty}$ with $T=\frac{1}{2}m(\dot{x}^2+\dot{y}^2)$

Lagrangian

  • This makes the Lagrangian: $\mathcal{L}=\frac{1}{2}m(\dot{x}^2+\dot{y}^2)-(x^n+y^n)$ which gives two independant equations: $$\ddot{x}=\frac{1}{m}nx^{n-1}$$ $$\ddot{y}=\frac{1}{m}ny^{n-1}$$

Hamiltonian

  • From Lagrangian can define Hamiltonian $\mathcal{H}=\frac{1}{2m}(P_x^2+P_y^2)+x^n+y^n$
  • This gives four coupled equations: $$\dot{x}=\frac{P_x}{m}, \dot{y}=\frac{P_x}{m}$$ $$\dot{P_x}=nx^{n-1}, \dot{P_y}=ny^{n-1}$$

  • Both of these methods can be solved either analytically or numerically for some large $n$

Physics of the Simulation: Example of a Square

  • Using Matlab these solution spaces were found with the Lagrangian formalism $n$=12

Physics of the Simulation: Example of a Square

  • Using Matlab these solution spaces were found with the Lagrangian formalism $n$=24

Simulation Solutions

  • Instead of solving the equations of motion in our simulation, graphing methods were used
  • Plot a straight line and solve for the intersection with the boundary
  • Determine the velocity vectors in the tangent and normal basis
  • Flip the sign of the normal velocity component
  • Repeat

Simulation Solutions: Example of Square

  • A square of a side length $2a$ centered at the origin will be our potential
  • If the particle starts at the origin with velocity $V_x$ and $V_y$, the motion is represented as: $$y=\frac{V_y}{V_x}x$$
  • If $V_y>V_x$ then the next position will be: $$x_1=\frac{V_x}{V_y}a$$
  • This can be done iteratively to find the graphical solutions: $$x_6=-V_xt+a$$
$$y_6=V_y t-a\frac{V_x-2V_y}{V_x}-3a-a\frac{V_y}{V_x}$$

Ryan, Henry, Phoenix, Ryan?

Rectangle Stadium

Periodic Orbits

Rational Velocities


In [2]:
import RectTable as rect
from IPython.display import HTML

videoLength=1500

simargs={}
simargs['balls']={0:[0.5,0.5,1.5,0.5]}
simargs['playbackSpeed']=60
simargs['trace']=True
simargs['width']=2
simargs['height']=2
simargs['nBalls']=1
simargs['friction']=False

simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[2]:

Rectangle Stadium

Dense Periodic Orbits

Irrational Velocities


In [3]:
simargs['balls'][0]=[0.5,0.5,1.5*2**(1/2),0.5]
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[3]:

Rectangle Stadium

Sensitivity to Initial Conditions


In [4]:
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.51,0.7]}
simargs['nBalls']=2
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[4]:

Rectangle Stadium

Topological Mixing


In [5]:
import random
nballs=75
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
    
    simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
    simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
    simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
    
simulation=rect.RectTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[5]:

Circle Stadium

Non-periodic Orbits


In [6]:
import circle

simargs['balls']={0:[0.5,0.5,1.5,0.5]}
simargs['nBalls']=1
simargs['trace']=True

simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[6]:

Circle Stadium

Periodic Motion


In [7]:
simargs['balls']={0:[0,2**0.5,2,0]}
simargs['nBalls']=1
simargs['trace']=True

simulation=circle.CircleTable(**simargs)
ani=simulation.main(600)
HTML(ani.to_html5_video())


Out[7]:

Circle Stadium

Sensitivity to Initial Conditions


In [8]:
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.51,0.7]}
simargs['nBalls']=2
simargs['trace']=True

simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[8]:

Circle Stadium

Topological Mixing


In [1]:
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
    
    simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
    simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
    simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
    
simulation=circle.CircleTable(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-0fd13b3b0956> in <module>()
      1 
----> 2 simargs['trace']=False
      3 simargs['nBalls']=nballs
      4 for i in range(nballs+1):
      5 

NameError: name 'simargs' is not defined

Bunimovich Stadium

Sensitivity to Initial Conditions


In [10]:
import Buminovich

simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.501,0.7]}
simargs['nBalls']=2
simargs['trace']=True
simulation=Buminovich.Buminovich(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[10]:

Bunimovich Stadium

Topological Mixing


In [11]:
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
    
    simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
    simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
    simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
    
simulation=Buminovich.Buminovich(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[11]:

Lorentz Gas

The billiard arises from studying the behavior of two interacting disks bouncing inside a square, reflecting off the boundaries of the square and off each other.

Sensitivity to Initial Conditions


In [12]:
import Lorentz
simargs['balls']={0:[1,0.7,1.5,0.7],1:[1,0.7,1.501,0.7]}
simargs['nBalls']=2
simargs['trace']=True

simulation=Lorentz.Lorentz(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[12]:

Lorentz Gas

Topological Mixing


In [13]:
simargs['trace']=False
simargs['nBalls']=nballs
for i in range(nballs+1):
    
    simargs['balls'][i] = [1.5, 0.75, 1, 0.7]
    simargs['balls'][i][2] += random.uniform(-0.1, 0.1)
    simargs['balls'][i][3] += random.uniform(-0.1, 0.1)
    
simulation=Lorentz.Lorentz(**simargs)
ani=simulation.main(videoLength)
HTML(ani.to_html5_video())


Out[13]:

Possibly move GUI to near beginning?

GUI