www.gusucode.com > mpc 案例源码 matlab代码程序 > mpc/AnalyzeClosedLoopResponseExample.m

    %% Analyze Closed-Loop Response
% Perform closed-loop simulation of a plant with one MV and one measured
% OV.
%%
% Define a plant model and create a model predictive controller with MV
% constraints.

% Copyright 2015 The MathWorks, Inc.

ts = 2;
Plant = ss(0.8,0.5,0.25,0,ts);
MPCobj = mpc(Plant);
MPCobj.MV(1).Min = -2;
MPCobj.MV(1).Max = 2;
%%
% Initialize an |mpcstate| object for simulation. Use the default state
% properties.
x = mpcstate(MPCobj);
%%
% Set the reference signal. There is no measured disturbance.
r = 1;
%%
% Simulate the closed-loop response by calling |mpcmove| iteratively.
t = [0:ts:40];
N = length(t);
y = zeros(N,1); 
u = zeros(N,1); 
for i = 1:N
    % simulated plant and predictive model are identical
    y(i) = 0.25*x.Plant;
    u(i) = mpcmove(MPCobj,x,y(i),r);
end
%%
% |y| and |u| store the OV and MV values. 
%%
% Analyze the result.
[ts,us] = stairs(t,u);
plot(ts,us,'r-',t,y,'b--')
legend('MV','OV')
%%
% Modify the MV upper bound as the simulation proceeds using an
% |mpcmoveopt| object.
MPCopt = mpcmoveopt;
MPCopt.MVMin = -2;
MPCopt.MVMax = 2;
%%
% Simulate the closed-loop response and introduce the real-time upper limit
% change at eight seconds (the fifth iteration step).
x = mpcstate(MPCobj);
y = zeros(N,1);
u = zeros(N,1);
for i = 1:N
    % simulated plant and predictive model are identical
    y(i) = 0.25*x.Plant;
    if i == 5
    	MPCopt.MVMax = 1;
    end
    u(i) = mpcmove(MPCobj,x,y(i),r,[],MPCopt);
end
%%
% Analyze the result.
[ts,us] = stairs(t,u);
plot(ts,us,'r-',t,y,'b--')
legend('MV','OV')