hsharrison / sysviewer

MATLAB GUI that plots dynamical system flow fields (and more) with sliders for adjusting parameters.
MIT License
1 stars 0 forks source link

sysViewer

Matlab dynamical system graphical interface

h = sysViewer(oPar, cPar, fcn, typ) builds a GUI for viewing the effects of parameter changes on a one- or two-dimensional dynamical system.

oPar and cPar are two-column cell arrays that define the order parameter and control parameter(s), respectively. The first column contains parameter names (strings to be typeset in latex). The second column contains 1x2 vectors of parameter's range. This vector defines plot axes limits for the order parameter and slider limits for the control parameters.

The system is defined by the function handle fcn. For one-dimensional systems, this should be a function with two inputs and one output. The first input is system state, which will be a scalar in a one-dimensional system. The second input is a vector of control parameter values. The output of fcn can be either the rate of change of the order parameter (in which case fcn is the flow equation), or the system potential (in which case fcn is the potential function). Which function is supplied can be indicated by the last input typ, one of the strings 'flow' or 'potential'. If typ is empty or omitted, 'flow' is the default.

For two-dimensional systems defined with a flow, fcn should be a cell array containing two function handles, each outputting the rate of change along one dimension. Each function should take three inputs; the first two are scalar values of the order parameters, the third is a vector of control parameters. For two-dimensional systems defined with a potential, fcn should take inputs as above and output a scalar.

The output h is a struct containing handles to the graphics objects in the GUI. Intended only for advanced tweaking or troubleshooting.

sysViewer(..., defs) initializes the parameter sliders with the default values in vector defs.

sysViewer(..., 'vectorize') speeds up computation for functions that cannot be evaluated with a vector. In fact, any number of trailing arguments will be passed to chebfun. See help chebfun for more options (chebfun2 and chebfun2v for two-dimensional options).

Examples


One-dimensional

sysViewer({'\phi' [-pi pi]}, ... 
          {'b/a' [0 1]; '\Delta\omega' [-2 2]}, ... 
          @(x,c) c(2)*x-cos(x)-c(1)*cos(2*x), ... 
          'potential'); 

sysViewer({'\phi' [-pi pi]}, ... 
          {'b/a' [0 1]; '\Delta\omega' [-2 2]}, ... 
          @(x,c) c(2)-sin(x)-2*c(1)*sin(2*x), ... 
          'flow'); 

sysViewer({'\phi' [-pi pi]}, ... 
          {'b/a' [0 1]; '\Delta\omega' [-2 2]; 'c' [0 .5]; 'd' [0 .5]}, ... 
          @(x,c) c(2)*x-cos(x)-c(1)*cos(2*x)+c(3)*sin(x)+c(4)*sin(2*x), ... 
          'potential'); 

sysViewer({'\phi' [-pi pi]}, ... 
          {'b/a' [0 1]; '\Delta\omega' [-2 2]; 'c' [0 .5]; 'd' [0 .5]}, ... 
            @(x,c) c(2)-sin(x)-2*c(1)*sin(2*x)+c(3)*cos(x)+2*c(4)*cos(2*x), ... 
          'flow'); 

alt text

Two-dimensional

sysViewer('x' [-5 5]; '\dot{x}' [-5 5]}, ... 
          [{'\alpha'; '\beta'; '\delta'} repmat({[-5 5]}, 3, 1)], ... 
          {@(x,dx,r) dx, @(x,dx,r) -r(1).*x.^3 - r(2).*x - r(3).*dx}, ... 
          'flow') 

alt text

Dependencies

(if missing, user will be prompted to download and install)