Classical dynamics of the kicked rotor
Numerical experiments » Kicked rotor » Classical dynamics of the kicked rotor
The classical dynamics of the kicked rotor is described by the standard map which maps the position theta and the momentum p (traditionnaly written I) at kick n to position and momentum at kick n+1.
In order to visualize the classical dynamics, one can perform a stroboscopic analysis (also known as Poincare surface of section) by plotting each (theta_n,I_n) point as a dot in a plane, for successive n. This is performed by the script:
kicked_rotor_classical_trajectories.py K number_of_trajectories number_of_points [theta_min theta_max I_min I_max]
K: kick strength
number_of_trajectories: number of initial conditions (=1 to plot a single trajectory).
number_of_points: number of iterates of the initial condition to be plotted.theta_min theta_max I_min I_max: optional arguments describing the rectangle to be plotted in the (theta,I) plane. Default values are [0,2*pi,0,2*pi].
This script computes several "trajectories" of the standard map. Initial conditions are generated randomly in the [0,2*pi] x [0,2*pi] square. It prints the points in the (theta,I) plane (modulo 2*pi). Matplotlib is used to visualize the plots. In addition, the points are printed in the "classical_trajectories.dat" file. Consecutive trajectories are separated by an empty line
Only points in a restricted area are actually printed. This makes it possible to zoom in a limited region of phase space.
In order to have a good general view of the dynamics, you may use number_of_trajectories=100, number_of_points=1000. This will create a Poincare surface of section with 100 000 points in an insignificant amount of time. When the total number of points is larger than few millions, you may have to wait...
- K=0. Observe that the dynamics is trivial.
- K=0.1, then K=0.5. Observe that the dynamics is regular with each trajectory lying on its individual "invariant curve".
- K=1.0. Observe that some regions of phase space are less regular. By running a single trajectory with more points (say 100000), check that it can fill a finite area in phase space. These are chaotic trajectories.
- K=2.0, 5.0, 8.0. Observe that chaos progressively invades phase space. For K>7.0, alomst all phase space is chaotic.
You may also have a look at secondary islands or ternary islands. For K=1.0, you may use:
- theta_min=1.7, theta_max=4.6, I_min=2.5, I_max=3.8
- theta_min=4.05, theta_max=4.35, I_min=3.6, I_max=3.75
kicked_rotor_classical_momentum_distribution.py K final_time number_of_trajectories number_of_bins
K: kick strength
final_time: <p**2(t)> is computed for each (integer) time up to final_time
number_of_trajectories: number of initial conditions
number_of_bins: number of bins for the histogram of the momentum distribution
This script computes the distribution of final momenta for a set of trajectories of the kicked rotor. Initial conditions are generated randomly in the [-pi,pi]x[-pi,pi] square. The script displays the histogram of the distribution of final momentum with a Gaussian fit. It also prints in "final_phase_space_position.dat" individual final positions and momenta. This makes is possible to visualize diffusion is momentum space and complete delocalization in configuration space.
10000 or 100000 trajectories are enough to generate a good histogram with little noise. Use around 100 bins in order to see the details of the distribution. You may use final_time=100.
I suggest that you use the script as follows:
- K=0.5 (or any value below 1). Even at long time, the momentum is bounded because of classical trapping by the regular curves in the Poincare surface of section.
- K=2.0. Observe that the distribution seems bimodal at long times. Explain why.
- K=4.0, 5.0, 6.0. Observe that the central peak seems to slowly disappear...
- K=8.0. Show that the momentum distribution is almost a perfect Gaussian, a characteristic feature of chaotic diffusion. What happens for larger K values?
- Slightly decrease K to K=7.0. How does the distribution look like? How does it evlove at longer time?
kicked_rotor_p2_vs_time.py K final_time number_of_trajectories
K: kick strength
final_time: <p**2(t)> is computed for each (integer) time up to final_time
number_of_trajectories: number of initial conditions
This script computes the average value of <p**2(t)> as a function of time for the kicked rotor, printed in the file "p2_vs_time_classical_kicked_rotor.dat". Initial conditions are generated randomly in the [-pi,pi] x [-pi, pi] rectangle.
First, use the script with a single trajectory. Observe that there are huge fluctuations as time grows, and also huge fluctuations between different trajectories.
Show that, averaging over 10 trajectories is enough to see (e.g. for K=8) an emerging diffusive behavior.
With 1000 or 10000 trajectories, observe that you have an almost perfect diffusion.
For K=0.5, observe the classical trapping.
For K>1.5, observe that the dynamics is (almost) always diffusive.
For K=8.0, estimate the diffusion coefficient. How does it compare with the simple estimate derived in the lectures.
Plot on the same figures the results for K=8,9,10,11,12. What do you observe?
Use K=80,90,100,110,120. What do you observe?
______________________________________________________________________________________________
Warning: For some stupid reason, the CMS of this Web site refuses files with the .py extension. Thus, you have to manually rename the file, changing the final _py to .py




