Main Content

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

lsim

動的システムの任意の入力へのシミュレーションされた時間応答をプロットする。シミュレーションされた応答データ

説明

応答プロット

lsim(sys,u,t) は、入力履歴 (tu) に対する動的システム モデル sys のシミュレーションされた時間応答をプロットします。ベクトル t は、シミュレーションの時間サンプルを指定します。単入力システムの場合、入力信号 u は、t と同じ長さのベクトルです。多入力システムの場合、u は、時間サンプル (length(t)) と同じ行数および sys に対する入力と同じ列数をもつ配列です。

lsim(sys,u,t,x0) はさらに初期状態値のベクトル x0 を指定します。このとき、sys は状態空間モデルになります。

lsim(sys,u,t,x0,p) は、LPV モデルのパラメーターの軌跡 p を指定します。

lsim(sys,u,t,x0,method)lsim によるサンプル間の入力値の内挿法を指定します。このとき、sys は連続時間モデルになります。

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

lsim(sys1,LineSpec1,...,sysN,LineSpecN,___) はプロット内の各システムの色、ライン スタイルおよびマーカーを指定します。追加のプロット カスタマイズ オプションが必要な場合は、代わりに lsimplot を使用します。

応答データ

y = lsim(sys,u,t) は、入力と同じ時間 t にサンプリングされたシステム応答 y を返します。単出力システムの場合、yt と同じ長さのベクトルです。多出力システムの場合、y は時間サンプル (length(t)) と同じ行数および sys の出力と同じ列数をもつ配列です。この構文は、プロットを作成しません。

y = lsim(sys,u,t,x0) はさらに初期状態値のベクトル x0 を指定します。このとき、sys は状態空間モデルになります。

y = lsim(sys,u,t,x0,p) は、LPV モデルのパラメーターの軌跡 p を指定します。

y = lsim(sys,u,t,x0,method)lsim によるサンプル間の入力値の内挿法を指定します。このとき、sys は連続時間モデルになります。

[y,tOut,x] = lsim(___) は、状態軌跡 x を返します。このとき、sys は状態空間モデルになります。x は時間サンプルと同じ行数および sys の状態と同じ列数をもつ配列です。この構文は、tOut のシミュレーションに使用される時間サンプルを返します。

[y,tOut,x,pOut] = lsim(sys,u,t,x0,p) は、sys が LPV モデルの場合にパラメーターの軌跡 pOut も返します。

線形シミュレーション ツール

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

すべて折りたたむ

次の伝達関数について考えます。

sys = tf(3,[1 2 3])
sys =
 
        3
  -------------
  s^2 + 2 s + 3
 
Continuous-time transfer function.

任意の入力信号に対するこのシステムの応答を計算するには、応答を計算する時間 t のベクトルと、対応する信号値を含むベクトル u を使用して lsim を指定します。たとえば、時間 t = 0 に 0 で開始され、t = 1 の 0 から t = 2 の 1 まで上昇した後、1 で状態を保つ、ランプ ステップ信号に対するシステム応答をプロットします。t を定義し、u の値を計算します。

t = 0:0.04:8;  % 201 points
u = max(0,min(t-1,1));

出力引数を指定せずに lsim を使用して、信号に対するシステム応答をプロットします。

lsim(sys,u,t)
grid on

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

プロットには、適用された入力 (u,t) がグレー、システム応答が青で示されています。

出力引数を指定した lsim を使用して、シミュレーションされた応答データを取得します。

y = lsim(sys,u,t);
size(y)
ans = 1×2

   201     1

ベクトル y には、t の対応する時間におけるシミュレーションされた応答が含まれます。

lsim で使用する正弦波や矩形波などの周期入力信号を作成するには、gensig (Control System Toolbox)を使用します。次の SISO 状態空間モデルの矩形波に対する応答をシミュレーションします。

A = [-3 -1.5; 5 0];
B = [1; 0];
C = [0.5 1.5];
D = 0;
sys = ss(A,B,C,D);

この例では、10 秒の周期と 20 秒の持続期間を指定して矩形波を作成します。

[u,t] = gensig("square",10,20);

gensig は、タイム ステップのベクトル t と、入力信号の対応する値を含むベクトル u を返します (t のサンプル時間を指定しない場合、gensig は 1 周期あたり 64 サンプル生成します)。lsim でこれらを使用して、システム応答をプロットします。

lsim(sys,u,t)
grid on

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

プロットには、適用された矩形波がグレー、システム応答が青で表示されています。出力引数を指定した lsim を呼び出して、t の各ポイントにおける応答値を取得します。

[y,~] = lsim(sys,u,t);

離散時間システムの応答をシミュレーションする場合、ベクトル tTi:dT:Tf の形式にしなければなりません。この dT はモデルのサンプル時間です。ランプ ステップ入力に対する次の離散時間伝達関数の応答をシミュレートします。

sys = tf([0.06 0.05],[1 -1.56 0.67],0.05);

この伝達関数のサンプル時間は 0.05 秒です。同じサンプル時間を使用して、時間ベクトル t とランプ ステップ信号 u を生成します。

t = 0:0.05:4;  
u = max(0,min(t-1,1));

システム応答をプロットします。

lsim(sys,u,t)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

周期入力信号に対する離散時間システムの応答をシミュレートするには、gensig で同じサンプル時間を使用して入力を生成します。たとえば、周期 1 秒および期間 4 秒の正弦波に対するシステム応答をシミュレーションします。

[u,t] = gensig("sine",1,4,0.05);

システム応答をプロットします。

lsim(sys,u,t)

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

lsim を使用して、複数の動的システムのシミュレーションされた応答を同じ軸にプロットできます。たとえば、PI コントローラーと PID コントローラーでシステムの閉ループ応答を比較します。システムの伝達関数を作成し、コントローラーを調整します。

H = tf(4,[1 10 25]);
C1 = pidtune(H,'PI');
C2 = pidtune(H,'PID');

閉ループ システムを作成します。

sys1 = feedback(H*C1,1);
sys2 = feedback(H*C2,1);

周期 4 秒の矩形波に対する両方のシステムの応答をプロットします。

[u,t] = gensig("square",4,12);
lsim(sys1,sys2,u,t)
grid on
legend("PI","PID")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Driving inputs, PI, PID.

既定では、lsim は、プロットするシステムごとに異なる色を選択します。入力引数 LineSpec を使用して色とライン スタイルを指定できます。

 lsim(sys1,"r--",sys2,"b",u,t)
 grid on
 legend("PI","PID")

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Driving inputs, PI, PID.

最初の LineSpec "r--" では、PI コントローラーでの応答を表す赤い破線を指定します。2 番目の LineSpec "b" では、PID コントローラーでの応答を表す青い実線を指定します。凡例に、指定された色とライン スタイルが反映されます。プロットをさらにカスタマイズするには、lsimplot を使用します。

MIMO システムでは、各タイム ステップ t において、入力 u(t) は、長さが入力数を表すベクトルです。lsim を使用するには、u を次元 NtNu 列の行列として指定します。ここで、Nu はシステム入力の数、Ntt の長さです。つまり、u の各列は、対応するシステム入力に適用される入力信号になります。たとえば、201 のタイム ステップの 4 つの入力でシステムをシミュレーションするには、u を 4 つ列および 201 行の行列として指定します。ここで、各行 u(i,:)i 番目のタイム ステップにおける入力値のベクトル、各列 u(:,j)j 番目の入力に適用された信号です。

同様に、lsim で計算された出力 y(t) は、列が各システム出力での信号を表す行列になります。lsim を使用してシミュレーションされた応答をプロットすると、lsim では出力ごとに異なる座標軸を示し、すべての入力で適用された入力 u(t) への各出力チャネルでシステム応答を表します。

次の状態空間行列を使用する 2 入力、3 出力の状態空間モデルを考えてみます。

A = [-1.5  -0.2   1.0;
     -0.2  -1.7   0.6;
      1.0   0.6  -1.4];
  
B = [ 1.5  0.6;
     -1.8  1.0;
      0    0  ];

C = [ 0    -0.5 -0.1;
      0.35 -0.1 -0.15
      0.65  0    0.6];
  
D = [ 0.5  0;
      0.05 0.75
      0    0];

sys = ss(A,B,C,D);

最初の入力 sys に適用された周期 4 秒の矩形波と 3 秒おきに 2 番目の入力に適用されたパルスに対する sys の応答をプロットします。これを行うには、gensig を使用して矩形波とパルス信号を表す列ベクトルを作成します。次に、列を 1 つの入力行列にスタックします。2 つの信号のサンプル数を同じにするには、同じ終了時間とサンプル時間を指定します。

Tf = 10;
Ts = 0.1;
[uSq,t] = gensig("square",4,Tf,Ts);
[uP,~] = gensig("pulse",3,Tf,Ts);
u = [uSq uP];
lsim(sys,u,t)

Figure contains 3 axes objects. Axes object 1 with ylabel To: Out(1) contains 3 objects of type line. These objects represent Driving inputs, sys. Axes object 2 with ylabel To: Out(2) contains 3 objects of type line. These objects represent Driving inputs, sys. Axes object 3 with ylabel To: Out(3) contains 3 objects of type line. These objects represent Driving inputs, sys.

各軸には、すべての入力で適用された信号 u に対する 3 つのシステム出力のいずれかの応答が示されます。各プロットには、すべての入力信号もグレーで表示されます。

既定では、lsim は、シミュレーションの開始時にすべての状態が 0 であると仮定して、モデルをシミュレーションします。状態空間モデルの応答をシミュレートする場合は、オプションの x0 入力引数を使用して、非ゼロの初期状態の値を指定します。次の 2 状態の SISO 状態空間モデルを考えてみます。

A = [-1.5 -3;
      3   -1];
B = [1.3; 0];
C = [1.15 2.3];
D = 0;
          
sys = ss(A,B,C,D);

2 秒の入力のない既知の初期状態のセットから展開して、単位ステップの変更を適用できるようにするとします。初期状態値のベクトル x0 を指定し、入力ベクトルを作成します。

x0 = [-0.2 0.3];
t = 0:0.05:8;
u = zeros(length(t),1);
u(t>=2) = 1;
lsim(sys,u,t,x0)
grid on

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Driving inputs, sys.

プロットの最初の半分には、初期状態値 [-0.2 0.3] からのシステムの最初の変化を示します。t = 2 でステップが入力に変わり、プロットにはその時点における状態値から始まるこの新しい信号に対するシステム応答が示されます。

出力引数を指定した lsim を使用すると、シミュレーションされた応答データが配列で返されます。SISO システムの場合、応答データは t と同じ長さの列ベクトルとして返されます。たとえば、矩形波に対する SISO システムの応答を抽出するとします。gensig を使用して矩形波を作成します。

sys = tf([2 5 1],[1 2 3]);
[u,t] = gensig("square",4,10,0.05);
[y,t] = lsim(sys,u,t);
size(y)
ans = 1×2

   201     1

ベクトル y には、t 各タイム ステップでシミュレートされた応答が含まれます (便宜上、lsim は時間ベクトル t を返します)。

MIMO システムの場合、応答データは次元 N×Ny×Nu の配列で返されます。NyNu は動的システムの出力および入力の数です。たとえば、2 つの入力と 3 つの出力をもつ 3 状態システムを表す、次の状態空間モデルを考えてみます。

A = [-1.5  -0.2   1.0;
     -0.2  -1.7   0.6;
      1.0   0.6  -1.4];
  
B = [ 1.5  0.6;
     -1.8  1.0;
      0    0  ];

C = [ 0   -0.1 -0.2;
      0.7 -0.2 -0.3
     -0.65 0   -0.6];
  
D = [ 0.1  0;
      0.1  1.5
      0    0];

sys = ss(A,B,C,D);

両方の入力で適用された矩形波に対する 3 つの出力チャネルの応答を抽出します。

uM = [u u];
[y,t] = lsim(sys,uM,t);
size(y)
ans = 1×2

   201     3

y(:,j) は、両方の入力に適用された矩形波に対する j 番目の出力における応答を含む列ベクトルです。つまり、y(i,:) は、i 番目のタイム ステップにおける出力値である 3 つの値のベクトルです。

sys は状態空間モデルであるため、入力信号に応じて状態値の時間発展を抽出できます。

[y,t,x] = lsim(sys,uM,t);
size(x)
ans = 1×2

   201     3

x の各行には、t の対応する時間における状態値 [x1,x2,x3] が含まれます。つまり、x(i,:) は、i 番目のタイム ステップにおける状態ベクトルです。状態値をプロットします。

plot(t,x)

Figure contains an axes object. The axes object contains 3 objects of type line.

「同じ入力に対する複数システムの応答のプロット」の例は、信号軸に複数の個々のシステムの応答をプロットする方法を示しています。モデル配列に複数の動的システムを配置すると、lsim はそのすべての応答を一度にプロットします。

モデル配列を作成します。この例では、固有振動数が異なる 2 次伝達関数の 1 次元配列を使用します。最初に、モデル配列のメモリを事前に割り当てます。次のコマンドで、零点とゲインの SISO 伝達関数からなる 1 行 5 列の行を作成します。最初の 2 つの次元は、モデルの出力と入力を表します。残りの次元は配列の次元です (モデル配列とそれらの作成方法の詳細については、モデル配列 (Control System Toolbox)を参照してください)。

sys = tf(zeros(1,1,1,5));

配列を設定します。

w0 = 1.5:1:5.5;    % natural frequencies
zeta = 0.5;        % damping constant
for i = 1:length(w0)
   sys(:,:,1,i) = tf(w0(i)^2,[1 2*zeta*w0(i) w0(i)^2]);
end

矩形波入力に対する配列内のすべてのモデルの応答をプロットします。

[u,t] = gensig("square",5,15);
lsim(sys,u,t)

Figure contains an axes object. The axes object contains 6 objects of type line. These objects represent Driving inputs, sys.

lsim は、配列内のすべてのエントリの応答に同じライン スタイルを使用します。エントリを区別する 1 つの方法は、動的システム モデルの SamplingGrid プロパティを使用して配列内の各エントリを対応する w0 値に関連付けることです。

sys.SamplingGrid = struct('frequency',w0);

次に、応答を MATLAB Figure ウィンドウにプロットする場合は、トレースをクリックして、対応する周波数値を確認できます。

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

load 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 と比較します。

subplot(211), plot(t,z.OutputData(:,1),'k',t,y(:,1),'r')
legend('Measured','Simulated')
subplot(212), plot(t,z.OutputData(:,2),'k',t,y(:,2),'r')
legend('Measured','Simulated')

Figure contains 2 axes objects. Axes object 1 contains 2 objects of type line. These objects represent Measured, Simulated. Axes object 2 contains 2 objects of type line. These objects represent Measured, Simulated.

この例では、fcnMaglev.m で磁気浮上システムの行列とオフセットを定義します。ボールに対する磁力を発生させるコイル電流を使用して、磁気浮上で浮遊するボールの高さを制御します。この例では、開ループでモデルをシミュレートします。

LPV モデルを作成します。

lpvSys = lpvss('h',@fcnMaglev)
Continuous-time state-space LPV model with 1 outputs, 1 inputs, 2 states, and 1 parameters.
Model Properties

ドット表記を使用して追加のプロパティを設定できます。

lpvSys.StateName = {'h','hdot'};
lpvSys.InputName = 'current';
lpvSys.InputName = 'height';

このモデルの任意の正弦波入力電流に対する応答をシミュレートします。

h0 = 1;
[~,~,~,~,~,~,x0,u0,~] = fcnMaglev([],h0);
t = 0:1e-2:1;
u = u0*(1+0.1*sin(10*t));
y = lsim(lpvSys,u,t,x0,@(t,x,u) x(1));
**iter = 20, residual: 3.32e-01
**iter = 7, residual: 4.33e-10

応答をプロットします。

plot(t,y,t,u/u0)
legend('height','current')

電流が最初に増加した時点でボールが磁石に引き寄せられます (h が減少します)。その後の電流の減少は、元に戻るほど十分なものではありません。

このモデルの特異点は h = 0、つまりボールが磁石に当たるときです。LPV モデルは、この時点で有効ではなくなります。

サンプル時間の選択は、シミュレーション結果に大きく影響する場合があります。この理由を、次の 2 次モデルを使って考えてみます。

sys(s)=ω2s2+2s+ω2,ω=62.83.

周期を 1 秒とし、0.1 秒のサンプル時間を使用して、矩形波に対するこのモデルの応答をシミュレーションします。

w2 = 62.83^2;
sys = tf(w2,[1 2 w2]);

tau = 1;
Tf = 5;
Ts = 0.1;
[u,t] = gensig("square",tau,Tf,Ts);
lsim(sys,u,t)

lsim warning message: The input signal is undersampled.

lsim は、指定された入力信号を使用してモデルをシミュレーションしますが、入力信号がアンダーサンプルであること示す警告を表示します。lsim では、入力 u の 1 周期のサンプル数を少なくとも 64 個生成するサンプル時間が推奨されます。この推奨事項が重要である理由を確認するために、最大推奨値よりも小さいサンプル時間を使用して sys をもう一度シミュレーションします。

figure
Ts2 = 0.01;
[u2,t2] = gensig("square",tau,Tf,Ts2);
lsim(sys,u2,t2)

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

入力引数

すべて折りたたむ

動的システム。SISO または MIMO 動的システム モデルか、動的システム モデルの配列として指定します。応答をシミュレーションできる動的システムは次のとおりです。

  • tfzpkss モデルなどの連続時間または離散時間の数値 LTI モデル。

  • genssuss モデルなどの一般化された、あるいは不確かさをもつ LTI モデル。(不確かさをもつモデルを使用するには Robust Control Toolbox™ ソフトウェアが必要です。)

    • 調整可能な制御設計ブロックの場合、関数は応答データをプロットする処理と返す処理の両方においてモデルをその現在の値で評価します。

    • 不確かさをもつ制御設計ブロックの場合、関数はモデルのノミナル値とランダム サンプルをプロットします。出力引数を使用する場合、関数はノミナル モデルのみの応答データを返します。

  • sparss モデルや mechss モデルなどのスパース状態空間モデル。

  • idtfidssidproc モデルなどの同定された LTI モデル。同定されたモデルの場合は、sim コマンドも使用できます。このコマンドはシミュレーションされた応答と状態軌跡の標準偏差を計算できます。sim では、非ゼロ初期条件ですべてのタイプのモデルをシミュレーションし、非線形の同定されたモデルをシミュレーションすることもできます。

  • 線形時変 (ltvss (Control System Toolbox)) モデルと線形パラメーター変動 (lpvss (Control System Toolbox)) モデル。

lsim は、frdgenfrdidfrd モデルなど、周波数応答データ モデルをサポートしません。

sys がモデルの配列である場合、この関数は同じ座標軸上に配列のすべてのモデルの応答をプロットします。モデル配列でのシステムの応答 (Control System Toolbox)を参照してください。

入力信号シミュレーション。単入力システムの場合はベクトル、多入力システムの場合は配列として指定します。

  • 単入力システムの場合、ut と同じ長さのベクトルです。

  • 多入力システムの場合、u は、時間サンプル (length(t)) と同じ行数および sys に対する入力と同じ列数をもつ配列です。つまり、各行 u(i,:) は、時間 t(i) における sys の入力に適用された値を表します。各列 u(:,j) は、sysj 番目の入力に適用された信号です。

応答を計算する時間サンプル。T0:dT:Tf 形式のベクトルとして指定します。lsim コマンドでは、t はモデル sysTimeUnit プロパティで指定された単位を使用するものと解釈します。

連続時間 sys の場合、lsim コマンドはタイム ステップ dT を使用してモデルを離散化します。dT がシステム ダイナミクスに対して大きすぎる (アンダーサンプリング) 場合、lsim は、サンプリング時間の短縮を推奨する警告を出します。サンプリング時間がシミュレーションに与える影響の詳細については、シミュレーションに対するサンプル時間の影響 (Control System Toolbox)を参照してください。

離散時間 sys の場合、タイム ステップ dTsys のサンプル時間と等しくなければなりません。または、t を省略するか、[] に設定できます。その場合、lsimt を、sys.Ts と同じタイム ステップで 0 から始まる u と同じ長さのベクトルに設定します。

状態空間モデルをシミュレーションするための初期状態値。sys の状態ごとに 1 つの値をもつベクトルとして指定します。この引数を省略すると、lsim はすべての状態を t = 0 の 0 に設定します。

LPV モデルのパラメーターの軌跡。行列または関数ハンドルとして指定します。

  • 外因的または明示的な軌跡の場合、p を次元 N 行 Np 列の行列として指定します。ここで、N は時間サンプルの数、Np はパラメーターの数です。

    したがって、行ベクトル p(i,:) には、i 番目のタイム ステップのパラメーター値が含まれます。

  • 内因的または暗黙的な軌跡の場合、pp = F(t,x,u) (連続時間) および p = F(k,x,u) (離散時間) の形式の関数ハンドルとして指定し、時間 t または時間サンプル k、状態 x、および入力 u の関数としてパラメーターを与えます。

    このオプションは、準 LPV モデルをシミュレートする場合に便利です。

連続時間モデルをサンプリングするための離散化手法。次のいずれかとして指定します。

  • 'zoh' — ゼロ次ホールド

  • 'foh' — 1 次ホールド

sys が連続時間モデルの場合、lsim は、t のタイム ステップ dT = t(2)-t(1) と等しいサンプル時間を使用してモデルを離散化することで、時間応答を計算します。離散化手法を指定しない場合、lsim は、信号 u の滑らかさに基づいて自動的に方式を選択します。離散化手法の詳細については、連続/離散の変換方法 (Control System Toolbox)を参照してください。

ライン スタイル、マーカー、色。1、2、または 3 文字の string または文字ベクトルとして指定します。文字が表示される順序は任意です。3 つの特性 (ライン スタイル、マーカーおよび色) をすべて指定する必要はありません。たとえば、ライン スタイルを省略してマーカーを指定した場合、プロットはラインなしでマーカーのみを表示します。この引数の設定の詳細については、関数 plot の入力引数 LineSpec を参照してください。

例: 'r--' は赤い破線を指定します。

例: '*b' は青いアスタリスク マーカーを指定します。

例: 'y' は黄色いラインを指定します。

出力引数

すべて折りたたむ

シミュレーションされた応答データ。配列として返されます。

  • 単入力システムの場合、yt と同じ長さの列ベクトルです。

  • 多出力システムの場合、y は時間サンプル (length(t)) と同じ行数および sys の出力と同じ列数をもつ配列です。したがって、y の j 番目の列 (y(:,j)) には、すべての入力に適用された u に対する j 番目の出力の応答が含まれます。

シミュレーションに使用される時間ベクトル。列ベクトルとして返されます。0:dT:Tf 形式の入力時間ベクトル t を指定すると、tOut = t となります。t がほぼ等間隔でサンプリングされている場合、lsim はシミュレーションのサンプル時間を調整し、結果を tOut で返します。離散時間 sys の場合、t を省略するか、[] に設定できます。その場合、lsimt を、sys.Ts と同じタイム ステップで 0 から始まる u と同じ長さのベクトルに設定し、結果を tOut で返します。

状態軌跡。配列として返されます。sys が状態空間モデルの場合、x には入力に対する応答の sys の状態の発展が含まれます。x は、時間サンプル (length(t)) と同じ行数および sys の状態と同じ列数の配列です。

パラメーターの軌跡。配列として返されます。sys が線形パラメーター変動 (lpvss) モデルの場合、pOut には sys のパラメーターの発展が含まれます。pOut は、時間サンプル (length(t)) と同じ行数および sys のパラメーターと同じ列数の配列です。

ヒント

  • 追加のプロット カスタマイズ オプションが必要な場合は、代わりに lsimplot を使用します。

アルゴリズム

離散時間の伝達関数の場合、

sys(z1)=a0+a1z1++anzn1+b1z1++bnzn,

lsim は、この伝達関数に関連付けられた再帰に基づいて入力をフィルター処理します。

y[k]=a0u[k]++anu[kn]b1y[k1]bn[kn].

離散時間 zpk モデルの場合、lsim は一連の 1 次セクションまたは 2 次セクションを通じて入力をフィルター処理します。この方法により、高次のモデルで数値的不安定性を引き起こす可能性がある、分子多項式と分母多項式は作成されません。

離散時間の状態空間モデルの場合、lsim は離散時間の状態空間方程式を伝播します。

x[n+1]=Ax[n]+Bu[n],y[n]=Cx[n]+Du[n].

連続時間システムの場合、lsim は最初に c2d を使用してシステムを離散化してから、結果の離散時間状態空間方程式を伝播します。入力引数 method を使用して前述の指定と異なる指定をしない限り、lsim は、入力信号が滑らかな場合は 1 次ホールド離散化手法を使用し、パルスや矩形波など入力信号が不連続の場合はゼロ次ホールドを使用します。離散化のサンプル時間は、t で指定した時間サンプル間の間隔 dT です。

バージョン履歴

R2012a で導入

参考

関数

アプリ