最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

lsim

動的システムの任意の入力への時間応答をシミュレートする

構文

lsim(sys,u,t)
lsim(sys,u,t,x0)
lsim(sys,u,t,x0,method)
lsim(sys1,...,sysn,u,t)
lsim(sys1,LineSpec1,...,sysN,LineSpecN,u,t)
y = lsim(___)
[y,t,x] = lsim(___)
lsim(sys)

説明

lsim は任意の入力に対して、連続または離散線形システムの (時間) 応答をシミュレートします。左辺引数なしで実行した場合、lsim は画面上に応答をプロットします。

lsim(sys,u,t) は、入力履歴 tu に対する動的システム モデル sys の時間応答をプロットします。ベクトル t はシミュレーションの時間サンプルを (sysTimeUnit プロパティで指定されたシステム時間単位で) 指定するものであり、等間隔の時間サンプルで構成されています。

t = 0:dt:Tfinal

行列 u は時間サンプルと同じ行数 (length(t)) をもち、システム入力と同じ列数をもつ配列です。たとえば、sys が SISO システムである場合、u は t 行 1 列のベクトルです。sys に 3 つの入力がある場合、u は t 行 3 列の配列です。各行 u(i,:) は時間サンプル t(i) の入力値を指定します。信号 u はプロットにも表示されます。

モデル sys は、連続または離散、SISO または MIMO のいずれとすることもできます。離散時間では、u はシステムと同じレートでサンプリングされなければなりません。この場合、入力 t は冗長であり、省略するか空行列に設定できます。連続時間では、連続モデルを離散化するために時間サンプリング dt = t(2)-t(1) が使用されます。dt が大きすぎる (アンダーサンプリング) の場合、lsim はより適切なサンプル時間を使用するよう提案する警告を出しますが、実際には指定されたサンプル時間を使用します。サンプル時間の説明は、アルゴリズムを参照してください。

lsim(sys,u,t,x0) はさらにシステム状態の初期条件 x0 を指定します。この構文は、sys が状態空間モデルである場合にのみに適用されます。x0 は、sys での対応する状態の初期値をエントリとするベクトルです。

lsim(sys,u,t,x0,method) は、sys が連続時間システムである場合に、入力値がサンプル間でどのように内挿されるかを明示的に指定します。以下のいずれかの値として method を指定します。

  • 'zoh' — ゼロ次ホールドを使用

  • 'foh' — 線形内挿 (1 次ホールド) を使用

方法を指定しない場合、lsim は、信号 u の滑らかさに基づいて自動的に内挿法を選択します。

lsim(sys1,...,sysn,u,t) は複数の動的システム モデルの応答を同じ入力履歴 tu でシミュレートし、これらの応答を 1 つの図にプロットします。複数のモデルの応答を計算する場合は、入力引数 x0 および method も使用できます。

lsim(sys1,LineSpec1,...,sysN,LineSpecN,u,t) は、プロットにおける各システム応答のライン スタイル、マーカーおよび色を指定します。この構文でも、入力引数 x0 および method を使用できます。各 LineSpec 引数は、1、2、または 3 文字のベクトルとして指定します。文字が表示される順序は任意です。たとえば、次のコードは sys1 の応答を黄色の点線で、sys2 の応答を緑の破線でプロットします。

lsim(sys1,'y:',sys2,'g--',u,t,x0)

この引数の設定の詳細については、関数 plot の入力引数 LineSpec を参照してください。

y = lsim(___) は、入力 (t) と同時にサンプリングされるシステム応答 y を返します。出力 y は時間サンプルと同じ行数 (length(t)) をもち、システム出力と同じ列数をもつ配列です。画面上には、何もプロットされません。この構文は、LineSpec 引数を除き、上記の各構文で説明した任意の入力引数とともに使用できます。

[y,t,x] = lsim(___) は、シミュレーションに使用する時間ベクトル t および状態軌跡 x (状態空間モデルのみ) も返します。出力 x には時間サンプルと同じ行数 (length(t)) があり、システム状態と同じ列数があります。この構文は、LineSpec 引数を除き、上記の各構文で説明した任意の入力引数とともに使用できます。

lsim(sys) は線形シミュレーション ツールの GUI を開きます。この GUI の操作の詳細については、線形シミュレーション ツールの使用 (Control System Toolbox)を参照してください。

すべて折りたたむ

4 秒間隔の矩形波に対する次のシステムの応答をシミュレーションしてプロットします。

伝達関数を作成し、gensig で矩形波を生成します。0.1 秒間隔で 10 秒間サンプリングします。

H = [tf([2 5 1],[1 2 3]);tf([1 -1],[1 1 5])];
[u,t] = gensig('square',4,10,0.1);

ここで、lsim を用いてシミュレートします。

lsim(H,u,t)

プロットには、適用された信号と応答が表示されます。

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

load(fullfile(matlabroot,'toolbox','ident','iddemos','data','dcmotordata'));
z = iddata(y,u,0.1,'Name','DC-motor');

z は、サンプル時間 0.1 秒で 1 入力 2 出力の推定データを格納する iddata オブジェクトです。

推定データ z を使用して次数 4 の状態空間モデルを推定します。

[sys,x0] = n4sid(z,4);

sys は推定されたモデル、x0 は推定された初期状態です。

推定に使用したのと同じ入力データと推定コマンドによって返された初期状態を使用して、sys の応答をシミュレートします。

[y,t,x] = lsim(sys,z.InputData,[],x0);

ここで、y はシステム応答、t はシミュレーションに使用される時間ベクトル、x は状態軌跡です。

両方の出力について、シミュレートした応答 y と測定した応答 z.OutputData とを比較します。

plot(t,z.OutputData,'k',t,y,'r')
legend('Measured','Simulated')

アルゴリズム

離散時間システムは、ltitr (状態空間) または filter (伝達関数と零点-極-ゲイン) を使用してシミュレーションされます。

連続時間システムは、'zoh' または 'foh' メソッドのいずれかを使用して c2d で離散化されます ('foh' は滑らかな入力信号に、'zoh' はパルスや矩形波などの非連続信号に使用されます)。サンプル時間は、ユーザー指定の時間サンプル t 間の間隔 dt に設定されます。

サンプル時間の選択は、シミュレーション結果に大きく影響する場合があります。この理由を説明するため、次の 2 次モデルを見てみましょう。

H(s)=ω2s2+2s+ω2,ω=62.83

周期が 1 秒の矩形波に対する応答をシミュレーションするには、次のようにします。

w2 = 62.83^2;
h = tf(w2,[1 2 w2]);
t = 0:0.1:5;                % vector of time samples
u = (rem(t,1) >= 0.5);        % square wave values
lsim(h,u,t)

lsim は、指定されたサンプル時間を評価し、警告を発行します。

Warning: Input signal is undersampled. Sample every 0.016 sec or 
faster.

この応答を改善するために、推奨サンプル時間を使用して H(s) を離散化します。

dt = 0.016;
ts = 0:dt:5;
us = (rem(ts,1) >= 0.5);
hd = c2d(h,dt);
lsim(hd,us,ts)

この応答は、アンダーサンプル バージョンに強い振動動作が隠れていることを示します。

R2012a で導入