home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 7.ddi / ROBUST.DI$ / AUGSS.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  3.2 KB  |  106 lines

  1. function [a,b1,b2,c1,c2,d11,d12,d21,d22] = augss(Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10,Z11,Z12,Z13,Z14,Z15,Z16,Z17)
  2. %  [TSS_] = AUGSS(SS_G,SS_W1,SS_W2,SS_W3,W3POLY) or
  3. %  [A,B1,B2,C1,C2,D11,D12,D21,D22] = AUGSS(AG,BG,CG,DG,AW1,BW1,CW1,DW1,...
  4. %   AW2,BW2,CW2,DW2,AW2,BW3,CW3,DW3,W3POLY) computes the state-space model 
  5. %   of a plant augmented with weightings as follows:
  6. %
  7. %       W1 = ss_w1 = mksys(aw1,bw1,cw1,dw1); ---- on 'e', the error signal
  8. %       W2 = ss_w2 = mksys(aw2,bw2,cw2,dw2); ---- on 'u', the control signal.
  9. %       W3 = ss_w3 + w3poly ---- on 'y', the output signal
  10. %    where
  11. %       sysw3 = mksys(aw3,bw3,cw3,dw3);
  12. %       w3poly := polynomial-matrix in descending powers (optional input)
  13. %               = [w3(n),w3(n-1),...,w3(0)]
  14. %                 with size(w3(i))=size(dw3) for i=0,1,...,n.
  15. %
  16. %    (any of the above weightings can be removed by setting sysw1 or
  17. %     sysw2, sysw3 or w3poly equals to []).
  18. %
  19. %    The augmented system TSS_=mksys(A,B1,B2,C1,C2,D11,D12,D21,D22,'tss').
  20.  
  21. % R. Y. Chiang & M. G. Safonov 1/87
  22. % Copyright (c) 1988 by the MathWorks, Inc.
  23. % All Rights Reserved.
  24. % ------------------------------------------------------------------------
  25.  
  26. nag1 = nargin;
  27. inargs='(ag,bg,cg,dg,aw1,bw1,cw1,dw1,aw2,bw2,cw2,dw2,aw3,bw3,cw3,dw3,w3poly)';
  28. eval(mkargs(inargs,nag1,'ss'))
  29. nag1 = nargin; % NARGIN may have been changed.
  30.  
  31. %
  32. % ----- Peel off the state-space of G, W1, W2, W3:
  33. %
  34. xg = size(ag)*[1;0]; 
  35. xw1 = size(aw1)*[1;0]; xw2 = size(aw2)*[1;0]; xw3 = size(aw3)*[1;0];
  36. mg  = size(dg)*[1;0];  ng  = size(dg)*[0;1];
  37. mw1 = size(dw1)*[1;0]; nw1 = size(dw1)*[0;1];
  38. mw2 = size(dw2)*[1;0]; nw2 = size(dw2)*[0;1];
  39. mw3 = size(dw3)*[1;0]; nw3 = size(dw3)*[0;1];
  40. %
  41. % compute c-matrix cgb for w3poly(s)*G(s)
  42. % cgb = p(0)*cg+p(1)*cg*ag+...+p(n)*cg*ag^n
  43. %
  44. % compute d-matrix dgb for w3poly(s)*G(s)
  45. %
  46. if nag1 == 4 | nag1 == 16
  47.    cgb = zeros(mw3,xg);
  48.    dgb = zeros(mw3,ng);
  49. else
  50.    [mw3poly,nw3poly] = size(w3poly);
  51.    npoly = nw3poly/mg;
  52.    phi=cg;
  53.    temp=cg;
  54.    i = 1;
  55.    while i < npoly
  56.       temp=temp*ag;
  57.       phi=[temp;phi];
  58.       i = i+1;
  59.    end      
  60.    cgb=w3poly*phi;
  61.    phi=[phi*bg;dg]; 
  62.    phi=phi(mg+1:nw3poly+mg,:);
  63.    dgb=w3poly*phi;
  64.    i = 1;
  65.    while i < npoly             % check that w3poly(s)*G(s) is proper 
  66.      phi=[phi;zeros(mg,ng)];
  67.      phi=phi(1+mg:nw3poly+mg,:);
  68.      dofsi=w3poly*phi;
  69.      if norm(dofsi) ~= 0
  70.          disp('WARNING:  W3poly*G is not proper');
  71.          disp('Improper part being discarded');
  72.      end
  73.      i = i+1;
  74.    end           
  75. end
  76. %
  77. % ----- A matrix:
  78. %
  79. a = [ag zeros(xg,xw1+xw2+xw3);-bw1*cg aw1 zeros(xw1,xw2+xw3);....
  80.      zeros(xw2,xg+xw1) aw2 zeros(xw2,xw3);....
  81.      bw3*cg zeros(xw3,xw1+xw2) aw3];
  82. %
  83. % ----- B matrix:
  84. %
  85. b1 = [zeros(xg,mg);bw1;zeros(xw2+xw3,mg)];
  86. b2 = [bg;-bw1*dg;bw2;bw3*dg];
  87. %
  88. % ----- C matrix:
  89. %
  90. c1 = [-dw1*cg cw1 zeros(mw1,xw2+xw3);zeros(mw2,xg+xw1) cw2 zeros(mw2,xw3);...
  91.       cgb+dw3*cg zeros(mw3,xw1+xw2) cw3]; 
  92. c2 = [-cg zeros(mg,xw1+xw2+xw3)];
  93. %
  94. % ----- D matrix:
  95. %
  96. d11 = [dw1;zeros(mw2+mw3,mg)];
  97. d12 = [-dw1*dg;dw2;dgb+dw3*dg];           
  98. d21 = eye(mg);
  99. d22 = -dg;
  100. %
  101. if xsflag
  102.    a = mksys(a,b1,b2,c1,c2,d11,d12,d21,d22,'tss');
  103. end
  104. %
  105. % --------- End of AUGSS.M --- RYC/MGS 10/13/88%
  106.