www.gusucode.com > rctobsolete 工具箱 matlab源码程序 > rctobsolete/mutools/subs/hinffi_t.m

    %-------------------------------------------------------------------
%
%	[p,q12,r12,fail] = hinffi_t(p,ncon)
%
%	scale the d12 matrix to satisfy the formulas
%	and check the rank conditions for full info case.
%
%	written:	Gary Balas      July, 1990.
%
% full info case:
%
%       p  =  | ap  | b1   b2  |
%             | ---------------|
%             | c1  | d11  d12 |
%
% with assumed c2, d21 and d22 :
%             | [I] | [0]  [0] |
%             | [0] | [I]  [0] |
%
%------------------------------------------------------------------

%   Copyright 1991-2004 MUSYN Inc. and The MathWorks, Inc.

function [p,q12,r12,fail] = hinffi_t(p,ncon)

fail = 0;
[ap,bp,cp,dp,b1,b2,c1,d11,d12,ndata] = hinffi_p(p,ncon);
np1 = ndata(1);
np2 = ndata(2);
nm1 = ndata(3);
nm2 = ndata(4);
%
% determine if   |A-jwI  b2 | has full column rank at w=0
%                |  c1   d12|
%
tmp_col=[ap b2;c1 d12];
[nr,nc]=size(tmp_col);
irank = rank(tmp_col,eps);
% irank = nc;
 if irank ~= nc
  fprintf('\n')
  disp('*  [a b2;c1 d12] does not have full column rank at s=0 ')
   fail = 1;
   return
 end
%
%  scale the matrices to    q12*d12*r12 = | 0 |
%                                         | I |
%
[q12,r12] = qr(d12);
%
% determine if d12 has full column rank
%
irank = rank(r12,eps);
 if irank ~= nm2
   disp('  d12 does not have full column rank  ')
   fail = 1;
   return
 end
q12 = [q12(:,(nm2+1):np1),q12(:,1:nm2)]';
r12 = inv(r12(1:nm2,:));

c1 = q12*c1;
cp = [c1];
b2 = b2*r12;
bp = [b1,b2];
d11 = q12*d11;
d12 = q12*d12*r12;
dp = [d11 d12];
p = pck(ap,bp,cp,dp);

%---------------------------------------------------------------
%
%