Compute effect of controller tuning weights on performance
[J, sens] = sensitivity(MPCobj, PerfFunc, PerfWeights,
Tstop, r, v, simopt, utarget)
[J, sens] = sensitivity(MPCobj,'perf_fun',param1,param2,...)
The sensitivity
function is a controller
tuning aid. J specifies a scalar performance
metric. sensitivity
computes J and
its partial derivatives with respect to the controller tuning weights.
These sensitivities suggest tuning weight adjustments
that should improve performance, i.e., reduce J.
[J, sens] = sensitivity(MPCobj, PerfFunc, PerfWeights,
Tstop, r, v, simopt, utarget)
calculates the scalar performance
metric, J
, and sensitivities, sens
,
for the controller defined by the MPC controller object MPCobj
.
PerfFunc
must be one of the following strings:
'ISE'
(integral squared error) for which
the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}\left({\displaystyle \sum _{j=1}^{{n}_{y}}{({w}_{j}^{y}{e}_{yij})}^{2}+{\displaystyle \sum _{j=1}^{{n}_{u}}[{({w}_{j}^{u}{e}_{uij})}^{2}+{({w}_{j}^{\Delta u}\Delta {u}_{ij})}^{2}]}}\right)}$$
'IAE'
(integral absolute error) for which
the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}\left({\displaystyle \sum _{j=1}^{{n}_{y}}\left{w}_{j}^{y}{e}_{yij}\right+{\displaystyle \sum _{j=1}^{{n}_{u}}({w}_{j}^{u}{e}_{uij}+{w}_{j}^{\Delta u}\Delta {u}_{ij})}}\right)}$$
'ITSE'
(integral of timeweighted squared
error) for which the performance metric is
$$J={\displaystyle \sum _{i=1}^{Tstop}i\Delta t\left({\displaystyle \sum _{j=1}^{{n}_{y}}{({w}_{j}^{y}{e}_{yij})}^{2}+{\displaystyle \sum _{j=1}^{{n}_{u}}[{({w}_{j}^{u}{e}_{uij})}^{2}+{({w}_{j}^{\Delta u}\Delta {u}_{ij})}^{2}]}}\right)}$$
$$J={\displaystyle \sum _{i=1}^{Tstop}i\Delta t}\left({\displaystyle \sum _{j=1}^{{n}_{y}}\left{w}_{j}^{y}{e}_{yij}\right+{\displaystyle \sum _{j=1}^{{n}_{u}}({w}_{j}^{u}{e}_{uij}+{w}_{j}^{\Delta u}\Delta {u}_{ij})}}\right)$$
'ITAE'
(integral of timeweighted absolute
error) for which the performance metric is
In the above expressions n_{y} is the number of controlled outputs and n_{u} is the number of manipulated variables. e_{yij} is the difference between output j and its setpoint (or reference) value at time interval i. e_{uij} is the difference between manipulated variable j and its target at time interval i.
The w parameters are nonnegative performance
weights defined by the structure PerfWeights
, which
contains the following fields:
'OutputVariables':
1 by n_{y} vector
containing the $${w}_{j}^{y}$$ values
'ManipulatedVariables':
1 by n_{u} vector
containing the $${w}_{j}^{u}$$ values
'ManipulatedVariablesRate':
1 by n_{u} vector
containing the $${w}_{j}^{\Delta u}$$ values
If PerfWeights
is unspecified, it defaults
to the corresponding weights in MPCobj
. In general,
however, the performance weights and those used in the controller
have different purposes and should be defined accordingly.
Inputs Tstop
, r
, v
,
and simopt
define the simulation scenario used
to evaluate performance. See sim
for
details.
Tstop
is the integer number of controller
sampling intervals to be simulated. The final time for the simulations
will be Tstop × Δt,
where Δt is the controller sampling interval
specified in MPCobj
.
The optional input utarget
is a vector of n_{u} manipulated
variable targets. Their defaults are the nominal values of the manipulated
variables. Δu_{ij} is
the change in manipulated variable j
and its target
at time interval i
.
The structure variable sens
contains the
computed sensitivities (partial derivatives of J
with
respect to the MPCobj
tuning weights.) Its fields
are






See Weights for details on the tuning weights contained in MPCobj
.
[J, sens] = sensitivity(MPCobj,'perf_fun',param1,param2,...)
employs
a performance function 'perf_fun
' to define J
.
Its function definition must be in the form
function J = perf_fun(MPCobj, param1, param2, ...)
i.e., it must compute J
for the given controller
and optional parameters param1
, param2
,
... and it must be on the MATLAB^{®} path.
Note: While performing the sensitivity analysis, the software ignores timevarying, nondiagonal, and ECR slack variable weights. 
Suppose variable MPCobj
contains a default
controller definition for a plant with two controlled outputs, three
manipulated variables, and no measured disturbances. Compute its performance
and sensitivities as follows:
PerfFunc = 'IAE'; PerfWts.OutputVariables = [1 0.5]; PerfWts.ManipulatedVariables = zeros(1,3); PerfWts.ManipulatedVariablesRate = zeros(1,3); Tstop = 20; r = [1 0]; v = []; simopt = mpcsimopt; utarget = zeros(1,3); [J, sens] = sensitivity(MPCobj, PerfFunc, PerfWts, Tstop, ... r, v, simopt, utarget)
The simulation scenario in the above example uses a constant r = 1 for output 1 and r = 0 for output 2. In other words, the scenario is a unit step in the output 1 setpoint.