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).
R はkernel(C)の中の
Sys の可制御な最大部分空間です.
X の最初のdimVg列は,
SysのVg=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) の組は可制御で,
B11 は nu-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参照).
Z はSys の列圧縮です.
k はSysのランク,
すなわち, Sys*Zは列圧縮された線形システムとなります.
k は
B42,B52,B62 と D2の列の次元です.
[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))
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'))
| Report an issue | ||
| << Controllability Observability | Controllability Observability | cainv >> |