- Scilab Help
- CACSD (Computer Aided Control Systems Design)
- Formal representations and conversions
- Plot and display
- abinv
- arhnk
- arl2
- arma
- arma2p
- arma2ss
- armac
- armax
- armax1
- arsimul
- augment
- balreal
- bilin
- bstap
- cainv
- calfrq
- canon
- ccontrg
- cls2dls
- colinout
- colregul
- cont_mat
- contr
- contrss
- copfac
- csim
- ctr_gram
- damp
- dcf
- ddp
- dhinf
- dhnorm
- dscr
- dsimul
- dt_ility
- dtsi
- equil
- equil1
- feedback
- findABCD
- findAC
- findBD
- findBDK
- findR
- findx0BD
- flts
- fourplan
- freq
- freson
- fspec
- fspecg
- fstabst
- g_margin
- gamitg
- gcare
- gfare
- gfrancis
- gtild
- h2norm
- h_cl
- h_inf
- h_inf_st
- h_norm
- hankelsv
- hinf
- imrep2ss
- inistate
- invsyslin
- kpure
- krac2
- lcf
- leqr
- lft
- lin
- linf
- linfn
- linmeq
- lqe
- lqg
- lqg2stan
- lqg_ltr
- lqr
- ltitr
- macglov
- minreal
- minss
- mucomp
- narsimul
- nehari
- noisegen
- nyquistfrequencybounds
- obs_gram
- obscont
- observer
- obsv_mat
- obsvss
- p_margin
- parrot
- pfss
- phasemag
- plzr
- pol2des
- ppol
- prbs_a
- projsl
- repfreq
- ric_desc
- ricc
- riccati
- routh_t
- rowinout
- rowregul
- rtitr
- sensi
- sident
- sorder
- specfact
- ssprint
- st_ility
- stabil
- sysfact
- syslin
- syssize
- time_id
- trzeros
- ui_observer
- unobs
- zeropen
Please note that the recommended version of Scilab is 2026.0.0. This page might be outdated.
See the recommended documentation of this function
abinv
AB invariant subspace
Calling Sequence
[X,dims,F,U,k,Z]=abinv(Sys,alpha,beta,flag)
Arguments
- Sys
syslinlist containing the matrices[A,B,C,D].- alpha
(optional) real number or vector (possibly complex, location of closed loop poles)
- beta
(optional) real number or vector (possibly complex, location of closed loop poles)
- flag
(optional) character string
'ge'(default) or'st'or'pp'- X
orthogonal matrix of size nx (dim of state space).
- dims
integer row vector
dims=[dimR,dimVg,dimV,noc,nos]withdimR<=dimVg<=dimV<=noc<=nos. Ifflag='st', (resp.'pp'),dimshas 4 (resp. 3) components.- F
real matrix (state feedback)
- k
integer (normal rank of
Sys)- Z
non-singular linear system (
syslinlist)
Description
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)
Examples
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))
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'))
See Also
| Report an issue | ||
| << Plot and display | CACSD (Computer Aided Control Systems Design) | arhnk >> |