The abstract ErgodicManager
type contains information about the spatial distribution. Currently, there are two sub-types. The type ErgodicManagerR2
manages distributions over \mathbb{R}^2, and the type ErgodicManagerSE2
manages distributions over the special Euclidean group SE(2).
The ErgodicManagerR2
type has the following fields:
domain::Domain # spatial domain K::Int # number of Fourier coefficients phi::Matrix{Float64} # spatial distribution phik::Matrix{Float64} # distribution's Fourier coefficients # constant regardless of phi (depend on k1,k2) Lambda::Matrix{Float64} hk::Matrix{Float64} # to speed up computation kpixl::Matrix{Float64} kpiyl::Matrix{Float64}
An ergodic manager for \mathbb{R}^2 can be constructed with a Domain
, a distribution over that domain, and the number of Fourier coefficients.
ErgodicManagerR2(d::Domain, phi::Matrix{Float64}, K::Int)
The decompose!
function decomposes an ergodic manager's spatial distribution phi
into Fourier coefficients, updating the managers phik
field:
decompose!(em::ErgodicManager)
Sometimes we want to reconstruct a spatial distribution from the Fourier coefficients, to see how well the Fourier coefficients capture the distribution.
phi = reconstruct(em::ErgodicManager)
If you have your own set of coefficients ck
, you can use that instead of em.phik
:
phi = reconstruct(em::ErgodicManager, ck::Matrix{Float64})
You could also pass in a trajectory and reconstruct
will take care of decomposing it into coefficients and using these to generate a spatial distribution.
phi = reconstruct(em::ErgodicManager, xd::VVF)
I provide a number of pre-made ergodic managers that correspond to frequently used example domains/distributions.
ErgodicManagerR2(example_name::String; K::Int=5, bins::Int=100)
Currently, there are two valid values for example_name: "single gaussian" and "double gaussian". For exmaple, you could run:
em = ErgodicManagerR2("single gaussian", K=5, bin=100)