Create tunable gain surface for gain scheduling

`tunableSurface`

lets you parameterize
and tune *gain schedules*, which are gains that
vary as a function of one or more scheduling variables.

For tuning purposes, it is convenient to parameterize a variable
gain as a smooth *gain surface* of the form:

$$K\left(n\left(\sigma \right)\right)=\gamma \left[{K}_{0}+{K}_{1}{F}_{1}\left(n\left(\sigma \right)\right)+\dots +{K}_{M}{F}_{M}\left(n\left(\sigma \right)\right)\right],$$

where

*σ*is a vector of scheduling variables.*n*(*σ*) is a normalization function (see the`Normalization`

property of the output argument`K`

).*γ*is a scaling factor (see the`Normalization`

property of the output argument`K`

).*F*_{1},...,*F*are user-selected basis functions._{M}*K*_{0},...,*K*are the coefficients to be tuned_{M}

You can use terms in a generic polynomial expansion as basis functions. Or, when the
expected shape of *K*(*σ*) is known, you can use more
specific functions. You can then use `systune`

to tune the
coefficients
*K*_{0},...,*K _{M}*,
subject to your design requirements, over the range of scheduling-variable
values.

`K = tunableSurface(name,K0init,domain,shapefcn)`

`K = tunableSurface(name,K0init,domain)`

creates
the tunable gain surface: `K`

= tunableSurface(`name`

,`K0init`

,`domain`

,`shapefcn`

)

$$K\left(n\left(\sigma \right)\right)=\gamma \left[{K}_{0}+{K}_{1}{F}_{1}\left(n\left(\sigma \right)\right)+\dots +{K}_{M}{F}_{M}\left(n\left(\sigma \right)\right)\right].$$

The tunable surface `K`

stores the basis
functions specified by `shapefcn`

and a discrete
set of *σ* values (the *design points*)
given by `domain`

. The tunable gain surface has
tunable coefficients *K*_{0},...,*K _{M}*.
The gain value is initialized to the constant gain

`K0init`

.
You can combine `K`

with other static or dynamic
elements to construct a closed-loop model of your gain-scheduled control
system. Or, use `K`

to parameterize a lookup table
in an `slTuner`

interface to a Simulink`systune`

to tune To tune a gain surface in a control system modeled in MATLAB

^{®}: Connect the gain surface with an array of plant models corresponding to the design points in`domain`

. For example, suppose`G`

is such an array, and`K`

represents a variable integration time. The following command builds a closed-loop model that you can tune with the`systune`

command.C0 = tf(K,[1 0]); T0 = feedback(C0*G,1);

To tune a gain surface in a control system modeled in Simulink: Use the gain surface to parameterize a lookup-table, matrix interpolation, or MATLAB function block in the Simulink model. For example, suppose

`ST0`

is an`slTuner`

interface to a Simulink model, and`GainTable`

is the name of a tuned block in the interface. The following command sets the parameterization of`GainTable`

to the tunable gain surface.`ST0 = setBlockParam(ST0,'GainTable',K);`

See Parameterize Gain Schedules for more information.

When you use

`writeBlockValue`

to write a tuned gain surface back to a Simulink model, the software uses`codegen`

to generate MATLAB code for the gain surface. You can use`codegen`

yourself to examine this code.