wrong path to the demo
[scilab.git] / scilab / modules / cacsd / demos / mixed.dem
1 // Copyright INRIA
2 mode(-1)
3 //display the diagram
4 x=[5,10,20,40,50,70,80,90];xmin=-10;xmax=100;
5 y=[22,28,30,32];ymin=12;ymax=40;
6
7 xx=[xmin,xmin,x([1 2 2 7 4 6 3 4 5 6 3 3 5 5]);xmax,xmax,x([3,2,7,7,5,8,3,4,5,6,4,4,6,6])];
8 yy=[ymin,ymax,y([3,1,1,1,3,3,2,2,2,2,2,4,2,4]);ymin,ymax,y([3,3,1,3,3,3,4,4,4,4,2,4,2,4])];
9     
10 xset("window",0);xbasc();xselect();
11 plot2d(xx,yy,ones(1,16),'022');
12 xstring(28,30,'K');xstring(56,30,'Plant');xstring(12,28.80,'-');
13 xtitle('PLANT   and   CONTROLLER')
14 mode(2)
15
16 x_message(['Mixed Sensitivity Controller Design';
17            'file: '+SCI+'/modules/cacsd/demos/mixed.dem'])
18 mode(1)
19 s=poly(0,'s');
20 str='[(s-1)/((s-1)^2*(s+2))]';
21 rep=x_dialog('Nominal plant?',str)
22 if rep==[] then return,end
23 Plant=evstr(rep);Plant=syslin('c',Plant);
24  //Nominal Plant
25 P22=tf2ss(Plant);    //...in state-space form
26 [ny,nu,nx]=size(P22);
27 [Pms,r]=augment(P22);
28 txt=['W1 (sensitivity function S)';'W2 (K*S)';'W3 (complementary sensitivity T)'];
29 default=['s';'1';'1'];
30 while %t
31   rep=x_mdialog('Set weighting functions',txt,default);
32   if rep==[] then return;end
33   W1=evstr(rep(1));W2=evstr(rep(2));W3=evstr(rep(3));
34   default=rep;
35   Pms=sysdiag(W1,W2,W3,eye(P22))*Pms;
36   gms=['gamma min= ';'gamma max= ';'# iterations'];
37   vals=['0.01';'1000';'50'];
38   reps=x_mdialog('Set interval for gamma and #iterations',gms,vals);
39   if reps==[] then return;end
40   mumin=1/evstr(reps(2))^2;
41   mumax=1/evstr(reps(1))^2;
42   iter=evstr(reps(3));
43   [K,mu]=h_inf(Pms,r,mumin,mumax,iter);
44   if K~=[] then break;end
45 end
46
47 disp(spec(h_cl(Pms,r,K)),'closed loop eigenvalues')    //Check internal stability
48 [Ssens,Rsens,Tsens]=sensi(P22,K);  //Sensitivity functions
49 x_message('Singular values plot')
50 fcts=['S function';'R (=K*S) function';'T function'];
51 www=x_mdialog('Select sensitivity function',fcts,['Yes';'No';'Yes']);
52 if www==[] then return,end
53
54 ww1=part(www(1),1)=='Y';
55 if ww1 then
56   scf(1);clf();xselect();
57   gainplot(Ssens);
58   xtitle('S = Sensitivity function');
59 end
60
61 ww2=part(www(2),1)=='Y';
62 if ww2 then
63   scf(2);clf();xselect();
64   gainplot(Rsens);
65   xtitle('R (=G*S) Sensitivity function');
66 end
67
68 ww3=part(www(3),1)=='Y';
69 if ww3 then
70   scf(3);clf();xselect();
71   gainplot(Tsens);
72   xtitle('T = Complementary Sensitivity function');
73 end