# findx0BD

状態量,離散時間システムのBおよびD行列を推定

## 呼び出し手順

    [X0,B,D] = findx0BD(A,C,Y,U,WITHX0,WITHD,TOL,PRINTW)
                [x0,B,D,V,rcnd] = findx0BD(A,C,Y,U)

## パラメータ

A

  システムの状態行列

C

  システムのC行列

Y

  システム出力

U

  システム入力

WITHX0

  状態量の初期値 x0 の推定に関するスイッチ.

  =

    1: x0を推定します;

  =

    0: x0を推定しません.

  デフォルト: WITHX0 = 1.

WITHD

  行列 Dの推定に関するスイッチ.

  =

    1: 行列Dを推定します;

  =

    0: 行列Dを推定しません.

  デフォルト: WITHD = 1.

TOL

  行列のランクを推定する際の許容誤差.TOL > 0 の場合,TOLに指定した値が 条件数の逆数の下界として使用されます. デフォルト: prod(size(matrix))*epsilon_machine ただし, epsilon_machine は相対機械精度です.

PRINTW

  警告メッセージの出力に関するスイッチ.

  =

    1: 警告メッセージを出力;

  =

    0: 警告メッセージを出力しない.

  デフォルト: PRINTW = 0.

X0

  推定された線形システムの状態量の初期値.

B

  推定された線形システムのB行列.

D

  推定された線形システムのD行列.

V

  状態行列Aを実数Schur形式に縮減する直交行列

rcnd

  ランク決定に関連する行列の条件数の逆数を推定します.

## 説明

findx0BD は, (推定された)システム行列 A, C および入出力データを指定し, 状態量の初期値と離散時間システムのBおよびD行列を推定します.

[X0,B,D] = findx0BD(A,C,Y,U,WITHX0,WITHD,TOL,PRINTW) は, システム行列 A, C 出力データ Yおよび入力データ U を用いて, 状態量初期値 X0 および離散時間システムの行列 B および D を推定します. モデルの構造は以下のようになります :

    x(k+1) = Ax(k) + Bu(k),   k >= 1,
    y(k)   = Cx(k) + Du(k),

ベクトル y(k) および u(k) それぞれ Y および U のk行目の転置です.

[x0,B,D,V,rcnd] = findx0BD(A,C,Y,U) は,システム状態行列 A を実数 Schur 形式に縮減する 直交行列 V も返します. 同時にランク決定に関連する行列の条件数の逆数の推定値も返します.

        B = findx0BD(A,C,Y,U,0,0)   は B のみを返し,
    [B,D] = findx0BD(A,C,Y,U,0)    は B および D のみを返します.

## 例

    //指定した線形システムからデータを生成
    A = [ 0.5, 0.1,-0.1, 0.2;
          0.1, 0,  -0.1,-0.1;
         -0.4,-0.6,-0.7,-0.1;
          0.8, 0,  -0.6,-0.6];
    B = [0.8;0.1;1;-1];
    C = [1 2 -1 0];
    SYS=syslin(0.1,A,B,C);
    nsmp=100;
    U=prbs_a(nsmp,nsmp/5);
    Y=(flts(U,SYS)+0.3*rand(1,nsmp,'normal'));

    // Rを計算
    S=15;L=1;
    [R,N,SVAL] = findR(S,Y',U');

    N=3;
    METH=3;TOL=-1;
    [A,C] = findAC(S,N,L,R,METH,TOL);

    [X0,B,D,V,rcnd] = findx0BD(A,C,Y',U');
    SYS1=syslin(1,A,B,C,D,X0);

    Y1=flts(U,SYS1);
    clf();plot2d((1:nsmp)',[Y',Y1'])

## 参照

- findBD
- inistate