# ui_observer

未知入力オブザーバ

## 呼出し手順

    [UIobs,J,N]=ui_observer(Sys,reject,C1,D1)
                [UIobs,J,N]=ui_observer(Sys,reject,C1,D1,flag,alfa,beta)

## パラメータ

Sys

  行列 `(A,B,C2,D2)`を含む`syslin`リスト.

reject

  整数ベクトル, `Sys` の未知入力の添え字.

C1

  実数行列

D1

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

flag

  文字列 `'ge'` または `'st'` (default) または `'pp'`.

alfa

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

beta

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

## 説明

未知入力オブザーバ.

`Sys: (w,u) --> y` は, 2つの入力 w および u を有する `(A,B,C2,D2)` syslin 線形システムです. ただし, w は未知入力です. Sys の行列 B および D2 は (暗黙のうちに) 次のように分割されます: `B=[B1,B2]` および `D2=[D21,D22]` ただし,`B1=B(:,reject)` および `D21=D2(:,reject)` で, reject = 未知入力の添え字. 行列 `C1` および`D1` は， 推定対象の出力 `z = C1 x + D1 (w,u)` を定義します.

行列 `D1` は (暗黙のうちに) `D11=D(:,reject)` として `D1=[D11,D12]` のように分割されます

データ (Sys, reject,C1, D1) は次の2入力2出力システムを定義します:

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

オブザーバ `(u,y) --> zhat` は 出力 z を推定します.

`flag='ge'` 安定性拘束なし `flag='st'` 安定なオブザーバ (デフォルト) `flag='pp'` 極配置を指定するオブザーバ alfa,beta = 閉ループ極の指定位置 (デフォルト -1, -2) J=出力yから状態xへの注入. N=出力yから推定値出力zへの注入.

UIobs = 線形システム (u,y) --> zhat ただし: 伝達関数: (w,u) --> z は以下の複合伝達関数と等しくなります: [0,I; UIobs Sys] (w,u) -----> (u,y) -----> zhat すなわち, システム {A,B,C1,D1} の伝達関数は `UIobs*[0,I; Sys]`と等価になります

安定性 (または極配置) は(A,C2)の可検出性 (または可観測性) を要求します .

## 例

    A=diag([3,-3,7,4,-4,8]);
    B=[eye(3,3);zeros(3,3)];
    C=[0,0,1,2,3,4;0,0,0,0,0,1];
    D=[1,2,3;0,0,0];
    rand('seed',0);w=ss2ss(syslin('c',A,B,C,D),rand(6,6));
    [A,B,C,D]=abcd(w);
    B=[B,matrix(1:18,6,3)];D=[D,matrix(-(1:6),2,3)];
    reject=1:3;
    Sys=syslin('c',A,B,C,D);
    N1=[-2,-3];C1=-N1*C;D1=-N1*D;
    nw=length(reject);nu=size(Sys('B'),2)-nw;
    ny=size(Sys('C'),1);nz=size(C1,1);
    [UIobs,J,N]=ui_observer(Sys,reject,C1,D1);

    W=[zeros(nu,nw),eye(nu,nu);Sys];UIobsW=UIobs*W;
    //(w,u) --> z=UIobs*[0,I;Sys](w,u)
    clean(ss2tf(UIobsW));
    wu_to_z=syslin('c',A,B,C1,D1);clean(ss2tf(wu_to_z));
    clean(ss2tf(wu_to_z)-ss2tf(UIobsW),1.d-7)
    /////2nd example//////
    nx=2;ny=3;nwu=2;Sys=ssrand(ny,nwu,nx);
    C1=rand(1,nx);D1=[0,1];
    UIobs=ui_observer(Sys,1,C1,D1);

## 参照

- cainv
- ddp
- abinv