Interactive Orbit Diagram
InteractiveDynamics.interactive_orbitdiagram — Functioninteractive_orbitdiagram(
ds::DiscreteDynamicalSystem, p_index, pmin, pmax, i0 = 1;
u0 = get_state(ds), parname = "p", title = ""
)Open an interactive application for exploring orbit diagrams (ODs) of discrete dynamical systems. Requires DynamicalSystems.
Keywords control the name of the parameter, the initial state (used for any parameter) or whether to add a title above the orbit diagram.
Interaction
The application is separated in the "OD plot" (left) and the "control panel" (right). On the OD plot you can interactively click and drag with the left mouse button to select a region in the OD. This region is then re-computed at a higher resolution.
The options at the control panel are straight-forward, with
namount of steps recorded for the orbit diagram (not all are in the zoomed region!)ttransient steps before starting to record stepsddensity of x-axis (the parameter axis)αalpha value for the plotted points.
Notice that at each update n*t*d steps are taken. You have to press update after changing these parameters. Press reset to bring the OD in the original state (and variable). Pressing back will go back through the history of your exploration History is stored when the "update" button is pressed or a region is zoomed in.
You can even decide which variable to get the OD for by choosing one of the variables from the wheel! Because the y-axis limits can't be known when changing variable, they reset to the size of the selected variable.
Accessing the data
What is plotted on the application window is a true orbit diagram, not a plotting shorthand. This means that all data are obtainable and usable directly. Internally we always scale the orbit diagram to [0,1]² (to allow Float64 precision even though plotting is Float32-based). This however means that it is necessary to transform the data in real scale. This is done through the function scaleod which accepts the 5 arguments returned from the current function:
figure, oddata = interactive_orbitdiagram(...)
ps, us = scaleod(oddata)InteractiveDynamics.scaleod — Functionscaleod(oddata) -> ps, usGiven the return values of interactive_orbitdiagram, produce orbit diagram data scaled correctly in data units. Return the data as a vector of parameter values and a vector of corresponding variable values.
For example, running
i = p_index = 1
ds, p_min, p_max, parname = Systems.standardmap(), 0.0, 1.2, "k"
t = "orbit diagram for the standard map"
oddata = interactive_orbitdiagram(ds, p_index, p_min, p_max, i;
parname = parname, title = t)
ps, us = scaleod(oddata)will produce