These are some implemented methods for building dynamics

Abstract Dynamic Definition

One dimensional piecewise monotone map definition

RigorousInvariantMeasures.MonotonicBranchType

Type used to represent a "branch" of a dynamic. The branch is represented by a map f with domain X=(a,b). X[1] and X[2] are interval enclosures of a,b.

The map must be monotonic on [a,b]. Note that this is not the same thing as being monotonic on hull(X[1], X[2]): for instance, take the map x → (x-√2)^2 on [√2, 1]: the left endpoint X[1] will be prevfloat(√2)..nextfloat(√2), but then the map is not monotonic on the whole hull(X[1], X[2]) because it also contains points that lie left of √2. This is a tricky case that must be dealt with.

Enclosures Y[1], Y[2] for f(a), f(b) and increasing may be provided (for instance if we know that Y=(0,1)), otherwise they are computed automatically.

source
RigorousInvariantMeasures.PwMapType

Dynamic based on a piecewise monotonic map.

The map is defined as T(x) = Ts[k](x) if $x \in [endpoints[k], endpoints[k+1])$.

y_endpoints ($k \times 2$ matrix) contains the result of applying Ts to the endpoints of each interval. These can be filled in automatically from endpoints, but sometimes they are known to higher accuracy, for instance for x -> mod(3x, 1) we know that it is full-branch exactly. It is assumed that the map will send its domain hull(endpoints[begin],endpoints[end]) into itself.

the array branches is guaranteed to satisfy branches[i].X[end]==branches[i+1].X[begin]

source
RigorousInvariantMeasures.PwMapMethod

Function call, and Taylor expansion, of a PwMap. Note that this ignores discontinuities; users are free to shoot themselves in the foot and call this on a non-smooth piecewise map. No better solutions for now.

source
Base.reverseMethod
Base.reverse(br:MonotonicBranch)

"Reverses" the x-axis of a branch: given $f:[a,b] -> R$, creates a branch with the function $g:[-b,-a] -> R$ defined as $g(x) = f(-x)$

source
RigorousInvariantMeasures.dfly_inf_derFunction

dfly inequality for maps with infinite derivatives.

The strategy to compute it follows a variant of Lemma 9.1 in the GMNP paper:

  • we find a "problematic set" I by taking a small interval of size radius(branch domain)/2^3 around each endpoint with infinite derivative;
  • we find l such that T >= l for each point in I
  • we compute the dfly coefficients as in the lemma.
  • we repeat the computation replacing 2^3 with 2^4, 2^5, ... 2^15 and take the best estimate among these.
source
RigorousInvariantMeasures.max_distortionFunction
max_distortion(D::PwMap; tol=1e-3)

Compute a rigorous bound for the distortion of a PwMap

Example

julia> using RigorousInvariantMeasures;

julia> D0 = mod1_dynamic(x->2*x+0.5*x*(1-x), full_branch = true)
Piecewise-defined dynamic with 2 branches

julia> max_distortion(D0)
[0.444268, 0.444445]
source
RigorousInvariantMeasures.mod1_dynamicMethod
mod1_dynamic(f::Function, ε = 0.0; full_branch = false)

Utility constructor for dynamics Mod 1 on the torus [0,1]. We assume that f is monotonic and differentiable, for now (this is not restrictive, for our purposes)

Example

julia> using RigorousInvariantMeasures;

julia> D0 = mod1_dynamic(x->2*x+0.5*x*(1-x), full_branch = true)
Piecewise-defined dynamic with 2 branches
source

Induced Liverani Saussol Vaienti

Base.iterateMethod

Return (in an iterator) the pairs (i, (x, |T'(x)|)) where x is a preimage of p[i], which describe the "dual" L* evaluation(p[i])

source
Base.iterateMethod

Return (in an iterator) the pairs (i, (x, |T'(x)|)) where x is a preimage of p[i], which describe the "dual" L* evaluation(p[i])

source
RigorousInvariantMeasures.ShootingLSVFunction
ShootingLSV(n, y, α, rigstep = 10; T = Float64)

This method returns the preimages of y in the right branch domain after n-1 preimages through the left branch through the LSV map with exponent α

source