SharedOrbits_and_rotations.ipynbOpen in CoCalc

Orbits of rotations

By default, we will represent points in the circle by numbers in the interval [0,1)[0,1). The following function converts from these coordinates to the unit circle.

def to_unit_circle(x):
    return (cos(2*pi*x), sin(2*pi*x))

Here is an example of the use of the function above:

(1, 0)

Note that the output of the last command in a block is automatically printed in Jupyter.

(0, 1)
(1, 0)

The following function returns the rotation of the circle by alpha.

def rotation(alpha):
    def T(x):
        val = x+alpha
        return val - floor(val)
    return T

The following constructs the rotation by 2/5:

T = rotation(2/5)

Here we test it:


The following is a function that computes the forward orbit of xx under TT up until time NN. So, this returns the list of values [x,T(x),,TN(x)].[x,T(x), \ldots, T^N(x)].

def forward_orbit(x, T, N):
    orbit = [x] # Start of the orbit.
    y = x
    for i in range(N):
        y = T(y) # Redefine y to be T(y)
        orbit.append(y) # Add y at the end of the orbit.
    return orbit

Here we see that 00 has a periodic orbit of least period 55:

orbit = forward_orbit(0,T,5)
[0, 2/5, 4/5, 1/5, 3/5, 0]

The following converts orbit into circle coordinates:

circle_orbit = [to_unit_circle(x) for x in orbit]
[(1, 0), (-1/4*sqrt(5) - 1/4, 1/4*sqrt(-2*sqrt(5) + 10)), (1/4*sqrt(5) - 1/4, -1/4*sqrt(2*sqrt(5) + 10)), (1/4*sqrt(5) - 1/4, 1/4*sqrt(2*sqrt(5) + 10)), (-1/4*sqrt(5) - 1/4, -1/4*sqrt(-2*sqrt(5) + 10)), (1, 0)]

We can plot the circle_orbit:

line2d(circle_orbit, aspect_ratio=1)

Here we plot two orbits:

plt1 = line2d(circle_orbit, aspect_ratio=1)
orbit2 = forward_orbit(1/3, T, 5)
circle_orbit2 = [to_unit_circle(x) for x in orbit2]
plt2 = line2d(circle_orbit2, aspect_ratio=1, color="red")
plt1 + plt2 # Addition combines plots

An irrational orbit:

Sage can do exact arithmetic in the field AA of all algebraic reals. For more infromation on AA see:

Algebraic Real Field
alpha = AA(sqrt(2)-1)
T = rotation(alpha)
orbit = forward_orbit(0,T,100)
circle_orbit = [to_unit_circle(x) for x in orbit]
line2d(circle_orbit, aspect_ratio=1)

Of course, the full infinitely long forward orbit of any point is dense, as we will prove in class. Also see Devaney's Theorem 3.13.