Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

sim

同定されたモデルの応答のシミュレーション

説明

y = sim(sys,udata) は、入力データ udata を使用して、同定されたモデルのシミュレートされた応答を返します。udatatimetable、数値行列、または iddata オブジェクトにすることができます。

既定では、モデルの内部に格納された初期状態が使用される idnlgrey を除いて、すべてのモデル タイプでゼロの初期状態が使用されます。

y = sim(sys,udata,opt) はオプション セット opt を使用して、初期状態の仕様などのシミュレーション オプションを構成します。

[y,y_sd] = sim(___) は、シミュレートされた応答の推定標準偏差 y_sd を返します。

[y,y_sd,x] = sim(___) は、状態空間モデルの状態軌跡 x を返します。

[y,y_sd,x,x_sd] = sim(___) は、状態空間モデルの状態軌跡の標準偏差 x_sd を返します。

sim(___) は同定されたモデルのシミュレートされた応答をプロットします。

すべて折りたたむ

推定データを読み込みます。

load sdata2 tt2

3 次状態空間モデルを推定します。

sys = ssest(tt2,3);

推定データから入力チャネルを使用して同定されたモデルをシミュレートします。

y = sim(sys,tt2);

データを読み込み、同定されたモデルを取得します。

load sdata2 tt2
sys = n4sid(tt2,3);

sys は、部分空間法を使用して推定された 3 次状態空間モデルです。

シミュレーション オプション セットを作成して、ノイズをシミュレートされたモデル応答に追加します。

opt1 = simOptions('AddNoise',true);

モデルのシミュレーションを実行します。

y = sim(sys,tt2,opt1);

既定のガウス ホワイト ノイズは、モデルのノイズ伝達関数によってフィルター処理され、シミュレートされたモデル応答に追加されます。

NoiseData オプションを使用して、独自のノイズ信号 e を追加することもできます。

e = randn(length(tt2.u),1);
opt2 = simOptions('AddNoise',true,'NoiseData',e);

モデルのシミュレーションを実行します。

y = sim(sys,tt2,opt2);

データを読み込みます。

load sdata1 umat1 ymat1 Ts

推定オプションを指定して初期状態を推定します。

estimOpt = ssestOptions('InitialState','estimate');

状態空間モデルを推定し、推定された初期状態の値を返します。

[sys,x0] = ssest(umat1,ymat1,2,'Ts',Ts,estimOpt);

シミュレーションの初期状態を指定します。

simOpt = simOptions('InitialCondition',x0);

モデルをシミュレートし、モデル応答および標準偏差を取得します。

[y,y_sd] = sim(sys,umat1,simOpt);

推定データを読み込み、状態空間モデルを推定します。

load iddata1 z1
sys = ssest(z1,2);

標準偏差および状態軌跡を返します。

[y,y_sd,x] = sim(sys,z1);

推定データを読み込み、状態空間モデルを推定します。

load sdata1 umat1 ymat1 Ts
sys = ssest(umat1,ymat1,2,'Ts',Ts);

シミュレーション オプション セットを作成し、初期状態を指定します。

opt = simOptions('InitialCondition',[1;2]);

初期状態の共分散を指定します。

opt.X0Covariance = [0.1 0; 0 0.1];

シミュレートされた応答の標準偏差 y_sd および状態軌跡 x_sd を計算します。

[y,y_sd,x,x_sd] = sim(sys,umat1,opt);

同定されたモデルを取得します。

load sdata2 tt2
sys = tfest(tt2,3);

sys は、測定されたデータ tt2 に対して推定された 3 次伝達関数をカプセル化する idtf モデルです。

モデルのシミュレーションを実行します。

sim(sys,tt2)

Figure contains an axes object. The axes object with title y contains an object of type line. This object represents sys.

入力レベルを 1、出力レベルを 10 とし、既知の平衡点に基づいて単入力単出力の非線形 ARX モデルをシミュレートします。

サンプル データを読み込みます。

load iddata2

データから非線形 ARX モデルを推定します。

M = nlarx(z2,[2 2 1],'idTreePartition');

過去のデータに基づいて、モデルの現在の状態を推定します。入力変数と出力変数内のラグ数 (ここでは 2) と同じ数の過去のサンプルを指定します。

x0 = data2state(M,struct('Input',ones(2,1),'Output',10*ones(2,1)));

data2state で返された初期状態を使用してモデルをシミュレートします。

opt = simOptions('InitialCondition',x0);
sim(M,z2,opt)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents M.

前のシミュレーション実行の最後から非線形 ARX モデルのシミュレーションを続行します。

データから非線形 ARX モデルを推定します。

load iddata2
M = nlarx(z2,[2 2 1],idTreePartition);

入力データ z2 の最初の半分を使用してモデルをシミュレートします。ゼロの初期状態からシミュレーションを開始します。

u1 = z2(1:200,[]); 
opt1 = simOptions('InitialCondition','zero');
ys1 = sim(M,u1,opt1);

入力データ z2 の後ろの半分を使用して別のシミュレーションを開始します。最初のシミュレーションの最後からモデルの同じ状態を使用します。

u2 = z2(201:end,[]);

2 番目のシミュレーションの初期状態を正しく設定するには、最初のシミュレーションの入力 u1 と出力 ys1 を 1 つの iddata オブジェクトにパッケージ化します。このデータを次のシミュレーションの初期状態として渡します。

firstSimData = [ys1,u1];
opt2 = simOptions('InitialCondition',firstSimData);
ys2 = sim(M,u2,opt2);

すべての入力データ z2 を使用して完全なシミュレーションと比較して、2 つのシミュレーションを検証します。まず、入力データのセット全体を抽出します。

uTotal = z2(:,[]); 
opt3 = simOptions('InitialCondition','zero'); 
ysTotal = sim(M,uTotal,opt3);

3 つの応答 ys1ys2、および ysTotal をプロットします。ys1ysTotal の最初の半分と等しくなっているはずです。ys2ysTotal の後ろの半分と等しくなっているはずです。

plot(ys1,'b',ys2,'g',ysTotal,'k*')

Figure contains an axes object. The axes object with title y1 contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent M.

プロットでは、3 つの応答 ys1ys2、および ysTotal が期待どおりにオーバーラップしていることが示されています。

応答がデータ セット z2 の出力に最も一致するようにモデル M の初期状態を推定します。

サンプル データを読み込みます。

load iddata2;

データから非線形 ARX モデルを推定します。

M = nlarx(z2,[4 3 2],idWaveletNetwork('NumberOfUnits',20));

シミュレートされた応答で z2.y に最も適合するように M の初期状態を推定します。

x0 = findstates(M,z2,Inf);

モデルのシミュレーションを実行します。

opt = simOptions('InitialCondition',x0);
ysim = sim(M,z2.u,opt);

シミュレートされたモデル出力 ysimz2 の出力信号と比較します。

time = z2.SamplingInstants;
plot(time,ysim,time,z2.y,'.')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

入力が 1 であるとわかっているが、出力が不明な場合に、定常状態に近いモデルのシミュレーションを開始します。

サンプル データを読み込みます。

load iddata2

データから非線形 ARX モデルを推定します。

M = nlarx(z2,[4 3 2],idWaveletNetwork);

入力 1 および不明なターゲット出力の平衡状態値を求めます。

x0 = findop(M,'steady',1, NaN);

初期状態 x0 を使用してモデルをシミュレートします。

opt = simOptions('InitialCondition',x0);
sim(M,z2.u,opt)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents M.

サンプル データを読み込みます。

load iddata2

Hammerstein-Wiener モデルを作成します。

M = nlhw(z2,[4 3 2],[],idPiecewiseLinear);

入力レベル 1 および不明な出力レベルに対応する定常状態の操作点の値を計算します。

x0 = findop(M,'steady',1,NaN);

推定初期状態を使用してモデルをシミュレートします。

opt = simOptions('InitialCondition',x0);
sim(M,z2.u)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents M.

時系列データを読み込み、最小二乗法を使用して AR モデルを推定します。

load iddata9 z9
sys = ar(z9,6,'ls');

時系列データでは、"N" 行 0 列の入力データ セットを使用して目的のシミュレーションの長さ "N" = 200 を指定します。

data = iddata([],zeros(200,0),z9.Ts);

履歴出力サンプルとして時系列の初期サンプルを使用するように初期状態を設定します。

IC = struct('Input',[],'Output',z9.y(1:6));
opt = simOptions('InitialCondition',IC);

モデルのシミュレーションを実行します。

sim(sys,data,opt)

Figure contains an axes object. The axes object with title y1 contains an object of type line. This object represents sys.

モデルをシミュレートする際に初期状態の代わりとして履歴入出力データを使用します。最初に sim コマンドを使用してシミュレートし、simOptions オプション セットを使用して履歴データを指定します。その後、履歴データを初期状態に手動でマッピングしてシミュレートされた出力を再現します。

2 入力 1 出力のデータ セットを読み込みます。

load iddata7 z7

データを使用して 5 次状態空間モデルを同定します。

sys = n4sid(z7,5);

データ セットを 2 つの部分に分けます。

zA = z7(1:15);
zB = z7(16:end);

zB の入力信号を使用してモデルをシミュレートします。

uSim = zB;

シミュレーショでは初期状態が必要です。zA の信号値は履歴データです。つまり、zB のすぐ前の時点におけるデータの入力値と出力値です。必要な初期状態の代わりに zA を使用します。

IO = struct('Input',zA.InputData,'Output',zA.OutputData);
opt = simOptions('InitialCondition',IO);

モデルのシミュレーションを実行します。

ysim = sim(sys,uSim,opt);

次に、履歴データを sys の初期状態に手動でマッピングして出力を再現します。これを行うには、data2state コマンドを使用します。

xf = data2state(sys,zA);

xf には、zA の最新のデータ サンプルのすぐ後の時点における sys の状態値が含まれています。

xf を初期状態として使用してシステムをシミュレートします。

opt2 = simOptions('InitialCondition',xf);
ysim2 = sim(sys,uSim,opt2);

sim コマンドの出力 ysim と手動による計算結果 ysim2 をプロットします。

plot(ysim,'b',ysim2,'--r')

Figure contains an axes object. The axes object with title y1 contains 2 objects of type line. These objects represent sys.

ysim2ysim と同じです。

idNeuralStateSpaceオブジェクトの状態および出力ネットワークはランダムに初期化されます。再現性を確保するために、乱数発生器のシードを固定します。

rng(0)

2 つの状態、2 つの入力、および 3 つの出力を使用して連続時間ニューラル状態空間オブジェクトを作成します。

nss = idNeuralStateSpace(2,NumInputs=2,NumOutputs=3)
Continuous-time Neural State-Space Model with 3 outputs, 2 states, and 2 inputs
     dx/dt = f(x(t),u(t))
    y_1(t) = x(t) + e_1(t)
    y_2(t) = g(x(t),u(t)) + e_2(t)
      y(t) = [y_1(t); y_2(t)]

f(.) network:
  Deep network with 2 fully connected, hidden layers
  Activation function: Tanh
g(.) network:
  Deep network with 2 fully connected, hidden layers
  Activation function: Tanh

Inputs: u1, u2
Outputs: y1, y2, y3
States: x1, x2

Status:                                                         
Created by direct construction or transformation. Not estimated.
More information in model's "Report" property.

時間シーケンス、乱数入力信号、およびランダム初期状態を定義します。

t = (0:1:10)';
u = rand(length(t),2);
x0 = 0.3*randn(2,1);

idNeuralStateSpace システムをシミュレートする際には、数値配列としての入力データの指定はサポートされていません。この例では、u の値がベクトル t の時間点に関連付けられるように指定して、入力データを timetable オブジェクトに変換します。

u = array2timetable(u,RowTimes=seconds(t));

シミュレーションが x0 から開始し、ベクトル t の時間点で出力が計算されるようにシミュレーション オプション オブジェクトを設定します。

simOpt = simOptions('InitialCondition',x0,'OutputTimes',t);

(未学習の) ニューラル状態空間システム nss をシミュレートします。

y = sim(nss,u,simOpt);

シミュレートされた出力をプロットします。

plot(t,y.Variables);
ylabel("Outputs"); 
xlabel("Time (seconds)")
title("Neural state-space system: simulated output")

Figure contains an axes object. The axes object with title Neural state-space system: simulated output, xlabel Time (seconds), ylabel Outputs contains 3 objects of type line.

入力引数

すべて折りたたむ

同定されたモデル。次のモデル オブジェクトのいずれかとして指定します。

 モデル タイプモデル オブジェクト
同定された線形モデル多項式モデルidpoly
プロセス モデルidproc
状態空間モデルidss
伝達関数モデルidtf
線形グレー ボックス モデルidgrey
同定された非線形モデル非線形 ARX モデルidnlarx
非線形 Hammerstein-Wiener モデルidnlhw
非線形グレー ボックス モデルidnlgrey
ニューラル状態空間idNeuralStateSpace

シミュレーション入力データ。timetable、数値行列、または iddata オブジェクトとして指定します。udata の指定はデータ型によって異なります。

  • timetable — 一定間隔の時間ベクトルを使用する timetable として udata を指定します。udata には、モデル sys の推定に使用した元のデータと同じ変数名が含まれている必要があります。

  • 数値行列 — udata を Ns 行 Nu 列の行列として指定します。ここで、Ns はサンプルの数、Nu は入力の数です。sysTs プロパティに含まれているサンプル周期が使用されます。idNeuralStateSpace オブジェクトでは数値行列入力データはサポートされません。

  • iddata オブジェクト — 時間領域データまたは周波数領域データを含む iddata オブジェクトとして udata を指定します。

sys が線形モデルの場合は、時間領域データまたは周波数領域データのいずれかを使用できます。sys が非線形モデルの場合は、時間領域データを使用する必要があります。

sys が時系列モデル、つまり入力のないモデルの場合は、udata を Ns 行 0 列の信号として指定します。ここで、Ns はシミュレーション出力サンプルの数です。たとえば、iddata オブジェクトを使用して 100 個の出力サンプルをシミュレートするには、以下のように udata を指定します。

udata = iddata([],zeros(100,0),Ts);

実験からのデータがない場合は、idinput を使用して、各種特性をもつ信号を生成します。

推定データ型の取り扱いの詳細については、Data Domains and Data Types in System Identification Toolboxを参照してください。

シミュレーションのオプション。以下のオプションを設定する simOptions オプション セットとして指定します。

  • 初期条件

  • 入出力オフセット

  • 加法性ノイズ

出力引数

すべて折りたたむ

sys のシミュレートされた応答。udata と同じ形式で返されます。たとえば、udata が timetable の場合は、y も timetable になります。

udata が時間領域データを表している場合は、y は、udata に対応する時間ベクトルのシミュレートされた応答です。

udata が周波数領域データ U(ω) を表している場合は、y には対応するサンプリングされた時間領域出力信号のフーリエ変換が含まれます。この信号は、sys の周波数応答、G(ω)、および U(ω) の積です。

複数実験データでは、y は対応する複数実験 iddata オブジェクトです。

線形モデルまたは非線形グレーボックス モデルについてシミュレートされた応答の推定された標準偏差。Ns 行 Ny 列の行列として返されます。ここで、Ns はサンプルの数、Ny は出力の数です。ソフトウェアはモデル パラメーターの共分散、初期状態の共分散、および加法性ノイズの共分散を考慮して標準偏差を計算します。加法性ノイズの共分散はモデルの NoiseVariance プロパティに格納されます。

y_sd は 1 次感度の考慮 (ガウス近似式) を使用して派生されます。

非線形モデルの場合は、y_sd[] です。

状態空間モデルの推定された状態軌跡。Ns 行 Nx 列の行列として返されます。ここで、Ns はサンプルの数、Nx は状態の数です。

x は、sysidssidgrey、または idnlgrey モデルの場合にのみ関連します。sys が状態空間モデルでない場合、x[] として返されます。

状態空間モデルの状態軌跡の推定された標準偏差。Ns 行 Nx 列の行列として返されます。ここで、Ns はサンプルの数、Nx は状態の数です。ソフトウェアはモデル パラメーターの共分散、初期状態の共分散、および加法性ノイズの共分散を考慮して標準偏差を計算します。加法性ノイズの共分散はモデルの NoiseVariance プロパティに格納されます。

x_sd は、sysidssidgrey、または idnlgrey モデルの場合にのみ関連します。sys が状態空間モデルでない場合、x_sd[] として返されます。

ヒント

  • 推定モデルと検証データ セットを測定したシステムの初期状態が異なる場合、シミュレートされた応答と測定された応答も異なることがあります。これは応答の開始時に特に顕著です。差を最小化するには、findstates を使用して初期状態値を推定し、推定された値を使用して、simOptionsInitialCondition オプションを設定します。例については、モデル応答と出力データの突き合わせを参照してください。

アルゴリズム

"シミュレーション" とは、入力データおよび初期状態を使用してモデル応答を計算することを意味します。sim は以下のシステムをシミュレートします。

ここで

  • u(t) はシミュレーション入力データ udata です。

  • y(t) はシミュレートされた出力応答です。

  • G は入力から出力への伝達関数であり、sys で定義されます。シミュレーションの初期状態。simOptions を使用して指定します。G の初期状態を設定します。

  • e(t) はオプションのノイズ信号です。ノイズをシミュレーションに追加するには、simOptions オプション セットを作成し、AddNoise オプションを true に設定します。また、NoiseData オプションを指定して既定のノイズ信号を変更できます。

  • H はノイズ伝達関数であり、sys で定義されます。

  • δu は、入力がモデルのシミュレートに使用される前に入力信号 u(t) から減算されるオプションの入力オフセットです。simOptions を使用して InputOffset オプションを設定して、入力オフセットを指定します。

  • δy は、シミュレーション後に出力応答 y(t) に加算されるオプションの出力オフセットです。simOptions を使用して OutputOffset オプションを設定して、出力オフセットを指定します。

シミュレーションの初期状態、入出力オフセット、およびノイズ信号データの指定の詳細については、simOptions を参照してください。複数実験データの場合、実験ごとに別個にこれらのオプションを指定できます。

代替方法

  • 応答の標準偏差を計算するモンテカルロ法では simsd を使用します。

  • simlsim を拡張して、同定されたモデルに関連した以下の追加機能を容易にします。

    • 非線形モデルのシミュレーション

    • 加法性ノイズを使用したシミュレーション

    • 信号オフセットの組み込み

    • 応答標準偏差の計算 (線形モデルのみ)

    • 周波数領域のシミュレーション (線形モデルのみ)

    • さまざまな入力でさまざまなサンプル間動作を使用したシミュレーション

    上記の演算を一切行わずにシミュレートされた応答を取得するには、lsim を使用します。

バージョン履歴

R2006a より前に導入

すべて展開する