www.gusucode.com > 预览控件工具箱 > 预览控件工具箱/预览控件工具箱/PCT/@PrevDistRejSys/ComputeBX.m
function [BX]=ComputeBX(P,N,gam) % BX=ComputeBX(P,N,gam) % % Computes B'X. Used as a helper function for MkHinfPrevK rep=0; if N<1 error('PrevTools:ntoosmall','Need N>0') end [ng,p,qg,l,m]=Getsz(P.GW); lw=P.lw; lr=P.lr; nwr=P.nwr; nps=N*lr; [Ar,Br,Cr,Dr]=ssdata(P.Wr); [A1prev,B1prev,R1prev,L1prev,Q1prev]=GetSSb(SetN(P,1),gam); hs=1:ng+lr; gs=[1+lr:lr+lw+m]; Ahk=A1prev(hs,hs); Bhk=[B1prev(1:ng,gs); zeros(lr,m+lw)]; Qhk=Q1prev(hs,hs); Lhk=L1prev(hs,gs); Rhk=R1prev(gs,gs); Ar=A1prev(end-nwr+1:end,end-nwr+1:end); BpCr=A1prev(1:end-nwr,end-nwr+1:end); BtilNm1=B1prev(end-nwr-lr+1:end,:); tic Lambdak=zeros(lw+m,ng); betahk=eye(ng); Psibgk=zeros(ng);%DEBUGGING for k=1:N-1 Bhkm1=Bhk; [Ahk,Bhk,Qhk,Rhk,Lhk,Hhk,T1hk]=Reduce(P,Ahk,Bhk,Qhk,Rhk,Lhk,ng,lr,nwr); Hh11k=Hhk(1:ng,1:ng); Hh12k=Hhk(1:ng,1+ng:ng+lr); Lambdak=[Lambdak+Bhkm1(1:ng,:)'*Hh11k*betahk', Bhkm1(1:ng,:)'*Hh12k]; Psibgk=[Psibgk+betahk(1:ng,:)*Hh11k*betahk', betahk(1:ng,:)*Hh12k];%DEBUGGING T11hk=T1hk(1:ng,:); T12hk=T1hk(ng+1:ng+lr,:); betahk=[betahk*T11hk;T12hk]; end ANm1=[Ahk BpCr;zeros(nwr,ng+lr) Ar]; BNm1=[zeros(ng,lr) Bhk(1:ng,:);BtilNm1]; QNm1=[Qhk zeros(ng+lr,nwr);zeros(nwr,nwr+ng+lr)]; RNm1=[ -eye(lr)*gam^2 zeros(lr,m+lw);zeros(m+lw,lr) Rhk]; LNm1=[zeros(ng+lr,lr) Lhk;zeros(nwr,m+lw+lr)]; %LambdaNm1=[Lambdak zeros(lw+m,nwr+lr)]; %betaNm1=[betahk zeros(ng+nps-lr,nwr+lr);zeros(nwr+lr,ng) eye(nwr+lr)]; [AN,BN,QN,RN,LN,HNm1,T1Nm1]=ReduceFull(P,ANm1,BNm1,QNm1,RNm1,LNm1,ng,lr,nwr); Hh11Nm1=HNm1(1:ng,1:ng); Hh12Nm1=HNm1(1:ng,1+ng:ng+lr); Hh22Nm1=HNm1(1+ng:ng+lr,1+ng:ng+lr); LambdaN=[Lambdak+Bhk(1:ng,:)'*Hh11Nm1*betahk', Bhk(1:ng,:)'*Hh12Nm1]; T11hNm1=T1Nm1(1:ng,1:ng); T12hNm1=T1Nm1(ng+1:ng+lr,1:ng); betahN=[betahk*T11hNm1;T12hNm1]; betaN=[betahN zeros(ng+nps,nwr);zeros(nwr,ng) eye(nwr)]; try XN=dare(AN,BN,QN,RN,LN); catch error('PrevTools:XNm1compfailed','Failed to compute XNm1 during reduction algorithm') end BX=[Dr'*Hh12Nm1'*betahk' , Dr'*Hh22Nm1, zeros(lr,nwr);LambdaN zeros(lw+m,nwr)]+BN'*XN*betaN'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5