H tuning of fixed-structure controllers


CL = hinfstruct(CL0)
[CL,gamma,info] = hinfstruct(CL0)
[CL,gamma,info] = hinfstruct(CL0,options)
[C,gamma,info] = hinfstruct(P,C0,options)


CL = hinfstruct(CL0) tunes the free parameters of the tunable genss model CL0. This tuning minimizes the H norm of the closed-loop transfer function modeled by CL0. The model CL0 represents a closed-loop control system that includes tunable components such as controllers or filters. CL0 can also include weighting functions that capture design requirements.

[CL,gamma,info] = hinfstruct(CL0) returns gamma (the minimum H norm) and a data structure info with additional information about each optimization run.

[CL,gamma,info] = hinfstruct(CL0,options) allows you to specify additional options for the optimizer using hinfstructOptions.

[C,gamma,info] = hinfstruct(P,C0,options) tunes the parametric controller blocks C0. This tuning minimizes the H norm of the closed-loop system CL0 = lft(P,C0). To use this syntax, express your control system and design requirements as a Standard Form model, as in the following illustration:

P is a numeric LTI model that includes the fixed elements of the control architecture. P can also include weighting functions that capture design requirements. C0 can be a single tunable component (for example, a Control Design Block (Control System Toolbox) or a genss model) or a cell array of multiple tunable components. C is a parametric model or array of parametric models of the same types as C0.

Input Arguments


Generalized state-space (genss) model describing the weighted closed-loop transfer function of a control system. CL0 includes both the fixed and tunable components of the control system. The tunable components of the control system are represented as control design blocks (Control System Toolbox), and are stored in the CL0.Blocks property of the genss model. hinfstruct adjusts the tunable parameters of the control design blocks in CL0 to minimize the H norm of the weighted transfer function. For more information about constructing this generalized model, see Build Tunable Closed-Loop Model for Tuning with hinfstruct.

CL0 can be a continuous-time or discrete-time model. In discrete time, the sample time must be specified (Ts ≠ –1).

CL0 can be an array of models, allowing you to tune a set of controller parameters for multiple models simultaneously. For example, the multiple models might represent different system configurations, different operating points, or different failure modes of a system.

CL0 can include uncertain control design blocks as well as tunable blocks. If CL0 has uncertain blocks, hinfstruct performs robust tuning.


Numeric LTI model representing the fixed elements of the control architecture to be tuned. P can also include weighting functions that capture design requirements. You can obtain P in two ways:

  • In MATLAB®, model the fixed elements of your control system as numeric LTI models. Then, use block-diagram building functions (such as connect and feedback) to build P from the modeled components. Also include any weighting functions that represent your design requirements.

  • If you have a Simulink® model of your control system and have Simulink Control Design™, use linlft to obtain a linear model of the fixed elements of your control system. The linlft command linearizes your Simulink model, excluding specified Simulink blocks (the blocks that represent the controller elements you want to tune). If you are using weighting functions to represent your design requirements, connect them in series with the linear model of your plant to obtain P.

P can be a continuous-time or discrete-time model. In discrete time, the sample time must be specified (Ts ≠ –1), and must match the sample time of C0.


Single tunable component or cell array of tunable components of the control structure.

Each entry in C0 represents one tunable element of your control architecture, such as a PID controller, a gain block, or a fixed-order transfer function. The entries of C0 can be Control Design Blocks (Control System Toolbox) or genss models.

For more information and examples of creating tunable models, see Models with Tunable Coefficients (Control System Toolbox) in the Control System Toolbox™ User's Guide.

C0 can be a continuous-time or discrete-time model, as long as the sample time matches that of P.


Set of options for hinfstruct. Use hinfstructOptions to define options. For information about the available options, see the hinfstructOptions reference page.

Output Arguments


Tuned version of the generalized state-space (genss) model CL0.

The hinfstruct command tunes the free parameters of CL0 to achieve a minimum H norm. CL.Blocks contains the same types of Control Design Blocks as CL0.Blocks, except that in CL, the parameters have tuned values.

To access the tuned parameter values, use getValue. You can also access them directly in CL.Blocks.


Tuned versions of the parametric models C0.

When C0 is a single parametric model, C is a parametric model of the same type, with tuned parameter values.

When C0 is a cell array of parametric models, C is also a cell array. The entries in C are parametric models of the same type as the corresponding entries in C0.


Best achieved value for the closed-loop H norm.

In some cases, hinfstruct performs more than one minimization run (when the hinfstructOptions option RandomStarts > 0). In such cases, gamma is the smallest H norm of all runs.


Data structure array containing results from each optimization run. The fields of info are:

  • Objective — Minimum H norm value for each run.

    When RandomStarts = 0, Objective = gamma.

  • Iterations — Number of iterations before convergence for each run.

  • TunedBlocks — Tuned control design blocks for each run.

    TunedBlocks differs from C in that C contains only the result from the best run. When RandomStarts = 0, TunedBlocks = C.


  • hinfstruct is related to hinfsyn, which also uses H techniques to design a controller for a MIMO plant. However, unlike hinfstruct, hinfsyn imposes no restriction on the structure and order of the controller. For that reason, hinfsyn always returns a smaller gamma than hinfstruct. You can therefore use hinfsyn to obtain a lower bound on the best achievable performance.

  • Using hinfstruct requires some familiarity with H techniques. It requires expressing your design requirements as frequency-weighting functions on plant inputs and outputs, as described in Formulating Design Requirements as H-Infinity Constraints. For a simpler approach to fixed-structure tuning, use systune or looptune.


hinfstruct uses specialized nonsmooth optimization techniques to enforce closed-loop stability and minimize the H norm as a function of the tunable parameters. These techniques are based on the work in [1].

hinfstruct computes the H norm using the algorithm of [2] and structure-preserving eigensolvers from the SLICOT library. For more information about the SLICOT library, see http://slicot.org.


[1] P. Apkarian and D. Noll, "Nonsmooth H-infinity Synthesis," IEEE Transactions on Automatic Control, Vol. 51, Number 1, 2006, pp. 71-86.

[2] Bruisma, N.A. and M. Steinbuch, "A Fast Algorithm to Compute the H-Norm of a Transfer Function Matrix," System Control Letters, 14 (1990), pp. 287-293.

Extended Capabilities

Introduced in R2010b