Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

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.