www.gusucode.com > 预览控件工具箱 > 预览控件工具箱/预览控件工具箱/PCT/@PrevDistRejSys/private/ReduceFull.m

    
%*************************************************************
function [Akp1,Bkp1,Qkp1,Rkp1,Lkp1,Hk,T1]=ReduceFull(P,Ak,Bk,Qk,Rk,Lk,ng,lr,nwr)
nk=size(Ak,1);
hs=1:ng+lr;
%gs=[lr+1:end];
Ahk=Ak(hs,hs);
Bhgk=[Bk(1:ng+lr,lr+1:end)];
Qhk=Qk(hs,hs);
Lhgk=Lk(hs,lr+1:end);
Rgk=Rk(lr+1:end,lr+1:end);
U=null([Ahk Bhgk;Lhgk' Rgk]);

try
	U=U(:,1:lr); % just use lr cols of null space
catch
	error('PrevTools:nullspacecompfailed','Failed to compute null space during reduction algorithm')
end

[u,s,v]=svd(U(1:ng+lr,:),0);
P=v*inv(s);
T2b=u;
T1b=null(T2b');

T1=[T1b,zeros(ng+lr,nk-lr-ng);zeros(nk-ng-lr,ng) eye(nk-lr-ng)];
T2=[T2b;zeros(nk-ng-lr,lr)];
W=[zeros(lr,lr) ;U(1+ng+lr:end,:)*P];
V=Qk*T2+Lk*W;
Hk=T2*V'*T1*T1'+V*T2';


Qkp1=T1'*Qk*T1+T1'*Ak'*Hk*Ak*T1;
Rkp1=Rk+Bk'*Hk*Bk;
Lkp1=T1'*Lk+T1'*Ak'*Hk*Bk;
Akp1=T1'*Ak*T1;
Bkp1=T1'*Bk;