Cyclic Sets

Mathematical Background

We can extend the idea of almost invariant sets to sets which are cyclic in nature. We wish to find sets $A_0, \ldots, A_{r-1}$ such that

\[A_{k \, \text{mod} \, r} \approx f^{-1} ( A_{k+1 \, \text{mod} \, r} ) , \]

or in the context of the transfer operator, signed measures $\mu_0, \ldots, \mu_{r-1}$ with

\[f_{\#}\,\mu_{k \, \text{mod} \, r} \approx \mu_{k+1 \, \text{mod} \, r} \]

and supports on $A_0, \ldots, A_{r-1}$, respectively.

We can approximate a solution to this problem again as an eigenproblem, finding eigenmeasures $\nu_0, \ldots, \nu_{r-1}$ corresponding to the $r$-th roots of unity $\omega_r^k = e^{2 \pi k / r},\ k = 0, \ldots, r-1$. We have a theorem from [11]:

Suppose there exist sets $A_0, \ldots, A_{r-1}\, \subset Q$ with $A_{k \, \text{mod} \, r} \approx f^{-1} ( A_{k+1 \, \text{mod} \, r} )$. Then the rth power

\[(f_{\#})^r = \underbrace{f_{\#} \circ \ldots \circ f_{\#}}_{r\ \text{times}}\]

has eigenvalue $1$ with multiplicity at least $r$. Further, there are $r$ corresponding probability measures $\mu_0, \ldots, \mu_{r-1}$ with supports on $A_0, \ldots, A_{r-1}$, respectively. These $\mu_k$ can be constructed from the eigenmeasures $\nu_k$ of $f_{\#}$ corresponding to the eigenvalues $\omega_r^k$ as follows

\[\mu_{\pi(l)} = \frac{1}{r} \sum_{k = 0}^{r-1} \omega_r^{k \cdot l} \nu_k\]

where $\pi$ is some permutation of the indices $\left\{ 0, \ldots, r \right\}$.

Example

Let us consider the map $f : \mathbb{C} \to \mathbb{C}$ given by

\[f(z) = e^{-\frac{2 \pi i}{3}} \left( (|z|^2 + \alpha) z + \frac{1}{2} \bar{z}^2 \right) , \]

with $\alpha = -1.7$. To realize this in GAIO.jl, we will view $\mathbb{C} \cong \mathbb{R}^2$.

using GAIO

const α = -1.7
f(z) = exp(-2*pi*im/3) * ( (abs(z)^2 + α)*z + conj(z)^2 / 2 )
fr((x, y)) = reim( f(x + y*im) )

c, r = (0, 0), (1.5, 1.5)
Q = Box(c, r)
P = BoxPartition(Q, (128,128))
F = BoxMap(fr, Q)

S = cover(P, (0,0))
W = unstable_set(F, S)
3744 - element BoxSet in 128 x 128 - element BoxPartition

If we consider the chain recurrent set we notice that there seem to be some discrete "blobs". We may wonder how they interact.

C = chain_recurrent_set(F, W, steps=2)
5733 - element BoxSet in 256 x 256 - element BoxPartition
using Plots

p = plot(C)

Chain Recurrent Set

T = TransferOperator(F, W, W)

# eigenvalues of Largest Magnitude (LM)
λ, ev = eigs(T; nev=32, which=:LM)

λ
32-element Vector{ComplexF64}:
  1.0000000000000053 + 0.0im
 0.49999966711616073 + 0.8660253816376066im
 0.49999966711616073 - 0.8660253816376066im
 -0.4999999625772863 + 0.8660247898984552im
 -0.4999999625772863 - 0.8660247898984552im
 -0.9999992700378539 + 0.0im
  0.8630061226535517 + 0.0847479723716105im
  0.8630061226535517 - 0.0847479723716105im
  0.5048957483412261 + 0.7050116685671846im
  0.5048957483412261 - 0.7050116685671846im
                     ⋮
 -0.8110847919669453 + 0.0im
 -0.3486953259390599 + 0.7055562580020118im
 -0.3486953259390599 - 0.7055562580020118im
 0.43669051000156756 + 0.6547478908120322im
 0.43669051000156756 - 0.6547478908120322im
 -0.7853702000863243 + 0.05078854956992042im
 -0.7853702000863243 - 0.05078854956992042im
  0.7853616536917789 + 0.050814354753988156im
  0.7853616536917789 - 0.050814354753988156im
p = scatter(λ)

Eigenvalues

We see that the $6$th roots of unity clearly seem to be part of the spectrum. We therefore can conclude that there is an approximate 6-cycle, and can extract the sets corresponding to the cycle.

# by inspection we see that λ[1:6] are ω₆ᵏ, k = 0, ..., 5
ω = λ[1:6]
ν = ev[1:6]

# perform the sum described in the theorem
μ = [sum( 1/6 .* ω.^l .* ν ) for l in 0:5]

# grab the real components
# (they are all approximately real, but the data type is still ComplexF64)
μ = real .∘ μ

# threshhold to extract support of each μᵢ
# This depends on the result from ARPACK,
# so it might be necessary to flip the `>`
τ = eps()
A = [
    BoxSet( P, Set(key for key in keys(μᵢ) if μᵢ[key] > τ) )
    for μᵢ in μ
]

A
6-element Vector{BoxSet{Box{2, Float64}, BoxPartition{2, Float64, Int64}, Set{Tuple{Int64, Int64}}}}:
 687 - element BoxSet in 128 x 128 - element BoxPartition
 710 - element BoxSet in 128 x 128 - element BoxPartition
 680 - element BoxSet in 128 x 128 - element BoxPartition
 690 - element BoxSet in 128 x 128 - element BoxPartition
 652 - element BoxSet in 128 x 128 - element BoxPartition
 670 - element BoxSet in 128 x 128 - element BoxPartition
p = plot();
for (i, Aᵢ) in enumerate(A)
    global p;
    p = plot!(p, Aᵢ, color=i, fillalpha=0.6);
end

Cyclic Sets

Note that we can also approximate the cyclic sets from the measures μ using sparse eigenbasis approximation (SEBA) as described in the corresponding section of the documentation.