function [sys,x0,str,ts] = lqjbse(t,x,u,flag,Ts,stru,nstep,qur,Rx,Sx) % % [sys,x0,str,ts] = lqjbse(t,x,u,flag,Ts,stru,nstep,qur) % global wjbm wjbs wjbds wjbqu wjbpr wjbstr wjbdnz wjbdon wjbhn wjbdn wjbhu; global wjbh wjbcl wjbdu wjbdx wjbnav wjbqdy wjbqss; if abs(flag) == 0 mv= (max(size(stru))-3)/2; l=0; nd=0;av=[]; for i=1:mv for j= 1: stru(2*i+3), av(l+j)=1e-6 ; end l=l+stru(2*i+3); nd=nd+stru(2*i+2); end wjbnav=l; wjbm=stru(1)+stru(2)+nd+1; th=.1*ones(1,wjbm); msR=length(Rx); msS=length(Sx); if msR > stru(1), error('incorrect dimension of fixed controller'); end if msS > stru(2)+1, error('incorrect dimension of fixed controller'); end [wjbpr,wjbstr]= th2prei(stru,th,av); [wjbdnz,wjbdon]= makedv(wjbpr); [wjbs,wjbds] = makese(wjbstr,1000); wjbqu=zeros(1,wjbm+2);wjbqdy=zeros(1,wjbm+2); wjbxx=zeros(1,wjbm+2); wjbqu(1)=1; wjbqu(wjbm+2)=-1; wjbqdy(stru(1)+1)=1; wjbqss=wjbqu;wjbqss(1:msR) = Rx;wjbqu(1)=1; wjbqss(stru(1)+1: stru(1)+msS-1) =Sx(2:msS); wjbqss(wjbm-1)= - sum(Sx); wjbh=wjbs*wjbpr; [mm,nn]= size(wjbh); wjbhn= zeros(mm+1,nn); wjbdn=eye(mm+1); [wjbhu,wjbcl,hxx,wjbdu,wjbdx]= decomie(wjbstr,wjbhn,wjbdn); x=zeros(1,wjbm); x0= x; sys=[0 wjbm wjbm+2 (wjbm +wjbnav) 0 0 1]; ts=[Ts 0]; elseif abs(flag) == 2 sys= u(1:wjbm); elseif flag == 3 rtth2pre(wjbpr,wjbstr,u(1:wjbm),u(wjbm+1:wjbm+wjbnav),stru); for j=1:nstep rtmultp(wjbh,wjbs,wjbpr,wjbdnz,wjbdon); rtrefor(wjbh,wjbds,wjbhn,wjbdn); wjbxx=[u(1:wjbm)' -1 0];qux=qur(1); rtreduc(wjbhn,wjbdn,wjbxx,qux); wjbxx=wjbqu;qux=qur(2); wjbxx(1)=wjbqu(1); rtreduc(wjbhn,wjbdn,wjbxx,qux); wjbxx=wjbqss; wjbxx(1)=wjbqss(1);qux=qur(3); %pen S/R rtreduc(wjbhn,wjbdn,wjbxx,qux); rtdecom(wjbhn,wjbdn,wjbhu,wjbcl,wjbs,wjbdu,wjbds); end; sys = wjbcl ; else sys=[]; end