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

  1. %
  2. % 4-block H-inf problem
  3. %
  4.  
  5. % R. Y. Chiang & M. G. Safonov 8/85
  6. % Copyright (c) 1988 by the MathWorks, Inc.
  7. % All Rights Reserved.
  8. % ----------------------------------------------------------------
  9. disp('  ')
  10. disp('      << Working on Phase III: Interpolation problem >>')
  11. disp('  ')
  12. disp('  4-block H-inf problem (HKL4: T21 nonsquare, T12 nonsquare)')
  13. disp('  ')
  14. disp('             ..... Working ..... Please wait .....')
  15. if MRtype == 2
  16.    flagtol = exist('tol');
  17.    if flagtol < 1
  18.       tol = input('Input error bound for model reduction: ');
  19.    end
  20.    no = tol;
  21. end
  22. seraug = [MRtype no];
  23. [ag1,bg1,cg1,dg1,hsvg1] = sershbl(-at2p',-ct2p',...
  24.                    bt2p',dt2p', at11,bt11,ct11,dt11,seraug);
  25. [rrg1,rrg1] = size(ag1);
  26. if rrg1 > twoN
  27.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  28.    disp('                 RESULTS MAY BE INCORRECT !!')
  29. end
  30. [ah1,bh1,ch1,dh1,hsvh1] = sershbl(-at21',-ct21',bt21',...
  31.                    dt21', at11,bt11,ct11,dt11,seraug);
  32. [rrh1,rrh1] = size(ah1);
  33. if rrh1 > twoN
  34.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  35.    disp('                 RESULTS MAY BE INCORRECT !!')
  36. end
  37. [am1,bm1,cm1,dm1] = sfr(ag1,bg1,cg1,dg1);
  38. [aj,bj,cj,dj,hsvj] = sershbl(at12,bt12,ct12,dt12,...
  39.                    am1-bm1*inv(dm1)*cm1,-bm1*inv(dm1),...
  40.                    inv(dm1)*cm1,inv(dm1),seraug);
  41. [rrj,rrj] = size(aj);
  42. if rrj > twoN
  43.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  44.    disp('                 RESULTS MAY BE INCORRECT !!')
  45. end
  46. %
  47. % ------ Inner-outer factorization:
  48. %
  49. [jin,jinp,jout,dimj] = iofr(aj,bj,cj,dj);
  50. [ath,bth,cth,dth] = sys2ss(jin,dimj(1,1));
  51. [athp,bthp,cthp,dthp] = sys2ss(jinp,dimj(1,2));
  52. [am3,bm3,cm3,dm3] = sys2ss(jout,dimj(1,3));
  53. %
  54. [aag2,bbg2,ccg2,ddg2,hsvgg2] = sershbl(ah1,bh1,ch1,dh1,...
  55.         am1-bm1*inv(dm1)*cm1,-bm1*inv(dm1),inv(dm1)*cm1,inv(dm1),seraug);
  56. [rrag2,rrag2] = size(aag2);
  57. if rrag2 > twoN
  58.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  59.    disp('                 RESULTS MAY BE INCORRECT !!')
  60. end
  61. [ag2,bg2,cg2,dg2,hsvg2] = sershbl(aag2,bbg2,ccg2,ddg2,...
  62.                        -athp',-cthp',bthp',dthp',seraug);
  63. [rrg2,rrg2] = size(ag2);
  64. if rrg2 > twoN
  65.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  66.    disp('                 RESULTS MAY BE INCORRECT !!')
  67. end
  68. [am2,bm2,cm2,dm2] = sfl(ag2,bg2,cg2,dg2);
  69. [ahhh,bhhh,chhh,dhhh,hsvhhh] = sershbl(...
  70.                    am2-bm2*inv(dm2)*cm2,-bm2*inv(dm2),...
  71.                    inv(dm2)*cm2,inv(dm2), ah1,bh1,ch1,dh1,seraug);
  72. [rrhhh,rrhhh] = size(ahhh);
  73. if rrhhh > twoN
  74.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  75.    disp('                 RESULTS MAY BE INCORRECT !!')
  76. end
  77. [ahh,bhh,chh,dhh,hsvhh] = sershbl(ahhh,bhhh,chhh,dhhh,...
  78.         am1-bm1*inv(dm1)*cm1,-bm1*inv(dm1),inv(dm1)*cm1,inv(dm1),seraug);
  79. [rrhh,rrhh] = size(ahh);
  80. if rrhh > twoN
  81.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  82.    disp('                 RESULTS MAY BE INCORRECT !!')
  83. end
  84. [ahtl,bhtl,chtl,dhtl,hsvhtl] = sershbl(ahh,bhh,chh,dhh,...
  85.                               -ath',-cth',bth',dth',seraug);
  86. [rrhtl,rrhtl] = size(ahtl);
  87. if rrhtl > twoN
  88.    disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  89.    disp('                 RESULTS MAY BE INCORRECT !!')
  90. end
  91. //
  92. //  IV). Zeroth order Hankel Approximation:
  93. //
  94. [a11h,B1h,C1h,d1h,a22h,B2h,C2h,d2h,msat] = stabproj(...
  95.                                      -ahtl',-chtl',bhtl',dhtl');
  96. [ay,by,cy,dy,ayu,byu,cyu,dyu,aughsv] = ohkapp(a11h,B1h,C1h,d1h,1,0);
  97. hsvmx = aughsv(1,1)
  98. if aughsv(1,1) <= 1.0
  99.          [axt1,bxt1,cxt1,dxt1] = addss(ayu,byu,cyu,dyu,a22h,B2h,C2h,d2h);
  100.          [mahtl,nahtl] = size(ahtl);
  101.          if msat == mahtl
  102.             axt1 = ayu; bxt1 = byu; cxt1 = cyu; dxt1 = dyu+d2h;
  103.          end 
  104.          axtl = -axt1';
  105.          bxtl = -cxt1';
  106.          cxtl =  bxt1';
  107.          dxtl =  dxt1';
  108.          [aqq,bqq,cqq,dqq,hsvqq] = sershbl(am2,bm2,cm2,dm2,...
  109.                              axtl,bxtl,cxtl,dxtl,seraug);
  110.          [rrqq,rrqq] = size(aqq);
  111.          if rrqq > twoN
  112.             disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  113.             disp('                 RESULTS MAY BE INCORRECT !!')
  114.          end
  115.          [aq,bq,cq,dq,hsvq] = sershbl(aqq,bqq,-cqq,-dqq,...
  116.                         am3-bm3*inv(dm3)*cm3,-bm3*inv(dm3),...
  117.                         inv(dm3)*cm3,inv(dm3),seraug);
  118.          [raq,caq] = size(aq);
  119.          if raq > twoN
  120.             disp('- - - - WARNING: THERE ARE STATES MORE THAN 2N ...')
  121.             disp('                 RESULTS MAY BE INCORRECT !!')
  122.          end
  123.          [rdq,cdq] = size(dq);
  124.          [rC2,cC2] = size(C2);
  125.          [rf,cf]   = size(f);
  126.          [rh,ch]   = size(h);
  127.          bqq = -bq * inv(ml);
  128.          cqq = inv(mr) * cq;
  129.          dqq = -inv(mr) * dq * inv(ml);
  130.          dq22 = inv([eye(rdq) -D22;-dqq eye(rdq)]);
  131.          cq22 = [C2+D22*f zeros(rC2,caq);zeros(rdq,cC2) cqq];
  132.          bq2h = [h B2;bqq zeros(raq,rf)];
  133.          acp  = [at12 zeros(cf,caq);zeros(raq,cf) aq] + ...
  134.                  bq2h * dq22 * cq22;
  135.          bcp  = -bq2h*dq22 * [eye(rdq);zeros(rdq)];
  136.          ccp  = [f zeros(rf,caq)] + [zeros(rf,cdq) eye(rf)] * ...
  137.                  dq22 * cq22;
  138.          dcp  = -dqq * inv(eye(rdq)-D22*dqq);
  139.          acl  = [at12 bt12*dq*ct21-B2*f bt12*cq;...
  140.                  zeros(rat0,cat1) at21 zeros(rat0,caq);...
  141.                  zeros(raq,cat1) bq*ct21 aq];
  142.          bcl  = [bt12*dq*dt21+B1;bt21;bq*dt21];
  143.          ccl  = [ct12 dt12*dq*ct21-D12*f dt12*cq];
  144.          dcl  = dt11+dt12*dq*dt21;
  145.          disp('  ')
  146.          disp('  ')
  147.          disp(' ----------------------------------------------------------');
  148.          disp('   LINF computation is done .....');
  149.          disp('      state-space of the controller: (acp,bcp,ccp,dcp)');
  150.          disp('      state-space of the CLTF Ty1u1: (acl,bcl,ccl,dcl)');
  151.          disp('   Plots of S & (I-S) problem ---> run script file: pltopt');
  152.          disp(' ----------------------------------------------------------');
  153. else
  154.          disp('  ')
  155.          disp('  ')
  156.          disp(' ----------------------------------------------------------');
  157.          disp('    NO STABILIZING CONTROLLER MEETS THE SPEC. !!')
  158.          disp('    ADJUST "Gam" AND REDO PHASE I, II AND III.')
  159.          disp(' ----------------------------------------------------------');
  160. end
  161. %
  162. % ------ End of HKL4.M ---- RYC/MGS %