##
Adaptive control example

For this example the following system from adaptive control was used in a feedback control system, as described in [20], [21] and further used in [25] (Example 5.4, p. 178):

|  |  | (54)

This system is introduced in the testruns of MATCONT under the name `adaptx`. It has a Hopf point at the origin for and as detected in the testrun `testadapt.m`.

From this Hopf point an initial cycle is calculated using the starter `init_H_LC`. The results of the continuation are plotted using the plot function `plotcycle(x,v,s,e)` (see Figure 12). This function plots the cycles `x`. `e` is an array whith either 2 or 3 elements for 2-dimensional and 3-dimensional plotting respectively. Its entries must be indices of state variables or active parameters in x. The index of the active parameter is `size(x,1)`

    >> init;
    >> [x0,v0]=init_EP_EP(@adaptx,[0;0;0],[-10;1],[1]);
    >> opt = contset; opt = contset(opt,'Singularities',1);
    >> [x,v,s,h,f]=cont(@equilibrium,x0,[],opt);
    first point found
    tangent vector to first point found
    label = H , x = ( 0.000000 0.000000 0.000000 1.000002 )
    First Lyapunov coefficient = -3.000001e-001

    elapsed time  = 0.3 secs
    npoints curve = 300
    >> x1=x(1:3,s(2).index);p=[x(end,s(2).index);1];
    >> [x0,v0]=init_H_LC(@adaptx,x1,p,[1],1e-6,20,4);
    >> opt = contset(opt,'MaxNumPoints',200);
    >> opt = contset(opt,'Multipliers',1);
    >> opt = contset(opt,'Adapt',1);
    >> [xlc,vlc,slc,hlc,flc]=cont(@limitcycle,x0,v0,opt);
    first point found
    tangent vector to first point found
    Limit point cycle (period = 6.283185e+000, parameter = 1.000000e+000)
    Normal form coefficient = -1.306379e+000
    Branch Point cycle(period = 6.283185e+000, parameter = 9.999996e-001)
    Period Doubling (period = 6.364071e+000, parameter = 6.303020e-001)
    Normal form coefficient = -4.267675e-002
    Neimark-Sacker (period = 6.433818e+000, parameter = 1.895460e-008)
    Neutral saddle
    Period Doubling (period = 6.364071e+000, parameter = -6.303020e-001)
    Normal form coefficient = 4.268472e-002

    elapsed time  = 27.6 secs
    npoints curve = 200
    >> plotcycle(xlc,vlc,slc,[size(xlc,1) 1 2]);

We note that `xlc` is a matrix; each column corresponds to a computed limit cycle and gives the coordinates of all points of the fine mesh, i.e. values, plus the period as the component and the value of the active parameter as the component.

The x-axis contains the active parameter, the y-axis the first state variable and the z-axis the second state variable . This run can be tested by the statement `testadapt1` (the axis labels have to be set manually). If you run only this example, do not forget to execute init `init` statement first.

Figure 12: Computed limit cycle curve

We note that the Limit point cycle and Branch point cycle detected in this run are degenerate: they reduce to the Hopf point itself. The Neimark-Sacker bifurcation is, in reality, a Neutral Saddle, i.e. it is an unstable periodic orbit with two real multipliers whose product is 1.

From the first Period Doubling bifurcation detected a limit cycle continuation of the nearby double period cycle is started. First, an initial cycle and its tangent vector are calculated using the starter `init_PD_LC`. The continuation is done using the standard continuer and the result is plotted using the `plotcycle` function (see figure 13).

    >> [x1,v1]=init_PD_LC(@adaptx,xlc,slc(4),40,4,1e-6);
    >> opt=contset(opt,'MaxNumPoints',250);
    >> [xlc2,vlc2,slc2,hlc2,flc2]=cont(@limitcycle,x1,v1,opt);
    first point found
    tangent vector to first point found
    Branch Point cycle(period = 1.272814e+001, parameter = 6.303020e-001)
    Period Doubling (period = 1.273437e+001, parameter = 5.796299e-001)
    Normal form coefficient = -5.579636e-002
    Neimark-Sacker (period = 1.154609e+001, parameter = 2.806142e-010)
    Neutral saddle
    Period Doubling (period = 1.106284e+001, parameter = -4.471966e-002)
    Normal form coefficient = 6.970442e-003
    Limit point cycle (period = 1.103168e+001, parameter = -4.494912e-002)
    Normal form coefficient = 1.311327e+002
    Neimark-Sacker (period = 1.076785e+001, parameter = -1.076152e-009)
    Neutral saddle
    Limit point cycle (period = 1.103169e+001, parameter = 4.494912e-002)
    Normal form coefficient = -1.310582e+002
    Period Doubling (period = 1.106284e+001, parameter = 4.471966e-002)
    Normal form coefficient = -6.973392e-003
    Neimark-Sacker (period = 1.154609e+001, parameter = 5.372279e-010)
    Neutral saddle
    Period Doubling (period = 1.273437e+001, parameter = -5.796298e-001)
    Normal form coefficient = 5.580465e-002

    elapsed time  = 62.3 secs
    npoints curve = 250
    >> plotcycle(xlc2,vlc2,slc2,[size(xlc2,1) 1 2]);

This run can be tested by the statement `testadapt2`.

Figure 13: Computed limit cycle curve started from a Period Doubling bifurcation