<< findBD Identification findR >>

Scilab Help >> CACSD > Identification > findBDK

findBDK

カルマンゲインおよび離散時間システムの B, D システム行列

呼び出し手順

[B,D,K] = findBDK(S,N,L,R,A,C,METH,JOB,NSMPL,TOL,PRINTW)
[B,D,RCND] = findBDK(S,N,L,R,A,C,METH,JOB)
[B,D,K,Q,Ry,S,RCND] = findBDK(S,N,L,R,A,C,METH,JOB,NSMPL,TOL,PRINTW)

パラメータs

S

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

N

整数

L

整数

R

行列, findR をコールすることにより計算される結合されたブロックハンケル行列の R因子に関係する部分

A

正方行列

C

行列

METH

整数, 使用する方法に関するオプション

= 1

過去の入力と出力を指定するMOESP法;

= 2

N4SID 法;

デフォルト: METH = 2.

JOB

計算するシステム行列の種類を指定するオプション:

= 1

B行列を計算;

= 2

BおよびD行列を計算.

デフォルト: JOB = 2.

NSMPL

整数, 共分散行列およびカルマン予測ゲインを計算する際に使用される サンプルの総数. このパラメータは,共分散行列とカルマン予測ゲインが必要ない 場合には,不要です.NSMPL = 0の場合, K, Q, Ry, および S は計算されません. デフォルト: NSMPL = 0.

TOL

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

PRINTW

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

PRINTW

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

PRINTW

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

デフォルト: PRINTW = 0.

SYS

状態空間実現 SYS = (A,B,C,D) (syslin オブジェクト)を計算

K

カルマン予測ゲイン K (NSMPL > 0の場合)

Q

状態量共分散

Ry

出力共分散

S

状態出力相互共分散

RCND

長さ12のベクトルで, ランク決定, 最小二乗またはリカッチ方程式の解に関わる行列の条件数の逆数が含まれます.

説明

システムの次数,行列AおよびCおよび関連する 結合ブロックハンケル行列のR因子を指定すると, 部分空間同定法 (MOESP または N4SID) により, 離散時間システムのシステム行列BおよびDとカルマンゲインを返します.

findR により計算される行列 Rは, 適当な引数 METH および JOBDで定義されます. findR ではMETH = 1かつJOBD = 1,findBDKではMETH = 1を使用しますす. FINDR では METH = 1, findBDK では METH = 2 を使用することができます.

出力引数の数は変換しますが,次のように入力引数に対応します,

B = findBDK(S,N,L,R,A,C,METH,1)  
[B,D] = findBDK(S,N,L,R,A,C,METH,2)  
[B,D,RCND] = findBDK(S,N,L,R,A,C,METH,2)

//指定した線形システムからデータを生成
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);
[B,D,K] = findBDK(S,N,L,R,A,C);
SYS1=syslin(1,A,B,C,D);
SYS1.X0 = inistate(SYS1,Y',U');
Y1=flts(U,SYS1);
clf();plot2d((1:nsmp)',[Y',Y1'])

参照


Report an issue
<< findBD Identification findR >>