Skip to content

Exploiting Spatial Symmetries

Some systems have symmetries that apply to their spatial dimensions. For example, the cubic Barkley model has equations:

u_t = \frac{1}{\epsilon}u(1-u)(u-\frac{v+b}{a}) + \nabla^2 u \\ v_t = u^3 - v

The only spatial coupling component is the Laplacian operator, \nabla^2. This means that the equations of the Barkley model have rotational symmetry with respect to space.

In principle one should be able to take advantage of these symmetries to reduce the embedded space dimension.

Symmetries

We encode symmetries with the following types:

# TimeseriesPrediction.SymmetryType.

Symmetry

Supertype of all symmetries used in SymmetricEmbedding. All symmetries are initialized like Symmetry(n1, n2, ...) with ni being the indices of the spatial dimensions that have the said symmetry.

Notice that the symmetries are defined with respect to the center point of the embedding.

source

# TimeseriesPrediction.ReflectionType.

Reflection <: Symmetry

Reflection symmetry: x and -x are equivalent (for all given dimensions).

source

# TimeseriesPrediction.RotationType.

Rotation <: Symmetry

Index sets at equal distance from the center point are equivalent, for the given input dimensions. E.g. for Rotation(1,3) and given center point u[i,j,k,...] all indices m, n that satisfy

|i-m|^2 + |k-n|^2 = r^2

for a given r, are equivalent. The same process generalizes to any number of input dimensions.

source

Symmetric Embedding

You can use the symmetries in the following embedding:

# TimeseriesPrediction.SymmetricEmbeddingType.

SymmetricEmbedding(ste::SpatioTemporalEmbedding, sym::Tuple)

A SymmetricEmbedding is intended as a means of dimension reduction for a SpatioTemporalEmbedding by exploiting spatial symmetries in the system, listed as a Tuple of <:Symmetry (see Symmetry) for all possible symmetries.

All points at a time step equivalent to each other according to the symmetries passed in sym will be averaged to a single entry! For example, the symmetry Reflection(2) means that the embedding won't have two entries u[i, j+1], u[i, j-1] but instead a single entry (u[i, j+1] + u[i, j-1])/2, with i,j being indices relative to the central point of the embedding. (the same process is done for any index offset j+2, j+3, etc., depending on how large the spatial radius r is)

The resulting structure from SymmetricEmbedding can be used for reconstructing datasets in the same way as a SpatioTemporalEmbedding.

source