状態空間モデルで行列内の値を固定するには?

2 views (last 30 days)
状態空間モデルのパラメータ推定を行っています.
X'=AX+Bu
Y=CX+Du
において,
A=[0 1 0 0;NaN 0 NaN 0;0 0 0 1;NaN 0 NaN 0];
B=[0;NaN;0;0];
C=[1 0 0 0;0 0 1 0];
D=[0;0];
設定したモデルは上記の通りです.
NaN以外の行列の値を固定して,ssestなどを用いて値を推定したいのですが,その固定方法等がよくわかりません.
おそらくidssのstructureを使う様なのですが,例えば
m.Structure.A.Free(2,1) = false;
m.Structure.A.Value(2,2)
m.Structure.A.Free(2,3) = false;
m.Structure.A.Value(2,4)
のようにしても固定が出来ません.
どなたかご教授をお願いします.

Accepted Answer

Hiroumi Mita
Hiroumi Mita on 27 Dec 2019
状態空間内部の任意の箇所だけ推定するには
idgreyで設定し、pem等のシステム同定の関数を使います。
idgreyとそのサンプルをhelpで調べてみてください。
  1 Comment
Haruto Yamazaki
Haruto Yamazaki on 27 Dec 2019
ご回答ありがとうございます。
idgreyでは上記のサイトのConfigure Estimable Parameter of Grey-Box Model
を参考にしたのですが,
_____________________________________
エラー: idgrey (line 372)
指定されたパラメーター、サンプル時間およびオプション引数のセットを使用して ODE 関数 "LinearPendulum" を適切に評価で
きませんでした。評価中に次のエラー メッセージが生成されました:
入力引数が多すぎます。
________________________________
といったエラーが出てきてしまいます.
回答を頂きながらおこがましいのですが,
このエラーの原因を教えていただけないでしょうか。
以下,プログラムです.
_____________ODE_file________________
function [A,B,C,D] = LinearPendulum(a,b,c,d,e)
A=[0 1 0 0;a 0 b 0;0 0 0 1;c 0 d 0];
B=[0;e;0;0];
C=[1 0 0 0;0 0 1 0];
D=[0;0];
end
_____________command window____________
odefun = 'LinearPendulum' ;
a=1;
b=1;
c=1;
d=1;
e=1;
parameter={'data1',a;'data2',b;'data3',c;'data4',d;'data5',e};
fcn_type = 'c' ;
sys=idgrey(odefun,parameter,fcn_type);

Sign in to comment.

More Answers (1)

Hiroumi Mita
Hiroumi Mita on 27 Dec 2019
例題を見ると、
サンプル時間Tsが関数LinearPendulum
の引数に必要なようです。
function [A,B,C,D] = LinearPendulum(a,b,c,d,e,Ts) %<-ココ
A=[0 1 0 0;a 0 b 0;0 0 0 1;c 0 d 0 ];
B=[0;e;0;0 ];
C=[1 0 0 0;0 0 1 0 ];
D=[0;0 ];
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!