Julia package for transfer operator spectral methods
Author wormell
6 Stars
Updated Last
1 Year Ago
Started In
October 2016


Build Status Coverage Status

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)

Calling 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

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)
dρ = linearresponse(K,Fun(sinpi,d))

ε = 0.05
plot!+ ε*dρ,title="Linear response")


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)