ssrand 乱数生成器

## 呼び出し手順

    sl=ssrand(nout,nin,nstate)

                [sl,U]=ssrand(nout,nin,nstate,flag)

## 引数

nout

  整数 (出力の数)

nin

  整数 (入力の数)

nstate

  整数 (状態空間の次元)

flag

  1文字の文字列および 1つまたは複数の整数からなるリスト

sl

  リスト (`syslin` リスト)

U

  正方 `(nstate x nstate)` 非特異行列

## 説明

`sl=ssrand(nout,nin,nstate)` は, `syslin`リストで定義され, `nstate`個の状態変数を有する 大きさ `[nout,nint]`の 厳密にプロパー(`D=0`)でランダムな状態空間システム を返します.

`[sl,U]=ssrand(nout,nin,nstate,flag)` は `flag`で指定したプロパティを有する線形システムを 返します.`flag`は以下のどれかとすることができます:

    flag=list('co',dim_cont_subs)
    flag=list('uo',dim_unobs_subs)
    flag=list('ncno',dim_cno,dim_ncno,dim_co,dim_nco)
    flag=list('st',dim_cont_subs,dim_stab_subs,dim_stab0)
    flag=list('dt',dim_inst_unob,dim_instb0,dim_unobs)
    flag=list('on',nr,ng,ng0,nv,rk)
    flag=list('ui',nw,nwu,nwui,nwuis,rk)

`Sys`の完全な説明は, (`SCIDIR/macros/util`にある) `ssrand`関数の コード内に記述されています. 例えば, `flag=list('co',dim_cont_subs)` を指定すると, 可制御でないシステムが返され, `dim_cont_subs` は`Sys`の 可制御部分空間の次元となります. 文字列`'co','uo','ncno','st','dt','on','ui'` は "可制御(controllable)", "不可観測(unobservable)", "不可制御-不可観測(non-controllable-non-observable)", "可安定(stabilizable)","可検出(detectable)", "出力ゼロ化(output-nulling)","未知入力(unknown-input)" を意味します.

## 例

    //flag=list('st',dim_cont_subs,dim_stab_subs,dim_stab0)
    //dim_cont_subs<=dim_stab_subs<=dim_stab0
    //pair (A,B) U-similar to:
    //    [*,*,*,*;     [*;
    //    [0,s,*,*;     [0;
    //A=  [0,0,i,*;   B=[0;
    //    [0,0,0,u]     [0]
    //
    // (A11,B1) controllable  s=stable matrix i=neutral matrix u=unstable matrix
    [Sl,U]=ssrand(2,3,8,list('st',2,5,5));
    w=ss2ss(Sl,inv(U)); //undo the random change of basis => form as above
    [n,nc,u,sl]=st_ility(Sl);n,nc

## 参照

- syslin