Basic workflow

The closed-loop notation allows users to describe how structured controllers interconnect with the plant as for instance through LFTs (Linear Fractional Transformations), series, cascade connections, arithmetic operations, etc.

Contents

Plant data

Augmented plant data are borrowed from "Efficient Design of Low-Order $H_\infty$ Optimal Controllers Using Evolutionary Algorithms and a Bisection Approach" Proceedings of the 2006 IEEE Conference on Computer Aided Control Systems Design Munich, Germany, October 4-6, 2006

A = [0 0 1 0;0 0 0 1;-1.25 1.25 0 0;1.25 -1.25 0 0]; Bw = [0 0 -0.75 0.75]';
Bu = [0 0 1 0]';  Cz = [1 -1 0 0]; Cy = [0 1 0 0];
Dzw = 0; Dzu = 0; Dyw = 0; Dyu =0;
P = ss(A, [Bw Bu], [Cz;Cy], [Dzw Dzu;Dyw Dyu]);

Define reduced-order controller as 2nd-order transfer function

C0 = ltiblock.tf('C0', 2, 2 );

Describe how the controller interconnects with the plant P

CL0 = lft(P,C0);

Run hinfstruct to solve $H_\infty$ synthesis problem

[CL,gam] = hinfstruct(CL0); % CL is tuned version of CL0
Final: Peak gain = 0.602, Iterations = 52

Retrieve computed controller

C = getNominal(C0,CL);

Multiple restarts

In practice we recommend using multiple restarts to globalize a bit and get better local solutions. Extensive testing indicates that 3 or 4 random starts are enough to achieve good objective values. See hinfstructOptions for details. hinfstruct will automatically extract the best solution over several trials.

If adding 3 restarts to the default which amounts to solving 4 problems, the calling sequence becomes:

op = hinfstructOptions('RandomStart',3); % 3 or 4 restarts is enough in most applications
[CL,gam] = hinfstruct(CL0,op);           % the best solution is extracted over 4 attempts
Final: Peak gain = 0.602, Iterations = 52
Final: Peak gain = 0.601, Iterations = 46
       Spectral abscissa -1.35e-07 is close to bound -1e-07
Final: Peak gain = 0.623, Iterations = 42
       Spectral abscissa -1.21e-07 is close to bound -1e-07
Final: Peak gain = 0.646, Iterations = 25
       Spectral abscissa -2.22e-07 is close to bound -1e-07

Stabilization alone

For stabilization alone set target gain to infinity

op = hinfstructOptions('TargetGain',inf') ;
[CL,speca] = hinfstruct(CL0,op);
fprintf(1,' spectral abscissa in closed loop  %6.2f \n\n',speca);
% retrieve results as before
 spectral abscissa in closed loop   -0.02