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 > ddp

ddp

外乱デカップリング

呼び出し手順

[Closed,F,G]=ddp(Sys,zeroed,B1,D1)
[Closed,F,G]=ddp(Sys,zeroed,B1,D1,flag,alfa,beta)

パラメータ

Sys

行列 (A,B2,C,D2)を含むsyslin リスト

zeroed

整数ベクトル, ゼロ化するSysの出力の添え字.

B1

real matrix

D1

実数行列. B1 および D1 は同数の列を有します.

flag

文字列 'ge' または 'st' (デフォルト) または 'pp'.

alpha

実数または複素数のベクトル (閉ループ極の位置)

beta

r実数または複素数のベクトル (閉ループ極の位置)

説明

完全な外乱デカップリング(出力ゼロ化アルゴリズム). 線形システムとゼロ化する出力の部分集合 z を指定すると, wからzへの伝達関数がゼロとなるようなSysの入力wを 明らかにします. Sys は, 1入力,2出力の線形システム {A,B2,C,D2} ( すなわち Sys: u-->(z,y) ), Sys およびB1,D1で定義される以下のシステムの一部です:

xdot =  A x + B1  w + B2  u
   z = C1 x + D11 w + D12 u
   y = C2 x + D21 w + D22 u

Sysの出力は(z,y)に分割され,zはゼロ化されます. すなわち, 行列 CとD2は次のようになります:

C=[C1;C2]         D2=[D12;D22]
C1=C(zeroed,:)    D12=D2(zeroed,:)

行列 D1 は同様に D11=D1(zeroed,:)として D1=[D11;D21]のように分割されます. 制御則は u=Fx+Gw で, 閉ループシステム w-->z は以下のように定義されます.

xdot= (A+B2*F)  x + (B1 + B2*G) w
  z = (C1+D12F) x + (D11+D12*G) w

この式は,ゼロ伝達関数を有します.

flag='ge'は安定性拘束条件を有しません. flag='st' : 安定な閉ループシステムを探します (A+B2*F 安定). flag='pp' : A+B2*Fの固有値を alfa および betaに割付ます.

閉ループは閉ループしすてむw-->yの実現です.

xdot= (A+B2*F)  x + (B1 + B2*G) w
  y = (C2+D22*F) x + (D21+D22*G) w

安定性 (resp. 極配置) は(A,B2)が可安定(もしくは可制御性)であることを必要とします.

rand('seed',0);nx=6;nz=3;nu=2;ny=1;
A=diag(1:6);A(2,2)=-7;A(5,5)=-9;B2=[1,2;0,3;0,4;0,5;0,0;0,0];
C1=[zeros(nz,nz),eye(nz,nz)];D12=[0,1;0,2;0,3];
Sys12=syslin('c',A,B2,C1,D12);
C=[C1;rand(ny,nx)];D2=[D12;rand(ny,size(D12,2))];
Sys=syslin('c',A,B2,C,D2);
[A,B2,C1,D12]=abcd(Sys12);  //Sys12の行列.
my_alpha=-1;my_beta=-2;flag='ge';
[X,dims,F,U,k,Z]=abinv(Sys12,my_alpha,my_beta,flag);
clean(X'*(A+B2*F)*X)
clean(X'*B2*U)
clean((C1+D12*F)*X)
clean(D12*U);
//アドホックに B1,D1を計算
G1=rand(size(B2,2),3);
B1=-B2*G1;
D11=-D12*G1;
D1=[D11;rand(ny,size(B1,2))];

[Closed,F,G]=ddp(Sys,1:nz,B1,D1,'st',my_alpha,my_beta);
closed=syslin('c',A+B2*F,B1+B2*G,C1+D12*F,D11+D12*G);
ss2tf(closed)

参照

作者

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