
Mixed Sensitivity Controller Design
file: /usr/local/lib/scilab/demos/control/scheme.dem
-->s=poly(0,'s');
-->str='[(s-1)/((s-1)^2*(s+2))]';
-->rep=x_dialog('Nominal plant?',str)
rep =
[(s-1)/((s-1)^2*(s+2))]
-->if rep==[] then return,end
-->Plant=evstr(rep);Plant=syslin('c',Plant);
--> //Nominal Plant
-->P22=tf2ss(Plant); //...in state-space form
-->[ny,nu,nx]=size(P22);
-->[Pms,r]=augment(P22);
-->txt=['W1 (sensitivity function S)';'W2 (K*S)';'W3 (complementary sensitivity T)'];
-->default=['s';'1';'1'];
-->while %t
--> rep=x_mdialog('Set weighting functions',txt,default);
--> if rep==[] then return;end
--> W1=evstr(rep(1));W2=evstr(rep(2));W3=evstr(rep(3));
--> default=rep;
--> Pms=sysdiag(W1,W2,W3,eye(P22))*Pms;
--> gms=['gamma min= ';'gamma max= ';'# iterations'];
--> vals=['0.01';'1000';'50'];
--> reps=x_mdialog('Set interval for gamma and #iterations',gms,vals);
--> if reps==[] then return;end
--> mumin=1/evstr(reps(2))^2;
--> mumax=1/evstr(reps(1))^2;
--> iter=evstr(reps(3));
--> [K,mu]=h_inf(Pms,r,mumin,mumax,iter);
--> if K~=[] then break;end
-->end
P22 is stabilizable
P22 is detectable
gama = 0.0141421356 Unfeasible (Hy hamiltonian) test = 0.10002E+01
gama = 0.0200000000 Unfeasible (Hy hamiltonian) test = 0.10004E+01
gama = 0.0282842712 Unfeasible (Hy hamiltonian) test = 0.10008E+01
gama = 0.0400000000 Unfeasible (Hy hamiltonian) test = 0.10016E+01
gama = 0.0565685424 Unfeasible (Hy hamiltonian) test = 0.10032E+01
gama = 0.0799999997 Unfeasible (Hy hamiltonian) test = 0.10064E+01
gama = 0.1131370843 Unfeasible (Hy hamiltonian) test = 0.10129E+01
gama = 0.1599999980 Unfeasible (Hy hamiltonian) test = 0.10259E+01
gama = 0.2262741642 Unfeasible (Hy hamiltonian) test = 0.10525E+01
gama = 0.3199999836 Unfeasible (Hy hamiltonian) test = 0.11079E+01
gama = 0.4525482936 Unfeasible (Hy hamiltonian) test = 0.12282E+01
gama = 0.6399998690 Unfeasible (Hy hamiltonian) test = 0.15151E+01
gama = 0.9050963092 Unfeasible (Hy hamiltonian) test = 0.23875E+01
gama = 1.2799989515 Unfeasible (Hy hamiltonian) test = 0.10062E+02
gama = 1.8101903941 Unfeasible (spectral radius) test = 0.30241E+02
gama = 2.5599916116 Unfeasible (spectral radius) test = 0.77599E+01
gama = 3.6203629935 Unfeasible (spectral radius) test = 0.25913E+01
gama = 5.1199328927 Unfeasible (spectral radius) test = 0.64735E+00
gama = 7.2405836346 OK test = -0.20897E+00
gama = 5.9119634387 Unfeasible (spectral radius) test = 0.21053E+00
gama = 6.4762088338 OK test = -0.13204E-02
gama = 6.1748346150 Unfeasible (spectral radius) test = 0.10407E+00
gama = 6.3201389847 Unfeasible (spectral radius) test = 0.51243E-01
gama = 6.3967464111 Unfeasible (spectral radius) test = 0.24929E-01
gama = 6.4361097503 Unfeasible (spectral radius) test = 0.11796E-01
gama = 6.4560658971 Unfeasible (spectral radius) test = 0.52357E-02
gama = 6.4661138349 Unfeasible (spectral radius) test = 0.19572E-02
gama = 6.4711554288 Unfeasible (spectral radius) test = 0.31827E-03
gama = 6.4736806521 OK test = -0.50108E-03
gama = 6.4724176710 OK test = -0.91414E-04
gama = 6.4717864576 Unfeasible (spectral radius) test = 0.11343E-03
gama = 6.4721020412 Unfeasible (spectral radius) test = 0.11005E-04
gama = 6.4722598503 OK test = -0.40204E-04
gama = 6.4721809443 OK test = -0.14599E-04
gama = 6.4721414924 OK test = -0.17969E-05
gama = 6.4721217667 Unfeasible (spectral radius) test = 0.46043E-05
gama = 6.4721316295 Unfeasible (spectral radius) test = 0.14037E-05
gama = 6.4721365610 OK test = -0.19664E-06
gama = 6.4721340952 Unfeasible (spectral radius) test = 0.60351E-06
gama = 6.4721353281 Unfeasible (spectral radius) test = 0.20344E-06
gama = 6.4721359445 Unfeasible (spectral radius) test = 0.33990E-08
gama = 6.4721362527 OK test = -0.96620E-07
gama = 6.4721360986 OK test = -0.46611E-07
gama = 6.4721360216 OK test = -0.21606E-07
gama = 6.4721359831 OK test = -0.91034E-08
gama = 6.4721359638 OK test = -0.28522E-08
gama = 6.4721359542 Unfeasible (spectral radius) test = 0.27340E-09
gama = 6.4721359590 OK test = -0.12894E-08
gama = 6.4721359566 OK test = -0.50800E-09
gama = 6.4721359554 OK test = -0.11730E-09
-->disp(spec(h_cl(Pms,r,K)),'closed loop eigenvalues') //Check internal stability
closed loop eigenvalues
! - 2.236068 !
! - 2. !
! - 1. !
-->[Ssens,Rsens,Tsens]=sensi(P22,K); //Sensitivity functions
-->//Singular values plot
-->fcts=['S function';'R (=K*S) function';'T function'];
-->www=x_mdialog('Select sensitivity function',fcts,['Yes';'No';'Yes']);
-->if www==[] then return,end
-->ww1=part(www(1),1)=='Y';
-->if ww1 then
--> xbasc(1);xset("window",1);xselect();gainplot(Ssens)
--> xtitle('S = Sensitivity function');

-->end
-->ww2=part(www(2),1)=='Y';
-->if ww2 then
--> xbasc(2);xset("window",2);xselect();gainplot(Rsens);
--> xtitle('R (=G*S) Sensitivity function');
--> xend()
-->end
-->ww3=part(www(3),1)=='Y';
-->if ww3 then
--> xbasc(3);xset("window",3);xselect();gainplot(Tsens);
--> xtitle('T = Complementary Sensitivity function');