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

  1. function [a11h,b1h,c1h,d1h,a22h,b2h,c2h,d2h,m] = stabproj(Z1,Z2,Z3,Z4)
  2. % [SS_1,SS_2,M] = STABPROJ(SS_) or
  3. % [A11H,B1H,C1H,D1H,A22H,B2H,C2H,D2H,M] = STABPROJ(A,B,C,D) produces
  4. %     a decomposition of G(s) as the sum of its stable part G1(s) and
  5. %     its antistable part G2(s) where
  6. %                  G(s):= ss_ = mksys(a,b,c,d);
  7. %                  G1(s):= ss_1 = mksys(a11h,b1h,c1h,d1h);
  8. %                  G2(s):= ss_2 = mksys(a22h,b2h,c2h,d2h);
  9. %
  10. %  The regular state-space can be recovered by "branch".
  11.  
  12. % R. Y. Chiang & M. G. Safonov 7/85
  13. % Copyright (c) 1988 by the MathWorks, Inc.
  14. % All Rights Reserved.
  15.  
  16. inargs = '(a,b,c,d)';
  17. eval(mkargs(inargs,nargin,'ss'))
  18.  
  19. [ra,ca] = size(a);
  20. [rd,cd] = size(d);
  21. %
  22. % ----- Real Schur Decomposition :
  23. %
  24. [u,t,m] = blkrsch(a,1);
  25. %
  26. kk = -1;
  27. if m == 0.
  28.   a22h = a; b2h = b; c2h = c; d2h = d;
  29.   a11h = zeros(ra); b1h = zeros(ra,cd); c1h = zeros(rd,ca); d1h = zeros(rd,cd);
  30.   kk = 1;
  31. end
  32. if m == ra
  33.   a11h = a; b1h = b; c1h = c; d1h = zeros(rd,cd);
  34.   a22h = zeros(ra);  b2h = zeros(ra,cd); c2h = zeros(rd,ca); d2h = d;
  35.   kk = 1;
  36. end
  37. if kk < 0
  38.     a11h = t(1:m,1:m); 
  39.     a22h = t(m+1:ra,m+1:ra);
  40.     a12h = t(1:m,m+1:ra);
  41.     v1 = u(:,1:m); v2 = u(:,m+1:ra);
  42.     x = lyap(a11h,-a22h,a12h);
  43.     t1 = v1;
  44.     t2 = v1 * x + v2;
  45.     s1 = v1' - x * v2';
  46.     s2 = v2';
  47.     b1h = s1 * b;    b2h = s2 * b;
  48.     c1h = c * t1;    c2h = c * t2;
  49.     [rb1h,cb1h] = size(b1h);
  50.     [rc1h,cc1h] = size(c1h);
  51.     d1h = zeros(rc1h,cb1h);    d2h = d;
  52. end
  53. %
  54. if xsflag
  55.    a11h = mksys(a11h,b1h,c1h,d1h);
  56.    b1h = mksys(a22h,b2h,c2h,d2h);
  57.    c1h = m;
  58. end
  59. %
  60. % ------ End of STABPROJ.M ---- RYC/MGS 7/85 %
  61.