We present some of the basis already implemented in the package

Abstract basis

RigorousInvariantMeasures.is_refinementMethod
is_refinement(Bfine::Basis, Bcoarse::Basis)

Check if Bfine is a refinement of Bcoarse

Example

julia> using RigorousInvariantMeasures

julia> B = Ulam(1024)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 1025))

julia> Bfine = Ulam(2048)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 2049))

julia> is_refinement(Bfine, B)
true

julia> Bfine = Ulam(2049)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 2050))

julia> is_refinement(Bfine, B)
false
source
RigorousInvariantMeasures.strong_normMethod
strong_norm(B::Basis)

Return the type of the strong norm of the basis

Example

julia> using RigorousInvariantMeasures

julia> B = Ulam(1024)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 1025))

julia> strong_norm(B)
TotalVariation
source
RigorousInvariantMeasures.weak_normMethod
weak_norm(B::Basis)

Return the type of the weak norm of the basis

Example

julia> using RigorousInvariantMeasures

julia> B = Ulam(1024)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 1025))

julia> weak_norm(B)
L1
source
RigorousInvariantMeasures.weak_projection_errorMethod
weak_projection_error(B::Basis)

Return a constant Kh (typically scales as h ~ 1/n) such that

$||P_h f-f||\leq Kh ||f||_s$

Must be rounded up correctly! This function is not exported explictly but is used in all the estimates.

Example

julia> using RigorousInvariantMeasures;

julia> B = Ulam(1024)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 1025))

julia> RigorousInvariantMeasures.weak_projection_error(B)
0.00048828125
source

The Ulam basis

The Ulam basis associated to a finite partition \{0 = x_0, \ldots, x_N = 1\}, is given by the collection of characteristic functions \chi_{[x_i,x_{i+1})} for i in 0, \ldots, N.

The regularity seminorm associated to this basis is the Variation seminorm, \textrm{Var}(\phi) = \sup_{\mathcal{P}} \sum |\phi(z_{i+1})-\phi(z_i)|

Base.getindexMethod
Base.getindex(B::Ulam, i::Int)

Returns the i-th element of the Ulam basis as a function.

Example

julia> using RigorousInvariantMeasures

julia> B = Ulam(16)
Ulam{LinRange{Float64, Int64}}(LinRange{Float64}(0.0, 1.0, 17))

julia> B[1](1/32)
1

julia> B[2](1/32)
0
source
Base.iterateMethod
iterate(S::AverageZero{Ulam{T}}, state = 1) where{T}

Return the elements of the basis of average $0$ functions in the Ulam Basis

source
Base.iterateMethod

Given a preimage of an interval I_i, this iterator returns its relative intersection with all the elements of the Ulam basis that have nonzero intersection with it

source
Base.lengthMethod
Base.length(B::Ulam)

Returns the size of the Ulam basis (the size of the underlying vector -1)

source
Base.lengthMethod
Base.length(S::AverageZero{Ulam})

Return the size of the Average Zero space

source
RigorousInvariantMeasures.nonzero_onMethod
nonzero_on(B::Ulam, (a, b))

Returns the indices of the elements of the Ulam basis that intersect with the interval y We do not assume an order of a and b; this should not matter unless the preimages are computed with very low accuracy. We assume, though, that y comes from the (possibly inexact) numerical approximation of an interval in $[0,1]$, i.e., we restrict to $y \cap [0,1]$

source
RigorousInvariantMeasures.relative_measureMethod
relative_measure((a,b)::Tuple{<:Interval,<:Interval}, (c,d)::Tuple{<:Interval,<:Interval})

Relative measure of the intersection of (a,b) wrt the whole interval (c,d) Assumes that a,b and c,d are sorted correctly

source

The hat basis on $S^1$

RigorousInvariantMeasures.HatFunctionOnTorusMethod

Evaluate a HatFunctionOnTorus correctly on an IntervalOnTorus

Assumption: this is only called on functions defined on our partition, so either mi==0, hi==0, or the three values are in increasing order

source
RigorousInvariantMeasures.IntervalOnTorusType
IntervalOnTorus

A separate type for intervals on the torus (mod 1) to "remind" us of the quotient

The interval is normalized in the constructor: the caller may assume that

  • 0 <= i.lo < 1
  • i.hi < i.lo + 1 OR i==Interval(0,1)
source
Base.getindexMethod
Base.getindex(B::Hat, i::Int)

Make so that B[j] returns a HatFunctionOnTorus with the j-th basis element

source
Base.iterateMethod

Given a preimage $y$ of a point $x$, this iterator returns $\phi_j(y)/T'(y)$

source
RigorousInvariantMeasures.nonzero_onMethod
nonzero_on(B::Hat, dual_element)

Return the range of indices of the elements of the basis whose support intersects with the given dual element (i.e., a pair (y, absT')). The range may end with length(B)+1; this must be interpreted "mod length(B)": it means that it intersects with the hat function peaked in 0 as well (think for instance y = 0.9999).

source

The hat basis on $[0,1]$

Base.getindexMethod
Base.getindex(B::HatNP, i::Int)

makes so that B[j] returns a HatFunction with the j-th basis element

source
Base.iterateMethod

Given a preimage y of a point x, this iterator returns \phi_j(y)/T'(y)

source
RigorousInvariantMeasures.nonzero_onMethod

Return the range of indices of the elements of the basis whose support intersects with the given dual element (i.e., a pair (y, absT')). The range may end with length(B)+1; this must be interpreted "mod length(B)": it means that it intersects with the hat function peaked in 0 as well (think for instance y = 0.9999).

source

The C2 basis

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

Given a preimage y of a point x, this iterator returns $\phi_j(y)/T'(y)$

source
Base.lengthMethod

Return the size of the C2 basisBase.length(S::AverageZero) = length(S.basis)-1

source

The Chebyshev basis

Base.getindexMethod
Base.getindex(B::Chebyshev, i::Int)

Make so that B[j] returns a HatFunctionOnTorus with the j-th basis element

source
RigorousInvariantMeasures.eval_Clenshaw_BackwardFirstMethod
eval_Clenshaw_BackwardFirst

Eval a polynomial in Chebyshev basis, ClenshawBackward, using ball arithmetic Following Viviane Ledoux, Guillaume Moroz "Evaluation of Chebyshev polynomials on intervals andapplication to root finding"

source

Common Fourier interface

The Fourier Adjoint basis

The Fourier Analytic basis

RigorousInvariantMeasures.strong_weak_boundMethod

Return the weak-strong norm bound when restricted on the finite dimensional subspace We use here $\sum_{i=-K}^K (|g_i|\exp^{2\pi \eta |i|})^2 \leq \sum_{-K}^K |g_i|^2 \sum_{-K}^K \exp^{2(2\pi \eta |i|)} \leq ||g||_2 2\frac{1-\exp^{2K+2(2\pi \eta |i|)}}{1-\exp^{2(2\pi \eta |i|)}}$

source