Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português -

Please note that the recommended version of Scilab is 6.0.1. This page might be outdated.
See the recommended documentation of this function

Scilab help >> CACSD > abinv

abinv

AB 不変部分空間

呼び出し手順

[X,dims,F,U,k,Z]=abinv(Sys,alpha,beta,flag)

パラメータ

Sys

行列[A,B,C,D]を含む syslin リスト.

alpha

(オプション) 実数の数値またはベクトル (複素数の可能性もある閉ループ極の位置)

beta

(オプション) 実数の数値またはベクトル (複素数の可能性もある閉ループ極の位置)

flag

(オプション) 文字列 'ge' (デフォルト) または 'st' または 'pp'

X

大きさ nx (状態空間の次元) の直交行列.

dims

dimR<=dimVg<=dimV<=noc<=nosとなる 整数行ベクトル dims=[dimR,dimVg,dimV,noc,nos]. flag='st'の場合, (resp. 'pp'), dims は 4 (resp. 3) 個の要素となる.

F

実数行列 (状態フィードバック)

k

整数 (Sysのノーマルランク)

Z

特異でない線形システム (syslin リスト)

説明

Sysの行列[A,B,C,D]を含む Sys = syslinリストで定義された線形システム に関する出力ゼロ部分空間 (不可観測となる最大部分空間). ベクトル dims=[dimR,dimVg,dimV,noc,nos] は 以下の区分に基づき Xの列で定義される部分空間の次元を出力します. Xの最初のdimV列,すなわち, V=X(:,1:dimV)SysのAB不変な部分空間 すなわち, (A+B*F,C+D*F)の不可観測な部分空間に 広がっています. (C^(-1)(D)=Xの時に限り,dimV=nx).

Xの最初のdimR 列, すなわち R=X(:,1:dimR)は, V, (dimR<=dimV)の中の Sysの可制御部を含んでいます. (左可逆システムの場合,dimR=0). Rkernel(C)の中の Sys の可制御な最大部分空間です.

X の最初のdimVg列は, SysVg=AB-最大可安定部分空間 に広がっています.

Fは非干渉化フィードバックです: X=[V,X2] (X2=X(:,dimV+1:nx)) について, X2'*(A+B*F)*V=0 および (C+D*F)*V=0が満たされます.

Sys のゼロは以下のように取得できます : X0=X(:,dimR+1:dimV); spec(X0'*(A+B*F)*X0) すなわち, dimV-dimR 個の閉ループ固定モードがあります.

オプションのパラメータ alpha が入力として指定された場合, dimR個のVに含まれる (A+BF)の可制御モードがalpha (または[alpha(1), alpha(2), ...])に設定されます. (alpha はベクトル (実数または複素数の組) または (実数の) 数値とすることができます). デフォルト値は alpha=-1です.

オプションの実数パラメータIr beta が入力に指定された場合, noc-dimV 個のV"以外の"(A+BF)の 可制御モードがbeta (または[beta(1),beta(2),...])に設定されます. デフォルト値は beta=-1です.

X,U に基づくと, 行列 [X'*(A+B*F)*X,X'*B*U;(C+D*F)*X,D*U] は以下のように表示されます:

[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]

ただし,Xの分割はdimsで定義され, Uの分割はkで定義されます.

A11(dimR x dimR) 次で, alpha(i)'sの固有値を有しています. (A11,B11) の組は可制御で, B11nu-k 列です. A22 は安定な (dimVg-dimR x dimVg-dimR) 次の行列です. A33 は不安定な (dimV-dimVg x dimV-dimVg) 行列です (st_ility参照).

A44(noc-dimV x noc-dimV) 次であり, その固有値はbeta(i)となります. (A44,B42) は可制御です. A55 は安定な (nos-noc x nos-noc) 次の行列となります. A66 は不安定な (nx-nos x nx-nos)次の行列 (st_ility参照).

ZSys の列圧縮です. kSysのランク, すなわち, Sys*Zは列圧縮された線形システムとなります. kB42,B52,B62D2の列の次元です. [B42;B52;B62;D2] は列フルランクでランク kを有しています.

flag='st' が指定された場合, 行列の5個のブロック区画が返され,dimsは4個の要素を有します. flag='pp' が指定された場合, 5個のブロック区画が返されます. flag='ge' の場合, dims=[dimR,dimVg,dimV,dimV+nc2,dimV+ns2] となります. ここで where nc2 (resp. ns2) は可制御 (resp. stabilizable)対 (A44,B42) (resp. ([A44,*;0,A55],[B42;0]))の次元です. flag='st'の場合, dims=[dimR,dimVg,dimVg+nc,dimVg+ns]となり, flag='pp'の場合, dims=[dimR,dimR+nc,dimR+ns]となります. nc (resp. ns) は ブロック数3から6(resp. 2 to 6)の 可制御(resp. stabilizable) 部分空間の次元です.

この関数は(正確な)外乱非干渉化問題に使用することができます.

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

Im(Q)Vg + Im(B),DDPS ,.

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.

G=(X(:,dimVg+1:$))'= Vg,  G*Vg=0 ,
B2=G*B; Q2=G*Q; DDPS ,
[B2;D]*R + [Q2;T] =0.

 F,R  (F=abinv).

Im(B2)Im(Q2),B2=>Q2.
, 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'))

作者

F.D.

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Mar 03 11:00:53 CET 2011