CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download
Project: Dynamics 2019
Views: 154
Visibility: Unlisted (only visible to those who know the link)
Kernel: SageMath (stable)

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:

to_unit_circle(0)
(1, 0)

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

to_unit_circle(1/4)
(0, 1)
to_unit_circle(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:

T(0)
2/5
T(4/5)
1/5

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) orbit
[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] circle_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)
Image in a Jupyter notebook

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
Image in a Jupyter notebook

An irrational orbit:

Sage can do exact arithmetic in the field AA of all algebraic reals. For more infromation on AA see: http://doc.sagemath.org/html/en/reference/number_fields/sage/rings/qqbar.html.

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

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.