diff options
Diffstat (limited to 'modules/cacsd/demos/mixed.dem')
-rwxr-xr-x | modules/cacsd/demos/mixed.dem | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/modules/cacsd/demos/mixed.dem b/modules/cacsd/demos/mixed.dem new file mode 100755 index 000000000..26db4f7f9 --- /dev/null +++ b/modules/cacsd/demos/mixed.dem @@ -0,0 +1,87 @@ +// +// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab +// Copyright (C) ????-2008 - INRIA +// +// This file is distributed under the same license as the Scilab package. +// + +function demo_mixed() + mode(-1) + lines(0); + //display the diagram + x=[5,10,20,40,50,70,80,90];xmin=-10;xmax=100; + y=[22,28,30,32];ymin=12;ymax=40; + + 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])]; + 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])]; + + scf(100001);clf();show_window(); + plot2d(xx,yy,ones(1,16),'022'); + xstring(28,30,'K');xstring(56,30,'Plant');xstring(12,28.80,'-'); + xtitle('PLANT and CONTROLLER') + mode(2) + + path=get_absolute_file_path('mixed.dem'); + messagebox(['Mixed Sensitivity Controller Design'; + 'file: '+path+'mixed.dem'],"modal"); + mode(1) + s=poly(0,'s'); + str='[(s-1)/((s-1)^2*(s+2))]'; + rep=x_dialog('Nominal plant?',str) + 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 + + disp(spec(h_cl(Pms,r,K)),'closed loop eigenvalues') //Check internal stability + [Ssens,Rsens,Tsens]=sensi(P22,K); //Sensitivity functions + messagebox('Singular values plot',"modal"); + 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 + scf(100002);clf();show_window(); + gainplot(Ssens); + xtitle('S = Sensitivity function'); + end + + ww2=part(www(2),1)=='Y'; + if ww2 then + scf(100003);clf();show_window(); + gainplot(Rsens); + xtitle('R (=G*S) Sensitivity function'); + end + + ww3=part(www(3),1)=='Y'; + if ww3 then + scf(100004);clf();show_window(); + gainplot(Tsens); + xtitle('T = Complementary Sensitivity function'); + end + +endfunction + +demo_mixed(); +clear demo_mixed; |