ss2ss 状態空間から状態空間への変換, フィードバック, 注入

## 呼出し手順

    [Sl1,right,left]=ss2ss(Sl,T, [F, [G , [flag]]])

## パラメータ

Sl

  状態空間形式の線形システム (`syslin` リスト)

T

  正方 (正則) 行列

Sl1, 右, 左

  状態空間形式の線形システム (syslin リスト)

F

  実数行列 (状態フィードバックゲイン)

G

  実数行列 (出力注入ゲイン)

## 説明

線形システム `Sl1=[A1,B1,C1,D1]` を返します. ただし, `A1=inv(T)*A*T, B1=inv(T)*B, C1=C*T, D1=D`.

オプションのパラメータ `F` および `G` は,それぞれ状態フィードバックおよび出力注入です.

例えば, `Sl1=ss2ss(Sl,T,F)` は,以下のような `Sl1` を返します:

`right` は,`Sl1=Sl*right`となる 正則な線形システムです.

`Sl1*inv(right)` は `Sl`の分解です.

`Sl1=ss2ss(Sl,T,0*F,G)` は以下のような `Sl1` を返します:

`left` は, `Sl1=left*Sl` (`right=Id`となる 正則な線形システムです. (`F=0`の場合に`right=Id`)

`F` および `G` の両方と指定した場合, `Sl1=left*Sl*right`となります.

- `flag` を使用し,`flag=1`の場合, 以下のような出力注入が使用されます.

  この後，フィードバックが行われ,`F`の 大きさは`(m+p,n)`となります.

  `right` および `left` は 以下の特徴を有します:

      Sl1 = left*blockdiag(sys,eye(p,p))*right

- `flag` を使用し, `flag=2` とした場合, フィードバック (`F` の大きさは `(m,n)`である必要があります)が行われ,その後, 上記の出力注入が適用されます. `right` および `left`は以下の特徴を有します:

       Sl1 = left*blockdiag(sys*right,eye(p,p)))

## 例

    Sl=ssrand(2,2,5); trzeros(Sl)       // zeros are invariant:
    Sl1=ss2ss(Sl,rand(5,5),rand(2,5),rand(5,2));
    trzeros(Sl1), trzeros(rand(2,2)*Sl1*rand(2,2))
    // output injection [ A + GC, (B+GD,-G)]
    //                  [   C   , (D   , 0)]
    p=1,m=2,n=2; sys=ssrand(p,m,n);
    // feedback (m,n)  first and then output injection.
    F1=rand(m,n);
    G=rand(n,p);
    [sys1,right,left]=ss2ss(sys,rand(n,n),F1,G,2);
    // Sl1 equiv left*blockdiag(sys*right,eye(p,p)))
    res=clean(ss2tf(sys1) - ss2tf(left*blockdiag(sys*right,eye(p,p))))
    // output injection then feedback (m+p,n)
    F2=rand(p,n); F=[F1;F2];
    [sys2,right,left]=ss2ss(sys,rand(n,n),F,G,1);
    // Sl1 equiv left*blockdiag(sys,eye(p,p))*right
    res=clean(ss2tf(sys2)-ss2tf(left*blockdiag(sys,eye(p,p))*right))
    // when F2= 0; sys1 and sys2 are the same
    F2=0*rand(p,n);F=[F1;F2];
    [sys2,right,left]=ss2ss(sys,rand(n,n),F,G,1);
    res=clean(ss2tf(sys2)-ss2tf(sys1))

## 参照

- projsl
- feedback