MPT_SYSSTRUCT System structure description System structure (sysStruct) is a structure which describes the system to be controlled. MPT can deal with two types of systems: 1. Discrete-time linear time-invariant (LTI) systems 2. Discrete-time Piecewise Affine (PWA) Systems Both system types can be subject to constraints imposed on control inputs and system outputs. In addition, constraints on slew rate of the control inputs can also be given. --------------------------------------------------------------------------- LTI SYSTEMS --------------------------------------------------------------------------- In general, a constrained linear time-invariant system is defined by the following relations: x(k+1) = A x(k) + B u(k) y(k) = C x(k) + D u(k) Such an LTI system is defined by the following MANDATORY fields: sysStruct.A = A; sysStruct.B = B; sysStruct.C = C; sysStruct.D = D; An uncertain LTI system is driven by the following set of relations: x(k+1) = Aunc x(k) + Bunc u(k) + w(k) y(k) = C x(k) + D u(k) where w(k) is an unknown, but bounded additive disturbance, i.e. w(n) \in W \forall n = 0...Inf To specify an additive disturbance, set "sysStruct.noise = W" where W is a polytope bounding the disturbance. A polytopic uncertainty can be specified by a cell array of matrices Aunc and Bunc as follows: sysStruct.Aunc = {A1, ..., An}; sysStruct.Bunc = {B1, ..., Bn}; NOTE! sysStruct.A and sysStruct.B are still required even if you want to define a system with parametric uncertainties. --------------------------------------------------------------------------- PWA SYSTEMS --------------------------------------------------------------------------- PWA systems are models for describing hybrid systems. Dynamical behavior of such systems is captured by relations of the following form: x(k+1) = A_i x(k) + B_i u(k) + f_i y(k) = C_i x(k) + D_i u(k) + g_i Each dynamics "i" is defined in a polyhedral partition bounded by the so-called guardlines: guardX_i x(k) + guardU_i u(k) <= guardC_i that means dynamics "i" will be applied if the above inequality is satisfied. Fields of sysStruct describing a PWA system are listed below: sysStruct.A = {A1, ..., An} sysStruct.B = {B1, ..., Bn} sysStruct.C = {C1, ..., Cn} sysStruct.D = {D1, ..., Dn} sysStruct.f = {f1, ..., fn} [optional] sysStruct.g = {g1, ..., gn} [optional] sysStruct.guardX = {guardX1, ..., guardXn} sysStruct.guardU = {guardU1, ..., guardUn} [optional] sysStruct.guardC = {guardC1, ..., guardCn} Note that all fields have to be cell arrays of matrices of compatible dimensions, "n" stands for total number of different dynamics. If sysStruct.guardU is not provided, it is assumed to be zero. MPT is able to deal also with PWA systems which are affected by bounded additive disturbances: x(k+1) = A_i x(k) + B_i u(k) + f_i + w(k) where the disturbance w(k) is assumed to be bounded for all time instances by some polytope W. To indicate that your system is subject to such a disturbance, set sysStruct.noise = W; where W is a polytope object of appropriate dimension. --------------------------------------------------------------------------- CONSTRAINTS --------------------------------------------------------------------------- MPT supports various types of system constraints, such as: 1. input constraints (MANDATORY!): sysStruct.umin <= u(k) <= sysStruct.umax 2. output constraints (optional for most cases, sometimes mandatory): sysStruct.ymin <= y(k) <= sysStruct.ymax - output constraints 3. state constraints (optional, but recommended to achieve good scaling): sysStruct.xmin <= x(k) <= sysStruct.xmax - state constraints 4. constraints on slew rate of inputs (optional): sysStruct.dumin <= u(k) - u(k-1) <= sysStruct.dumax For tracking problems (probStruct.tracking=1), it is possible to specify bounds on reference signals by setting following fields: sysStruct.yrefmax, sysStruct.yrefmin sysStruct.xrefmax, sysStruct.xrefmin MPT also supports one additional constraint, the so-called Pbnd constraint. If you define "sysStruct.Pbnd" as a polytope object of the dimension of your state vector, this entry will be used as a polytopic constraint on the initial condition, i.e. x0 \in sysStruct.Pbnd This is especially important for explicit controllers, since "sysStruct.Pbnd" there limits the state-space which will be explored. If "sysStruct.Pbnd" is not specified, it will be set as a "large" box of size defined by mptOptions.infbox (see 'help mpt_init' for details). NOTE! "sysStruct.Pbnd" does NOT impose any constraints on predicted states! It is also possible to use polytopic constraints on states, inputs and outputs, though not directly in the system structure. If you want to use this kind of constraints, you need to add them manually using the "Design your own MPC" function (see 'help mpt_ownmpc' for an example and more details). --------------------------------------------------------------------------- OTHERS --------------------------------------------------------------------------- Text labels can be attached to state, input and output variables: sysStruct.StateName = {'position', 'speed'}; sysStruct.InputName = 'force'; sysStruct.OutputName = 'position'; These labels will be used as axis labels when plotting polyhedral partition of the explicit controller, or when visualizing trajectories. --------------------------------------------------------------------------- IMPORTING SYSTEM STRUCTURES FROM OTHER SOURCES --------------------------------------------------------------------------- The function mpt_sys() is able to create a system structure based on information provided in certain foreign formats. Supported formats include: * HYSDEL source code * MLD structure * State-Space objects of the Control Toolbox (ss) * Transfer-Function objects of the Control Toolbox (tf) * State-Space objects of the Identification Toolbox (idss) * Objects of the MPC Toolbox (mpc) For more information about conversions, see 'help mpt_sys'.