- Scilabヘルプ
- CACSD
- 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 2025.0.0. This page might be outdated.
See the recommended documentation of this function
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 | ||
<< Plot and display | CACSD | arhnk >> |