# cainv

abinvの双対

## 呼び出し手順

    [X,dims,J,Y,k,Z]=cainv(Sl,alfa,beta,flag)

## パラメータ

Sl

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

alfa

  実数の数値またはベクトル (複素数となる場合もある,閉ループ極の位置)

beta

  実数の数値またはベクトル (複素数となる場合もある,閉ループ極の位置)

flag

  (オプションの) 文字列 `'ge'` (default)または `'st'` または `'pp'`

X

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

dims

  整数行ベクトル `dims=[nd1,nu1,dimS,dimSg,dimN]` (5エントリ , 非降順). `flag='st'` (もしくは`'pp'`)の場合, `dims` は 4 (もしくは3)個の要素を有します.

J

  実数行列 (出力)

Y

  大きさnyの直交行列 (出力空間の次元).

k

  整数 (`Sl`のランク)

Z

  正則な線形システム (`syslin` リスト)

## 説明

`cainv` は (状態空間および出力状態応答の)基底 `(X,Y)`を見つけます. 基底を (X,Y)とする行列 Slは以下のように表示されます:

                   [A11,*,*,*,*,*]                [*]
                   [0,A22,*,*,*,*]                [*]
    X'*(A+J*C)*X = [0,0,A33,*,*,*]   X'*(B+J*D) = [*]
                   [0,0,0,A44,*,*]                [0]
                   [0,0,0,0,A55,*]                [0]
                   [0,0,0,0,0,A66]                [0]

           Y*C*X = [0,0,C13,*,*,*]          Y*D = [*]
                   [0,0,0,0,0,C26]                [0]

The partition of `X`の分割は ベクトル`dims=[nd1,nu1,dimS,dimSg,dimN]`により定義され, `Y`の分割は`k`により定義されます.

`A11``(nd1 x nd1)` の固有値は不安定です. `A22` `(nu1-nd1 x nu1-nd1)`の固有値は安定です.

対 `(A33, C13)` `(dimS-nu1 x dimS-nu1, k x dimS-nu1)`は 可観測, `A33`の固有値は `alfa`に設定されます.

行列 `A44` `(dimSg-dimS x dimSg-dimS)` は不安定です. 行列 `A55` `(dimN-dimSg,dimN-dimSg)` は安定です.

対 `(A66,C26)` `(nx-dimN x nx-dimN)` は可観測, `A66`の固有値は`beta`に設定されます.

`X`の最初の`dimS`列は, Im(B)を含む不変部分空間 S= smallest (C,A) に広がり, `X`の最初の`dimSg`列は, `Sl`の最大"相補可検出部分空間" Sg に広がります.

`X`の最初の`dimN`列は, `Sl` の最大"相補可観測部分空間"に広がります. (B(ker(D))=0の場合,`dimS=0`)

`flag='st'` が指定された場合, 5個の分割ブロック行列が返され, `dims`は4つの要素を有します. `flag='pp'`が指定された場合, 4個の分割ブロックが返されます(abinv参照).

この関数は次のように未知入力オブザーバを計算する際に使用することができます:

    // DDEP: dot(x)=A x + Bu + Gd
    //           y= Cx   (observation)
    //           z= Hx    (z=variable to be estimated, d=disturbance)
    //  Find: dot(w) = Fw + Ey + Ru such that
    //          zhat = Mw + Ny
    //           z-Hx goes to zero at infinity
    //  Solution exists iff Ker H contains Sg(A,C,G) inter KerC (assuming detectability)
    //i.e. H is such that:
    // For any W which makes a column compression of [Xp(1:dimSg,:);C]
    // with Xp=X' and [X,dims,J,Y,k,Z]=cainv(syslin('c',A,G,C));
    // [Xp(1:dimSg,:);C]*W = [0 | *] one has
    // H*W = [0 | *]  (with at least as many aero columns as above).

## 参照

- abinv
- dt_ility
- ui_observer