Definition of user functions
(c) DDE-BIFTOOL v. 3.1.1(75), 31/12/2014
(Please load ddebiftool into path first, see demo1.html.) To define a system, the user should provide Matlab functions defining the right-hand side (in the example called neuron_sys_rhs) and the indices for the delays in the parameter vector (called neuron_tau in our example).
Contents
Right-hand side
A function defining the right-hand side :
function y=sys_rhs(xx,par)
This function has two arguments, xx , which contains the state variable(s) at the present and in the past, xx
, par
which contains the parameters, par
.
For the example, this is ( is called neuron_sys_rhs in our example)
neuron_sys_rhs=@(xx,par)[... -par(1)*xx(1,1)+par(2)*tanh(xx(1,4))+par(3)*tanh(xx(2,3));.... -par(1)*xx(2,1)+par(2)*tanh(xx(2,4))+par(4)*tanh(xx(1,2))];
Delays
The delays ,
are considered to be part of the parameters (
,
). This is natural since the stability of steady solutions and the position and stability of periodic solutions depend on the values of the delays. Furthermore delays can occur both as a 'physical' parameter and as delay, as in
. From these inputs the right-hand side
is evaluated at time
. For equations with constant delays DDE-Biftool determines which parameters are delays by calling an argument-less function of the type
function d=sys_tau()
In the example we order the parameters as par . Thus, (giving it the name neuron_tau):
neuron_tau=@()[5,6,7]; ind_a21=4; % used later for continuation ind_taus=7; % used later for continuation
Jacobians of user-provided functions
Optionally (recommended) the user may also specify the partial derivatives of the user-defined functions with respect to states, delayed states and parameters. For constant delays only the derivatives of are required. They should be provided as a function of the form
function J=sys_deri(xx,par,nx,np,v)
providing the partial derivatives of first and second order (see file neuron_sys_deri.html for details).
Definition of structure funcs
Similar to standard functions such as ode45 DDE-Biftool's routines now have an argument that defines the right-hand side. Since DDE-Biftool needs several user-defined functions (sys_rhs, sys_tau, optionally sys_deri, sys_cond etc) these functions are collected in a structure funcs. This structure funcs is best set up by calling the (new) DDE-Biftool routine set_funcs wit a sequence of name-value pairs. Each name-value pair corresponds to a field in the structure. Fields that are not listed as arguments of set_funcs get replaced by a default if possible.
Possible argument names are:
- 'sys_rhs' (default sys_rhs if file sys_rhs.m present in folder): right-hand side sys_tau
- 'sys_tau' (default @()[]): function defining delays
- 'sys_deri' (default @df_deriv): function defining partial derivatives of sys_rhs
- 'sys_ntau' (default 0, only needed for state-dependent delays) number of delays
- 'sys_cond' (default @dummy_cond) function providing extra conditions
- 'sys_dtau' (default @df_derit, only needed for state-dependent delays): function defining partial derivatives of sys_tau
- 'x_vectorized' (logical, default false) set to true if sys_rhs, sys_deri, (sys_tau and sys_dtau for SD-DDEs) accept an argument xx with three dimensions. For periodic-orbit computations the function will be called with all collocation points simultaneously if x_vectorized is true.
Other fields are tp_del (true if delays are state-dependent), sys_deri_provided (true if user has provided sys_deri) and sys_dtau_provided (true if user has provided sys_dtau).
funcs=set_funcs(... 'sys_rhs',neuron_sys_rhs,... 'sys_tau',@()[5,6,7],... 'sys_deri',@neuron_sys_deri) %#ok<NOPTS>
funcs = sys_rhs: [function_handle] sys_ntau: @()0 sys_tau: @()[5,6,7] sys_cond: @dummy_cond sys_deri: @neuron_sys_deri sys_dtau: @(it,x,p,nx,np)df_derit(funcs,it,x,p,nx,np) sys_mfderi: [function_handle] x_vectorized: 0 tp_del: 0 sys_deri_provided: 1 sys_dtau_provided: 0 sys_mfderi_provided: 0
Save and continue to continuation and stability of steady states demo1_stst.html
save('demo1_funcs_results.mat');