Visualizing Dynamical Systems

Matthew Jee, CMPS 161 Winter 2014

Cool Stuff


This application facilitates the exploration of the relationship between the parameter space and state space of a dynamical system. The application can integrate and display three-dimensional, first-order differential equations, with an interface to 'scrub' through the parameter space in realtime.


User Guide

The Interface

The application opens a window with the Lorenz System by default. To open a custom system, go to File > Open and choose a file. Within each window are two views, a toolbar, and a sidebar.

The left view displays the state space of the system. The view can be rotated by clicking and dragging in the view, and can be scaled with the scroll wheel.

The state space view contains multiple seeds which are the starting points for evolution paths to be evaluated. By default there is one seed near the origin. You can move seeds by clicking and dragging them around the view. To add a seed, press Add Seed in the toolbar. To remove a seed, first select a seed by clicking on it, then press Remove Seed.

The right view displays the parameter space. It can be rotated and scaled just like the state space view. Within the parameter space are two handles that define a linear path through the space. By default they are both placed at the origin. The handles can be moved by clicking and dragging, just like the seeds in the state space view. These handles define the start and end parameter values that are rendered in the state space view.

The sidebar has a list of all the parameters in the system. You can edit the parameter list to modify the parameters precisely. The sidebar also contains:

Custom Systems

Custom systems can be defined using Javascript. To create a custom system, first create a javascript file. Within this file you must define two objects:

Here is an example of a really boring system:

parameters = ["a", "b"];

evolution = function(parameters, x, y, z) {
    var a = parameters[0];
    var b = parameters[1];
    return [a*x, b*y, z+1];

How does this work? Why is this program so terrible?

Answers to these questions and more can be found in the technical writeup and will not be reiterated here.