abinv — AB invariant subspace
[X,dims,F,U,k,Z]=abinv(Sys,alpha,beta,flag)
syslin
list containing the matrices [A,B,C,D]
.
(optional) real number or vector (possibly complex, location of closed loop poles)
(optional) real number or vector (possibly complex, location of closed loop poles)
(optional) character string 'ge'
(default) or 'st'
or 'pp'
orthogonal matrix of size nx (dim of state space).
integer row vector dims=[dimR,dimVg,dimV,noc,nos]
with dimR<=dimVg<=dimV<=noc<=nos
. If flag='st'
, (resp. 'pp'
), dims
has 4 (resp. 3) components.
real matrix (state feedback)
integer (normal rank of Sys
)
non-singular linear system (syslin
list)
Output nulling subspace (maximal unobservable subspace) for
Sys
= linear system defined by a syslin list containing
the matrices [A,B,C,D] of Sys
.
The vector dims=[dimR,dimVg,dimV,noc,nos]
gives the dimensions
of subspaces defined as columns of X
according to partition given
below.
The dimV
first columns of X
i.e V=X(:,1:dimV)
,
span the AB-invariant subspace of Sys
i.e the unobservable subspace of
(A+B*F,C+D*F)
. (dimV=nx
iff C^(-1)(D)=X
).
The dimR
first columns of X
i.e. R=X(:,1:dimR)
spans
the controllable part of Sys
in V
, (dimR<=dimV)
. (dimR=0
for a left invertible system). R
is the maximal controllability
subspace of Sys
in kernel(C)
.
The dimVg
first columns of X
spans
Vg
=maximal AB-stabilizable subspace of Sys
. (dimR<=dimVg<=dimV)
.
F
is a decoupling feedback: for X=[V,X2] (X2=X(:,dimV+1:nx))
one has
X2'*(A+B*F)*V=0 and (C+D*F)*V=0
.
The zeros od Sys
are given by : X0=X(:,dimR+1:dimV); spec(X0'*(A+B*F)*X0)
i.e. there are dimV-dimR
closed-loop fixed modes.
If the optional parameter alpha
is given as input,
the dimR
controllable modes of (A+BF)
in V
are set to alpha
(or to [alpha(1), alpha(2), ...]
.
(alpha
can be a vector (real or complex pairs) or a (real) number).
Default value alpha=-1
.
If the optional real parameter beta
is given as input,
the noc-dimV
controllable modes of (A+BF)
"outside" V
are set to beta
(or [beta(1),beta(2),...]
). Default value beta=-1
.
In the X,U
bases, the matrices
[X'*(A+B*F)*X,X'*B*U;(C+D*F)*X,D*U]
are displayed as follows:
[A11,*,*,*,*,*] [B11 * ] [0,A22,*,*,*,*] [0 * ] [0,0,A33,*,*,*] [0 * ] [0,0,0,A44,*,*] [0 B42] [0,0,0,0,A55,*] [0 0 ] [0,0,0,0,0,A66] [0 0 ] [0,0,0,*,*,*] [0 D2]
where the X-partitioning is defined by dims
and
the U-partitioning is defined by k
.
A11
is (dimR x dimR)
and has its eigenvalues set to alpha(i)'s
.
The pair (A11,B11)
is controllable and B11
has nu-k
columns.
A22
is a stable (dimVg-dimR x dimVg-dimR)
matrix.
A33
is an unstable (dimV-dimVg x dimV-dimVg)
matrix (see st_ility
).
A44
is (noc-dimV x noc-dimV)
and has its eigenvalues set to beta(i)'s
.
The pair (A44,B42)
is controllable.
A55
is a stable (nos-noc x nos-noc)
matrix.
A66
is an unstable (nx-nos x nx-nos)
matrix (see st_ility
).
Z
is a column compression of Sys
and k
is
the normal rank of Sys
i.e Sys*Z
is a column-compressed linear
system. k
is the column dimensions of B42,B52,B62
and D2
.
[B42;B52;B62;D2]
is full column rank and has rank k
.
If flag='st'
is given, a five blocks partition of the matrices is
returned and dims
has four components. If flag='pp'
is
given a four blocks partition is returned. In case flag='ge'
one has
dims=[dimR,dimVg,dimV,dimV+nc2,dimV+ns2]
where nc2
(resp. ns2
) is the dimension of the controllable (resp.
stabilizable) pair (A44,B42)
(resp. ([A44,*;0,A55],[B42;0])
).
In case flag='st'
one has dims=[dimR,dimVg,dimVg+nc,dimVg+ns]
and in case flag='pp'
one has dims=[dimR,dimR+nc,dimR+ns]
.
nc
(resp. ns
) is here the dimension of the controllable
(resp. stabilizable) subspace of the blocks 3 to 6 (resp. 2 to 6).
This function can be used for the (exact) disturbance decoupling problem.
DDPS: Find u=Fx+Rd=[F,R]*[x;d] which rejects Q*d and stabilizes the plant: xdot = Ax+Bu+Qd y = Cx+Du+Td DDPS has a solution if Im(Q) is included in Vg + Im(B) and stabilizability assumption is satisfied. Let G=(X(:,dimVg+1:$))'= left annihilator of Vg i.e. G*Vg=0; B2=G*B; Q2=G*Q; DDPS solvable iff [B2;D]*R + [Q2;T] =0 has a solution. The pair F,R is the solution (with F=output of abinv). Im(Q2) is in Im(B2) means row-compression of B2=>row-compression of Q2 Then C*[(sI-A-B*F)^(-1)+D]*(Q+B*R) =0 (<=>G*(Q+B*R)=0)
nu=3;ny=4;nx=7; nrt=2;ngt=3;ng0=3;nvt=5;rk=2; flag=list('on',nrt,ngt,ng0,nvt,rk); Sys=ssrand(ny,nu,nx,flag);my_alpha=-1;my_beta=-2; [X,dims,F,U,k,Z]=abinv(Sys,my_alpha,my_beta); [A,B,C,D]=abcd(Sys);dimV=dims(3);dimR=dims(1); V=X(:,1:dimV);X2=X(:,dimV+1:nx); X2'*(A+B*F)*V (C+D*F)*V X0=X(:,dimR+1:dimV); spec(X0'*(A+B*F)*X0) trzeros(Sys) spec(A+B*F) //nr=2 evals at -1 and noc-dimV=2 evals at -2. clean(ss2tf(Sys*Z)) // 2nd Example nx=6;ny=3;nu=2; A=diag(1:6);A(2,2)=-7;A(5,5)=-9;B=[1,2;0,3;0,4;0,5;0,0;0,0]; C=[zeros(ny,ny),eye(ny,ny)];D=[0,1;0,2;0,3]; sl=syslin('c',A,B,C,D);//sl=ss2ss(sl,rand(6,6))*rand(2,2); [A,B,C,D]=abcd(sl); //The matrices of sl. my_alpha=-1;my_beta=-2; [X,dims,F,U,k,Z]=abinv(sl,my_alpha,my_beta);dimVg=dims(2); clean(X'*(A+B*F)*X) clean(X'*B*U) clean((C+D*F)*X) clean(D*U) G=(X(:,dimVg+1:$))'; B2=G*B;nd=3; R=rand(nu,nd);Q2T=-[B2;D]*R; p=size(G,1);Q2=Q2T(1:p,:);T=Q2T(p+1:$,:); Q=G\Q2; //a valid [Q;T] since [G*B;D]*R + [G*Q;T] // is zero closed=syslin('c',A+B*F,Q+B*R,C+D*F,T+D*R); // closed loop: d-->y ss2tf(closed) // Closed loop is zero spec(closed('A')) //The plant is not stabilizable! [ns,nc,W,sl1]=st_ility(sl); [A,B,C,D]=abcd(sl1);A=A(1:ns,1:ns);B=B(1:ns,:);C=C(:,1:ns); slnew=syslin('c',A,B,C,D); //Now stabilizable //Fnew=stabil(slnew('A'),slnew('B'),-11); //slnew('A')=slnew('A')+slnew('B')*Fnew; //slnew('C')=slnew('C')+slnew('D')*Fnew; [X,dims,F,U,k,Z]=abinv(slnew,my_alpha,my_beta);dimVg=dims(2); [A,B,C,D]=abcd(slnew); G=(X(:,dimVg+1:$))'; B2=G*B;nd=3; R=rand(nu,nd);Q2T=-[B2;D]*R; p=size(G,1);Q2=Q2T(1:p,:);T=Q2T(p+1:$,:); Q=G\Q2; //a valid [Q;T] since [G*B;D]*R + [G*Q;T] // is zero closed=syslin('c',A+B*F,Q+B*R,C+D*F,T+D*R); // closed loop: d-->y ss2tf(closed) // Closed loop is zero spec(closed('A'))