**sieste » R**, and kindly contributed to R-bloggers)

In the idealized physical world, a rotor is simply a mass attached to an axis of length , free to move in the plane. Gravity and friction are absent. Such a rotor becomes a *kicked* rotor if it is periodically hit with a hammer. Every kick transfers momentum to the rotor and the time between successive kicks is .

The current state of the rotor is completely described by the current angle of rotation and the current angular momentum . We shall be interested only in the state of the rotor right after the kick. All quantities evaluated right after the kick are indicated by a prime.

If the rotor rotates at an angular velocity , the angle of rotation changes between two kicks by . Only the component of in the direction of motion is transferred. Therefor the angular momentum increases by as a result of the kick. We have

,

where is the angular velocity after the kick. We can make the above equations dimensionless (unitless) by dividing the angular momentum by a typical angular momentum of the system. This typical angular momentum is given by where is the typical velocity of the system. We divide the – equation by and get

.

The dimensionless angular momentum is the rotors angular momentum measured in units of the typical angular momentum . We have summarized some parameters into the constant .

Now, the (already dimensionless) angle equation can be manipulated a little. We notice that which is the same as which is simply the dimensionless angular momentum after the kick . So we now have

,

where we can, without loss of generality, apply to the angle equation and thus also to the angular momentum equation.

This is the famous Chirikov standard map which describes the behavior of the kicked rotor right after the kicks. It maps a phase space point before the kick to its corresponding point after the kick.

What follows is an R-script that chooses 1000 random points on the square and uses each point as the starting point to draw 1000 iterations of the standard map:

smap<-function(t,l) { K<- 1 for ( i in seq(1e3) ) { t[i+1]<- (t[i]+l[i]) %% (2*pi) l[i+1]<- (l[i]+K*sin(t[i+1])) %% (2*pi) } cbind(t,l) } par(mar=rep(0,4)) plot(NULL,xlim=c(0,2*pi),ylim=c(0,2*pi),axes=F,xlab="",ylab="") for (i in seq(1000) ) { t<-c(runif(1)*2*pi,runif(1)*2*pi) m<-smap( t[1],t[2] ) points(m[,1],m[,2],col=rgb(runif(1),runif(1),runif(1)) ,pch=".",cex=2) }

And this is the output:

**leave a comment**for the author, please follow the link and comment on his blog:

**sieste » R**.

R-bloggers.com offers

**daily e-mail updates**about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...