# findR

線形時不変システムの行列を指定する際のプリプロセッサ

## 呼び出し手順

    [R,N [,SVAL,RCND]] = findR(S,Y,U,METH,ALG,JOBD,TOL,PRINTW)
                [R,N] = findR(S,Y)

## パラメータ

S

  ブロックハンケル行列のブロック行の数.

Y

U

METH

  使用する手法に関するオプション:

  1

    過去の入力/出力に基づく MOESP 法;

  2

    N4SI15 0 1 1 1000D 法.

  デフォルト: METH = 1.

ALG

  入出力データから構築される 結合ブロックハンケル行列の三角分解を計算するアルゴリズムに関するオプション:

  1

    相関行列のコレスキーアルゴリズム;

  2

    高速 QR アルゴリズム;

  3

    標準 QR アルゴリズム.

  デフォルト: ALG = 1.

JOBD

  行列BおよびDをMOESP法により計算するかどうかを指定するオプション:

  =

    1 : 行列BおよびDをMOESP法により計算します;

  =

    2 : 行列BおよびDをMOESP法により計算しません.

  デフォルト: JOBD = 2. このパラメータは METH = 2に関連してはいません.

TOL

  許容誤差を含む長さ2のベクトル:

  TOL

    (1) は行列のランクを推定する際の許容誤差です. TOL(1) > 0 の場合,TOL(1)に指定した値が 条件数の逆数の下界として使用されます.

    デフォルト: TOL(1) = prod(size(matrix))*epsilon_machine ただし, epsilon_machine は相対機械精度です.

  TOL

    (2) はシステム次数を推定する際の許容誤差です. TOL(2) >= 0の場合, 推定値の添え字はTOL(2)以上となる最後の特異値を指します. (TOL(2)より小さい特異値はゼロとみなされます.)

    TOL(2) = 0の場合, TOL(2)の替わりにS*epsilon_machine*sval(1)が使用されます. ただし,sval(1)は最小特異値です. TOL(2) < 0の場合, 推定値の添え字は,次の要素への指数的な間隔が 最大となる特異値の添え字を指します. デフォルト: TOL(2) = -1.

PRINTW

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

  =

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

  =

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

  デフォルト: PRINTW = 0.

R

N

  離散時間実現の次数

SVAL

  特異値 SVAL, 次数の推定に使用されます.

RCND

  ランク決定または最小二乗解に関連する行列の条件数の逆数を含む 長さ2のベクトル.

## 説明

findR は,コレスキーまたは(高速)QR分解および 部分空間同定法(MOESP または N4SID) 線形時不変システムの行列を推定する際の 入出力データの前処理を行い,システム次数を指定します.

[R,N] = findR(S,Y,U,METH,ALG,JOBD,TOL,PRINTW) は, 入出力データおよび離散時間実現の次数Nから構築された 結合ブロックハンケル行列の 上三角分解 R を返します. モデルの構造は次のようになります:

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

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

[R,N,SVAL,RCND] = findR(S,Y,U,METH,ALG,JOBD,TOL,PRINTW) は, 次数の推定に使用される 特異値 SVAL も返します. meth = 2 の時に長さ2のベクトルRCNDも返します. このベクトルRCNDには, ランク決定または最小二乗解に関連する条件数の逆数を含みます．

[R,N] = findR(S,Y) は U = [] , 残りの入力引数にはデフォルト値を仮定します.

## 例

    //指定した線形システムからデータを生成
    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);
    U=(ones(1,1000)+rand(1,1000,'normal'));
    Y=(flts(U,SYS)+0.5*rand(1,1000,'normal'));
    // Rを計算

    [R,N,SVAL] = findR(15,Y',U');
    SVAL
    N

## 参照

- findABCD
- findAC
- findBD
- findBDK
- sorder
- sident