Library Reference
CUDAExt.GPUSampledBoxMapGAIO.BoxGAIO.BoxGridGAIO.BoxMapGAIO.BoxMeasureGAIO.BoxSetGAIO.BoxTreeGAIO.IntervalBoxMapGAIO.NodeGAIO.SampledBoxMapGAIO.TransferOperatorArpack.eigsArpack.eigsArpack.eigsArpack.svdsArpack.svdsArpack.svdsBase.:∘Base.sumGAIO.AdaptiveBoxMapGAIO.GridBoxMapGAIO.MonteCarloBoxMapGAIO.PointDiscretizedBoxMapGAIO.adaptive_newton_stepGAIO.approx_lipschitzGAIO.armijo_ruleGAIO.bounded_point_to_keyGAIO.box_dimensionGAIO.centerGAIO.centerGAIO.coverGAIO.cover_manifoldGAIO.cover_rootsGAIO.densityGAIO.depthGAIO.exponGAIO.find_at_depthGAIO.finite_time_lyapunov_exponentsGAIO.finite_time_lyapunov_exponentsGAIO.fixqr!GAIO.hidden_keysGAIO.index_pairGAIO.index_quadGAIO.index_to_keyGAIO.iterate_until_equalGAIO.key_to_boxGAIO.key_to_indexGAIO.leavesGAIO.linregGAIO.marginalGAIO.marginalGAIO.marginalGAIO.maximal_invariant_setGAIO.morse_adjacenciesGAIO.morse_adjacencies_and_tilesGAIO.morse_component_mapGAIO.morse_graphGAIO.morse_mapGAIO.morse_setsGAIO.morse_tilesGAIO.neighborhoodGAIO.nth_iterate_jacobianGAIO.point_to_boxGAIO.point_to_keyGAIO.preimageGAIO.radiusGAIO.recurrent_setGAIO.rescaleGAIO.rescaleGAIO.rescaleGAIO.rk4GAIO.rk4_flow_mapGAIO.sample_adaptiveGAIO.sebaGAIO.sebaGAIO.subdivideGAIO.subdivideGAIO.subdivide!GAIO.symmetric_imageGAIO.tree_searchGAIO.unstable_setGAIO.verticesGAIO.volumeGAIO.αGAIO.ωMakieExt.plotboxesGAIO.@common_gpu_codeGAIO.@save
Exported functions
GAIO.Box — Type
Box{N,T}(center, radius)
Box(center, radius)A generalized box in dimension N with element type T. Mathematically, this is a set
\[[center_1 - radius_1,\ center_1 + radius_1) \ \times \ \ldots \ \times \ [center_N - radius_N,\ center_N + radius_N)\]
Fields:
center: vector where the box's center is locatedradius: vector of radii, length of the box in each dimension
Methods implemented:
:(==), in #, etc ....
GAIO.BoxGrid — Type
BoxGrid(domain::Box{N}, dims::NTuple{N,<:Integer} = ntuple(_->1, N))Data structure to grid a domain into a dims[1] x dims[2] x ... dims[N] equidistant box grid.
Fields:
domain: box defining the entire domainleft: leftmost / bottom edge of the domainscale: 1 / diameter of each box in the new grid (componentwise)dims: tuple, number of boxes in each dimension
Methods implemented:
:(==), ndims, size, length, keys, keytype #, etc ....
GAIO.BoxMap — Method
BoxMap(map, domain) -> SampledBoxMapTransforms a $map: Q → Q$ defined on points in the domain $Q ⊂ ℝᴺ$ to a SampledBoxMap defined on Boxes.
By default uses adaptive test-point sampling. For GPU-accelerated BoxMaps, uses a grid of test points by default.
GAIO.BoxMeasure — Type
BoxMeasure(partition, vals)Discrete measure with support on partition.domain, and a density with respect to the volume measure which is piecewise constant on the boxes of its support.
Implemented as a dictionary mapping partition keys to weights.
Constructors:
- BoxMeasure with constant weight 0 of Type
T(default Float64)
supported over a BoxSet B:
μ = BoxMeasure(B, T)- BoxMeasure with specified weights per key
P = B.partition
weights = Dict( key => 1 for key in keys(B) )
BoxMeasure(P, weights)- BoxMeasure with vector of weights supportted over a
BoxSetB:
weights = rand(length(B))
μ = BoxMeasure(B, weights)(Note that since Boxsets do not have a deterministic iteration order by default, this may have unintented results. This constructor should therefore only be used with BoxSet{<:Any, <:Any, <:OrderedSet} types)
Fields:
partition: AnBoxLayoutwhose indices are used
for vals
vals: A dictionary whose keys are the box indices from
partition, and whose values are the measure fo the corresponding box.
Methods implemented:
length, sum, iterate, values, isapprox, ∘, LinearAlgebra.norm, LinearAlgebra.normalize!GAIO.BoxSet — Type
BoxSet(partition, indices::AbstractSet)Internal data structure to hold boxes within a partition.
Constructors:
- set of all boxes in partition / box set
P:
B = cover(P, :) - cover the point
x, or pointsx = [x_1, x_2, x_3] # etc ...using boxes fromP
B = cover(P, x)- a covering of
Susing boxes fromP
S = [Box(center_1, radius_1), Box(center_2, radius_2), Box(center_3, radius_3)] # etc...
B = cover(P, S)Fields:
partition: the partition that the set is defined overset: set of partition-keys corresponding to the boxes in the set
Most set operations such as
union, intersect, setdiff, symdiff, issubset, isdisjoint, issetequal, isempty, length, # etc...are supported.
GAIO.BoxTree — Type
BoxTree(domain::Box)Binary tree structure to partition domain into (variably sized) boxes.
Fields:
domain:Boxdenoting the full domain.nodes: vector ofNodes. Each node holds two indices pointing to other nodes in the vector, or 0 if the node is a leaf.
Methods implemented:
copy, keytype, keys, subdivide #, etc....
GAIO.IntervalBoxMap — Type
BoxMap(:interval, map, domain::Box{N}) -> IntervalBoxMap
BoxMap(:interval, map, domain::Box{N}) -> IntervalBoxMapType representing a discretization of a map using interval arithmetic to construct rigorous outer coverings of map images.
Fields:
map: Map that defines the dynamical system.domain: Domain of the map,B.
.
GAIO.SampledBoxMap — Type
BoxMap(:sampled, map, domain::Box, domain_points, image_points)Type representing a discretization of a map using sample points.
Fields:
map: map that defines the dynamical system.domain: domain of the map,B.domain_points: the spread of test points to be mapped forward in intersection algorithms. Must have the signaturedomain_points(center, radius)and return an iterator of points withinBox(center, radius).image_points: the spread of test points for comparison in intersection algorithms. Must have the signaturedomain_points(center, radius)and return an iterator of points withinBox(center, radius).
.
GAIO.TransferOperator — Type
TransferOperator(map::BoxMap, domain::BoxSet)
TransferOperator(map::BoxMap, domain::BoxSet, codomain::BoxSet)Discretization of the Perron-Frobenius operator, or transfer operator. Implemented as a sparse matrix with indices referring to two BoxSets: domain and codomain.
There exists two constructors:
- only provide a
boxmapand adomain. In this case, thecodomainis generated as the image ofdomainunder theboxmap.julia> P = BoxGrid( Box((0,0), (1,0)), (10,10) ) 10 x 10 - element BoxGrid julia> domain = BoxSet( P, Set((1,2), (2,3), (3,4)) ) 3 - element Boxset over 10 x 10 - element BoxGrid julia> T = TransferOperator(boxmap, domain) TransferOperator over [...] - provide
domainandcodomain. In this case, the size of the transition matrix is given.julia> codomain = domain 3 - element Boxset over 10 x 10 - element BoxGrid julia> T = TransferOperator(boxmap, domain, codomain) TransferOperator over [...]
Fields:
mat:SparseMatrixCSCcontaining transfer weights. The indexT.mat[i,j]represents the transfer weight FROM thej'th box incodomainTO thei'th box indomain.boxmap:SampledBoxMapmap which dictates the transfer weights.domain:BoxSetwhich contains keys for the already calculated transfers. Effectively, these are column pointers, i.e. thejth column ofT.matcontains transfer weights FROM box Bj, where Bj is thejth box ofdomain.codomain:BoxSetwhich contains keys for the already calculated transfers. Effectively, these are row pointers, i.e. theith row ofT.matcontains transfer weights TO box Bi, where Bi is theith box ofcodomain.
domain -->
codomain . . . . .
| . . . . .
| . . . . .
v . . mat . .
. . . . .
. . . . .
. . . . .
. . . . .It is important to note that TranferOperator is only supported over the box set domain, but if one lets a TranferOperator act on a BoxMeasure, e.g. by multiplication, then the domain is extended "on the fly" to include the support of the BoxMeasure.
Methods Implemented:
:(==), size, eltype, getindex, setindex!, SparseArrays.sparse, Arpack.eigs, LinearAlgebra.mul! #, etc ...Implementation detail:
The reader may have noticed that the matrix representation depends on the order of boxes in support. For this reason an OrderedSet is used. BoxSets using regular Sets will be copied and converted to OrderedSets.
.
Arpack.eigs — Method
eigs(gstar::TransferOperator [; kwargs...]) -> (d,[v,],nconv,niter,nmult,resid)Compute a set of eigenvalues d and eigenmeasures v of gstar. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.eigs can be passed. See the documentation for Arpack.eigs.
Arpack.eigs — Method
eigs(gstar::TransferOperator [; kwargs...]) -> (d,[v,],nconv,niter,nmult,resid)Compute a set of eigenvalues d and eigenmeasures v of gstar. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.eigs can be passed. See the documentation for Arpack.eigs.
Arpack.eigs — Method
eigs(gstar::TransferOperator [; kwargs...]) -> (d,[v,],nconv,niter,nmult,resid)Compute a set of eigenvalues d and eigenmeasures v of gstar. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.eigs can be passed. See the documentation for Arpack.eigs.
Arpack.svds — Method
svds(gstar::TransferOperator [; kwargs...]) -> ([U,], σ, [V,], nconv, niter, nmult, resid)Compute a set of
- singular values
σ - left singular vectors
U - right singular vectors
V
of gstar, where U and V are Vectors of BoxMeasures. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.svds can be passed. See the documentation for Arpack.svds.
Arpack.svds — Method
svds(gstar::TransferOperator [; kwargs...]) -> ([U,], σ, [V,], nconv, niter, nmult, resid)Compute a set of
- singular values
σ - left singular vectors
U - right singular vectors
V
of gstar, where U and V are Vectors of BoxMeasures. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.svds can be passed. See the documentation for Arpack.svds.
Arpack.svds — Method
svds(gstar::TransferOperator [; kwargs...]) -> ([U,], σ, [V,], nconv, niter, nmult, resid)Compute a set of
- singular values
σ - left singular vectors
U - right singular vectors
V
of gstar, where U and V are Vectors of BoxMeasures. Works with the adjoint Koopman operator as well. All keyword arguments from Arpack.svds can be passed. See the documentation for Arpack.svds.
GAIO.AdaptiveBoxMap — Method
BoxMap(:adaptive, f, domain::Box) -> SampledBoxMapConstruct a SampledBoxMap which uses sample_adaptive to generate test points as described in
Oliver Junge. “Rigorous discretization of subdivision techniques”. In: International Conference on Differential Equations. Ed. by B. Fiedler, K. Gröger, and J. Sprekels. 1999.
GAIO.GridBoxMap — Method
BoxMap(:grid, map, domain::Box{N}; n_points::NTuple{N} = ntuple(_->16, N)) -> SampledBoxMapConstruct a SampledBoxMap that uses a grid of test points. The size of the grid is defined by n_points, which is a tuple of length equal to the dimension of the domain.
GAIO.MonteCarloBoxMap — Method
BoxMap(:montecarlo, map, domain::Box{N}; n_points=16*N) -> SampledBoxMapConstruct a SampledBoxMap that uses n_points Monte-Carlo test points.
GAIO.PointDiscretizedBoxMap — Method
BoxMap(:pointdiscretized, map, domain, points) -> SampledBoxMapConstruct a SampledBoxMap that uses the iterator points as test points. points must be an array or iterator of test points within the unit cube [-1,1]^N.
GAIO.adaptive_newton_step — Function
adaptive_newton_step(g, g_jacobian, x, k=1)Return one step of the adaptive Newton algorithm for the point x.
GAIO.approx_lipschitz — Method
approx_lipschitz(f, center::SVector, radius::SVector, accel=nothing) -> MatrixCompute an approximation of the Lipschitz matrix, i.e. the matrix that satisifies
\[| f(x) - f(y) | \leq L | x - y | \quad \forall \, x,y \in \text{Box(center, radius)}\]
componentwise.
GAIO.armijo_rule — Function
armijo_rule(g, Dg, x, d, σ=1e-4, ρ=0.8, α₀=0.05, α₁=1.0)Find a step size multiplier $\alpha \in (\alpha_0, \alpha_1]$ such that
\[g(x + \alpha d) - g(x) \leq \alpha \sigma \, Dg(x) \cdot d\]
This is done by initializing $\alpha = 1$ and testing the above condition. If it is not satisfied, scale $\alpha$ by some constant $\rho < 1$ (i.e. set $\alpha = \rho \cdot \alpha$), and test the condition again.
GAIO.bounded_point_to_key — Method
bounded_point_to_key(G::BoxGrid, point)Find the cartesian index of the nearest box within a BoxGrid to a point. Conicides with point_to_key if the point lies in the grid. Default behavior is to set NaN = Inf if NaNs are present in point.
GAIO.box_dimension — Method
box_dimension(boxsets) -> DFor an iterator boxsets of (successively finer) BoxSets, compute the box dimension D.
Example
# F is some BoxMap, S is some BoxSet
box_dimension( relative_attractor(F, S, steps=k) for k in 1:20 )GAIO.center — Method
center(center, radius)Return the center of a box as an iterable. Default function for image_points in SampledBoxMaps.
GAIO.center — Method
center(b::Box)Return the center of a box.
GAIO.cover — Function
BoxSetconstructors:- set of all boxes in partition / box set
P:
julia B = cover(P, :)- cover the point
x, or pointsx = [x_1, x_2, x_3] # etc ...using boxes fromP
julia B = cover(P, x)- a covering of
Susing boxes fromP
julia S = [Box(center_1, radius_1), Box(center_2, radius_2), Box(center_3, radius_3)] # etc... B = cover(P, S)- set of all boxes in partition / box set
Return a subset of the partition or box set P based on the second argument.
GAIO.cover_manifold — Method
cover_manifold(f, B::BoxSet; steps=12)Use interval arithmetic to compute a covering of an implicitly defined manifold $M$ of the form
\[f(M) \equiv 0\]
for some function $f : \mathbb{R}^N \to \mathbb{R}$.
The starting BoxSet B should (coarsely) cover the manifold.
GAIO.cover_roots — Method
cover_roots(g, Dg, B::BoxSet; steps=12) -> BoxSetCompute a covering of the roots of g within the partition P. Generally, B should be a box set containing the whole partition P, ie B = cover(P, :), and should contain a root of g.
GAIO.density — Method
density(μ::BoxMeasure) -> FunctionReturn the measure μ as a callable density g, i.e.
\[\int f(x) \, d\mu (x) = \int f(x)g(x) \, dx . \]
GAIO.depth — Method
depth(tree::BoxTree)Return the depth of the tree structure.
GAIO.find_at_depth — Method
find_at_depth(tree, depth)Return all node indices at a specified depth.
GAIO.finite_time_lyapunov_exponents — Method
finite_time_lyapunov_exponents(f, Df, μ::BoxMeasure; n=8) -> σCompute the Lyapunov exponents using a spatial integration method [1] based on Birkhoff's ergodic theorem. Computes
\[\sigma_j = \frac{1}{n} \int \log R_{jj}( Df^n (x) ) \, dμ (x), \quad j = 1, \ldots, d\]
with respect to an ergodic invariant measure $\mu$.
[1] Beyn, WJ., Lust, A. A hybrid method for computing Lyapunov exponents. Numer. Math. 113, 357–375 (2009). https://doi.org/10.1007/s00211-009-0236-4
GAIO.finite_time_lyapunov_exponents — Method
finite_time_lyapunov_exponents(F::SampledBoxMap, boxset::BoxSet) -> BoxMeasureCompute the Finite Time Lyapunov Exponent for every box in boxset, where F represents a time-T integration of some continuous dynamical system. It is assumed that all boxes in boxset have radii of some fixed order ϵ.
hidden_keys(tree)Return all keys within the tree, including keys not corresponding to leaf nodes.
GAIO.index_pair — Method
index_pair(F::BoxMap, N::BoxSet) -> (P₁, P₀)Compute an index pair of BoxSets P₀ ⊆ P₁ ⊆ M where M = N ∪ nbhd(N).
GAIO.index_quad — Method
index_quad(F::BoxMap, N::BoxSet) -> (P₁, P₀, P̄₁, P̄₀)Compute a tuple of index pairs such that F: (P₁, P₀) → (P̄₁, P̄₀)
GAIO.index_to_key — Method
index_to_key(iterable, i)Return the object held in the ith position of iterable. Used to enumerate BoxSets as $\left\{ B_1, B_2, \ldots, B_n \right\}$ in TransferOperator.
GAIO.key_to_box — Method
key_to_box(G::BoxGrid, key)Return the box associated with the index within a BoxGrid.
GAIO.key_to_index — Method
key_to_index(iterable, key)Find the index in 1..length(iterable) which holds key, or return nothing. Used to enumerate BoxSets as $\left\{ B_1, B_2, \ldots, B_n \right\}$ in TransferOperator.
GAIO.leaves — Method
leaves(tree, initial_node_idx=1)Return the node indices of all leaves. Begins search at initial_node_idx, i.e. only returns node indices of nodes below initial_node_idx within the tree.
GAIO.marginal — Method
marginal(G::BoxGrid{N}; dim) -> BoxGrid{N-1}Construct the projection of a BoxGrid along an axis given by its dimension dim.
GAIO.marginal — Method
marginal(μ::BoxMeasure{Box{N}}; dim) -> BoxMeasure{Box{N-1}}Compute the marginal distribution of μ along an axis given by its dimension dim.
GAIO.marginal — Method
marginal(B::BoxSet{Box{N}}; dim) -> BoxSet{Box{N-1}}Construct the projection of the BoxSet along an axis given by its dimension dim. This means that all boxes are projected to dimension N-1. Overlapping boxes are counted only once.
GAIO.maximal_invariant_set — Method
maximal_invariant_set(F::BoxMap, B::BoxSet; subdivision=true, steps=subdivision ? 12 : 64) -> BoxSetCompute the maximal invariant set of F within the set B.
GAIO.morse_component_map — Method
Concatenation of the condensation map and morse map. See morse_map
GAIO.morse_map — Method
Given a Strong_components_output from MatrixNetworks (in particular the component map), compute a second map on the vertices of the condensation graph to the vertices of the morse graph. Vertices of the condensation graph which do not correspond to morse sets, get sent to the (arbitrary) vertex index 0.
origninal condensation morse
graph graph graph
* ──────┐
│
* ──────┴───────→ * ───────────────→ *
* ──────────────→ * ───┐ ┌─────→ *
│ │
* ──────────────→ * ───┴─────┼────→ 0
│
* ─────┬────────→ * ─────────┘
│
* ─────┤
│
* ─────┘
⋮ ==============⟹ ⋮ ==============⟹ ⋮
condensation morse
map map.
GAIO.morse_sets — Method
Given a BoxMap, a domain BoxSet (together interpreted as a transfer graph G), compute the boxes corresponding to the vertices of the morse graph, return their union as a BoxSet.
GAIO.morse_tiles — Method
Given a BoxMap, a domain BoxSet (together interpreted as a transfer graph G), compute the boxes corresponding to the vertices of the morse graph. These vertices are precisely the chain recurrent components of G
GAIO.neighborhood — Method
neighborhood(B::BoxSet) -> BoxSet
nbhd(B::BoxSet) -> BoxSetReturn a one-box wide neighborhood of a BoxSet B.
GAIO.nth_iterate_jacobian — Method
nth_iterate_jacobian(f, Df, x, n; return_QR=false) -> Z[, R]Compute the Jacobian of the n-times iterated function f ∘ f ∘ ... ∘ f at x using a QR iteration based on [1]. Requires an approximation Df of the jacobian of f, e.g. Df(x) = ForwardDiff.jacobian(f, x). Optionally, return the QR decomposition.
[1] Dieci, L., Russell, R. D., Van Vleck, E. S.: "On the Computation of Lyapunov Exponents for Continuous Dynamical Systems," submitted to SIAM J. Numer. Ana. (1993).
GAIO.point_to_box — Method
point_to_box(P::BoxLayout, point)Find the box within a BoxGrid containing a point.
GAIO.point_to_key — Method
point_to_key(G::BoxGrid, point)Find the index for the box within a BoxGrid contatining a point, or nothing if the point does not lie in the domain.
GAIO.preimage — Method
preimage(F::BoxMap, B::BoxSet, Q::BoxSet) -> BoxSetCompute the (restricted to Q) preimage of B under F, i.e.
\[F^{-1} (B) \cap Q . \]
Note that the larger $Q$ is, the more calculation time required.
GAIO.radius — Method
radius(b::Box)Return the radius of a box.
GAIO.recurrent_set — Method
recurrent_set(F::BoxMap, B::BoxSet; subdivision=true, steps=subdivision ? 12 : 64) -> BoxSetCompute the (chain) recurrent set within the box set B.
GAIO.rescale — Method
rescale(center, radius, points)Return an iterable which calls rescale(center, radius, point) for each point in points.
GAIO.rescale — Method
rescale(points)Return a function
(center, radius) -> rescale(center, radius, points)Used in domain_points for BoxMap, PointDiscretizedMap.
GAIO.rescale — Method
rescale(box, point::Union{<:StaticVector{N,T}, <:NTuple{N,T}})
rescale(center, radius, point::Union{<:StaticVector{N,T}, <:NTuple{N,T}})Scale a point within the unit box $[-1, 1]^N$ to lie within box = Box(center, radius).
GAIO.rk4_flow_map — Function
rk4_flow_map(f, x, step_size=0.01, steps=20)Perform steps steps of the classic Runge-Kutta fourth order method, with step size step_size.
GAIO.sample_adaptive — Method
sample_adaptive(f, center::SVector, radius::SVector)Create a grid of test points using the adaptive technique described in
Oliver Junge. “Rigorous discretization of subdivision techniques”. In: International Conference on Differential Equations. Ed. by B. Fiedler, K. Gröger, and J. Sprekels. 1999.
GAIO.seba — Method
seba(V::Matrix{<:Real}, Rinit=nothing, maxiter=5000) -> S, RConstruct a sparse approximation of the basis V, as described in [1]. Returns matrices $S$, $R$ such that
\[\frac{1}{2} \| V - SR \|_F^2 + \mu \| S \|_{1,1}\]
is minimized, where $\mu \in \mathbb{R}$, $\| \cdot \|_F$ is the Frobenuius-norm, and $\| \cdot \|_{1,1}$ is the element sum norm, and $R$ is orthogonal. See [1] for further information on the argument Rinit, as well as a description of the algorithm.
[1] Gary Froyland, Christopher P. Rock, and Konstantinos Sakellariou. Sparse eigenbasis approximation: multiple feature extraction across spatiotemporal scales with application to coherent set identification. Communications in Nonlinear Science and Numerical Simulation, 77:81-107, 2019. https://arxiv.org/abs/1812.02787
GAIO.seba — Method
seba(V::Vector{<:BoxMeasure}, Rinit=nothing; which=partition_disjoint, maxiter=5000) -> S, AConstruct a sparse eigenbasis approximation of V, as described in [1]. Returns an Array of BoxMeasures corresponding to the eigenbasis, as well as a maximum-likelihood BoxMeasure that maps a box to the element of S which has the largest value over the support.
The keyword which is used to set the threshholding heuristic, which is used to extract a partition of the supports from the sparse basis. Builtin options are
partition_unity, partition_disjoint, partition_likelihoodwhich are all exported functions.
GAIO.subdivide! — Method
subdivide!(tree::BoxTree, key::keytype(tree)) -> BoxTree
subdivide!(tree::BoxTree, depth::Integer) -> BoxTree
subdivide!(boxset::BoxSet{<:Any,<:Any,<:BoxTree}, key) -> BoxSet
subdivide!(boxset::BoxSet{<:Any,<:Any,<:BoxTree}, depth) -> BoxSetSubdivide a BoxTree at key. Dimension along which the node is subdivided depends on the depth of the node.
GAIO.subdivide — Method
subdivide(B::BoxSet{<:Any,<:Any,<:BoxTree}) -> BoxSetBisect every box in boxset along an axis, giving rise to a new partition of the domain, with double the amount of boxes. Axis along which to bisect depends on the depth of the nodes.
GAIO.subdivide — Method
subdivide(P::BoxGrid, dim) -> BoxGrid
subdivide(B::BoxSet, dim) -> BoxSetBisect every box in the BoxGrid or BoxSet along the axis dim, giving rise to a new grid of the domain, with double the amount of boxes.
GAIO.symmetric_image — Method
symmetric_image(F::BoxMap, B::BoxSet) -> BoxSetEfficiently compute
\[F (B) \cap B \cap F^{-1} (B) . \]
Internally performs the following computation (though more efficiently)
# create a measure with support over B
μ = BoxMeasure(B)
# compute transfer weights (restricted to B)
T = TransferOperator(F, B, B)
C⁺ = BoxSet(T*μ) # support of pushforward measure
C⁻ = BoxSet(T'μ) # support of pullback measure
C = C⁺ ∩ C⁻GAIO.tree_search — Method
tree_search(tree, point, max_depth=Inf) -> key, node_idxFind the key and correspoinding node index within the tree data structure containing a point.
GAIO.unstable_set — Method
unstable_set(F::BoxMap, B::BoxSet) -> BoxSetCompute the unstable set for a box set B. Generally, B should be a small box surrounding a fixed point of F. The partition must be fine enough, since no subdivision occurs in this algorithm.
GAIO.vertices — Method
vertices(box)Return an iterator over the vertices of a box = Box(center, radius).
GAIO.volume — Method
volume(box::Box)Compute the volume of a box.
GAIO.@save — Macro
@save boxset prefix="./" suffix=".boxset" -> filename
@save boxset filename -> filenameSave a BoxSet as a list of keys. The default file name is the variable name.
Note that this does not include information on the partition of the BoxSet, just the keys.
.
@save boxmap source prefix="./" suffix=".boxmap" -> filename
@save boxmap source filename -> filenameSave a BoxMap as a list of source-keys and their image-keys in the form
key_1 -> {image_1, image_2, image_3}
key_2 -> {image_2, image_4, image_8, image_6}
⋮.
@save transfer_operator prefix="./" suffix=".boxmap" -> filename
@save transfer_operator filename -> filenameSave a TransferOperator as a list of keys and their image-keys in the form
key_1 -> {image_1, image_2, image_3}
key_2 -> {image_2, image_4, image_8, image_6}
⋮MakieExt.plotboxes — Method
plot(boxset::BoxSet)
plot(boxmeas::BoxMeasure)
plot!(boxset::BoxSet)
plot!(boxmeas::BoxMeasure)Plot a BoxSet or BoxMeasure.
Special Attributes:
projection = x -> x[1:3] If the dimension of the system is larger than 3, use this function to project to 3-d space.
color = :red Color used for the boxes.
colormap = :default Colormap used for plotting BoxMeasures values.
marker = HyperRectangle(GeometryBasics.Vec3f0(0), GeometryBasics.Vec3f0(1)) The marker for an individual box. Only works if using Makie for plotting.
All other attributes are taken from MeshScatter.
Nonexported functions
Base.:∘ — Method
∘(f, boxmeas::BoxMeasure) -> BoxMeasure
∘(boxmeas::BoxMeasure, F::BoxMap) -> BoxMeasurePostcompose the function f with the boxmeas, or precompose a BoxMap F with the boxmeas (by applying the Koopman operator). Note that the support of BoxMeasure must be forward-invariant under F.
Base.sum — Method
sum(f, μ::BoxMeasure)
sum(f, μ::BoxMeasure, B::BoxSet)
μ(B) = sum(x->1, μ, B)Approximate the value of
\[\int_Q f \, d\mu .\]
If a BoxSet B is passed as the third argument, then the integration is restricted to the boxes in B
\[\int_{Q \cap \bigcup_{b \in B} b} f \, d\mu .\]
The notation μ(B) is offered to compute $\mu (\bigcup_{b \in B} b)$.
GAIO.expon — Function
expon(h, k=1, ϵ=0.2, δ=0.1)Return a rough estimate of how many Newton steps should be taken, given a step size h.
GAIO.fixqr! — Method
fixqr!(Q, R)Adjust a QR-decomposition such that the R-factor has positive diagonal entries.
GAIO.iterate_until_equal — Method
iterate_until_equal(f, start; max_iterations = Inf)Iterate a function f starting at start until a fixed point is reached or max_iterations have been performed. One iteration is always guaranteed!
GAIO.linreg — Method
linreg(xs, ys)Simple one-dimensional linear regression used to approximate box dimension.
GAIO.morse_adjacencies — Method
Given a strong_components_output from MatrixNetworks (in particular the component map) as well as the morse map (see morse_map), compute the adjacency matrix for the morse graph.
GAIO.morse_adjacencies_and_tiles — Method
Given a BoxMap and a domain BoxSet (together interpreted as a transfer graph), compute the adjacency matrix for the mose graph as well as the boxes representing the vertices for the morse graph.
GAIO.@common_gpu_code — Macro
Much of the code for the two gpu extensions is identical. This macro generates the identical part of the code, with appropriate object names.
GAIO.morse_graph — Method
morse_graph(F::BoxMap, B::BoxSet) -> MetaGraphConstruct the morse graph
CUDAExt.GPUSampledBoxMap — Type
BoxMap(:gpu, map, domain; n_points) -> GPUSampledBoxMapTransforms a $map: Q → Q$ defined on points in the domain $Q ⊂ ℝᴺ$ to a GPUSampledBoxMap defined on Boxes.
Uses the GPU's acceleration capabilities.
By default uses a grid of sample points.
BoxMap(:montecarlo, :gpu, boxmap_args...)
BoxMap(:grid, :gpu, boxmap_args...)
BoxMap(:pointdiscretized, :gpu, boxmap_args...)
BoxMap(:sampled, :gpu, boxmap_args...)Type representing a dicretization of a map using sample points, which are mapped on the gpu. This type performs orders of magnitude faster than standard SampledBoxMaps when point mapping is the bottleneck.
GPUSampledBoxMap makes NO use of the image_points field in SampledBoxMaps.
Fields:
map: map that defines the dynamical system.domain: domain of the map,B.domain_points: the spread of test points to be mapped forward in intersection algorithms. WARNING: this differs from SampledBoxMap.domain_points in that it is a vector of "global" test points within [-1, 1]ᴺ.
Requires a CUDA-capable gpu.