UI /

Stability

UI.Stability History

Hide minor edits - Show changes to output

Deleted lines 49-51:
% create a closed-loop system
loop = ClosedLoop(empc, anothermodel);

Changed lines 51-52 from:
autpwa = loop.toSystem();
to:
autpwa = ClosedLoop(empc, anothermodel).toSystem();
Changed line 58 from:
@]
to:
@]
Changed lines 42-61 from:
@]
to:
@]

It is also possible to verify whether a given explicit MPC controller provides closed-loop stability when coupled with a different system:

(:source lang=MATLAB :) [@
% a different model will be used for the verification
anothermodel = LTISystem('A', [1 1; 0 0.9], 'B', [1; 0.5]);

% create a closed-loop system
loop = ClosedLoop(empc, anothermodel);

% convert the closed-loop system into an autonomous PWA system
autpwa = loop.toSystem();

% construct the PWQ Lyapunov function
L = autpwa.lyapunov('pwq');

% plot the PWQ Lyapunov function
L.fplot('lyapunov');

@]
Added lines 1-42:
!! Important note

This feature is currently only available in development releases of MPT3. To install the latest development version, run the following:
(:source lang=MATLAB :) [@
tbxmanager source add http://www.tbxmanager.com/package/unstable.xml/mpt
tbxmanager update
@]

!! Construction of Lyapunov functions

MPT3 allows to construct piecewise quadratic (PWQ) Lyapunov functions for autonomous PWA systems via the @@PWASystem/lyapunov()@@ method.

Example which verifies closed-loop stability of an explicit MPC controller:
(:source lang=MATLAB :) [@
model = LTISystem('A', [1 1; 0 1], 'B', [1; 0.5]);
model.x.min = [-5; -5];
model.x.max = [5; 5];
model.u.min = -1;
model.u.max = 1;
model.x.penalty = QuadFunction(eye(2));
model.u.penalty = QuadFunction(1);
% add LQR terminal set and terminal penalty
model.x.with('terminalSet');
model.x.terminalSet = model.LQRSet();
model.x.with('terminalPenalty');
model.x.terminalPenalty = model.LQRPenalty();

N = 5; % prediction horizon
empc = MPCController(model, N).toExplicit();

% create a closed-loop system
loop = ClosedLoop(empc, model);

% convert the closed-loop system into an autonomous PWA system
autpwa = loop.toSystem();

% construct the PWQ Lyapunov function
L = autpwa.lyapunov('pwq');

% plot the PWQ Lyapunov function
L.fplot('lyapunov');
@]