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
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
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