Poltergeist is a package for quick, accurate and abstract approximation of statistical properties of one-dimensional chaotic dynamical systems.
It treats chaotic systems through the framework of spectral methods (i.e. transfer operator-based approaches to dynamical systems) and is numerically implemented via spectral methods (e.g. Fourier and Chebyshev). For the latter, Poltergeist relies on and closely interfaces with the adaptive function approximation package ApproxFun.
The use of highly accurate Fourier and Chebyshev approximations means spectrally fast convergence: one can calculate acims to 15 digits of accuracy in a fraction of a second.
As an example, take your favourite Markov interval map and give it digital form:
using Poltergeist, ApproxFun d = 0..1. f1 = 2x+sin(2pi*x)/6; f2(x) = 2-2x f = MarkovMap([f1,f2],[0..0.5,0.5..1]) f(0.25), f'(0.25)
Similarly, take a circle map, or maps defined by modulo or inverse:
c = CircleMap(x->4x + sin(2pi*x)/2pi,PeriodicSegment(0,1)) lanford = modulomap(x->2x+x*(1-x)/2,0..1) # Or call lanford() doubling = MarkovMap([x->x/2,x->(x+1)/2],[0..0.5,0.5..1],dir=Reverse) # or doubling(0..1)
Transfer on an
AbstractMarkovMap type automatically creates an ApproxFun
Operator, with which you can do (numerically) all the kinds of things one expects from linear operators on function spaces:
L = Transfer(f) f0 = Fun(x->sin(3pi*x),d) #ApproxFun function f1 = L*f0 g = ((2I-L)\f0)' det(I-4L) # Fredholm determinant using Plots scatter(eigvals(L,80))
In particular, you can solve for many statistical properties, many of which Poltergeist has built-in commands for. Most of these commands allow you to use the
MarkovMap directly (bad, zero caching between uses), transfer operator (caches transfer operator entries, usually the slowest step), or the
SolutionInv operator (caches QR factorisation as well).
K = SolutionInv(L) ρ = acim(K) @test ρ == K\Fun(one,d) birkhoffvar(K,Fun(x->x^2,d)) birkhoffcov(K,Fun(x->x^2,d),Fun(identity,d)) dρ = linearresponse(K,Fun(sinpi,d)) plot(ρ) ε = 0.05 plot!(ρ + ε*dρ,title="Linear response") plot!(acim(perturb(M,sinpi,ϵ)))
This package is based on academic work. If you find this package useful in your work, please kindly cite as appropriate:
- C. Wormell (2017), Spectral Galerkin methods for transfer operators in uniformly expanding dynamics (preprint)
- Literature on ApproxFun.