メインコンテンツ

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

lsim

任意の入力に対する動的システムの時間応答シミュレーション データを計算

説明

応答データ

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

y = lsim(sys,u,t,IC) は、さらに t(1) における初期条件 IC を指定します。このとき、sys は状態空間モデルになります。

y = lsim(sys,u,t,IC,p) は、sys が LPV モデルの場合にパラメーターの軌跡 p を指定します。 (R2023a 以降)

[y,tOut] = lsim(___) は、シミュレーションに使用される時間サンプル tOut を返します。

[y,tOut,x] = lsim(___) は、sys が状態空間モデルの場合に状態軌跡 x も返します。

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

入力の内挿法

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

状態スナップショット POD

R2024b 以降

[y,tOut,x,~,xPODOut] = lsim(___,xPODIn) は、LTI 状態空間モデル sys について、状態スナップショットの固有直交分解 (POD) を実行します。ここで、xPODincrementalPOD オブジェクトです。新しい POD 解析を開始するか、前の POD の結果に追加できます。例およびモデルの低次元化の適用については、incrementalPOD および reducespec を参照してください。

[y,tOut,x,~,xPODOut] = lsim(___,xPODIn,method) は、sys が連続時間モデルの場合に入力信号の内挿法を指定します。

応答プロット

lsim(___) は、前述の状態スナップショット POD を除くすべての入力引数の組み合わせについて、入力履歴 (u,t) に対する sys のシミュレートされた時間応答をプロットします。プロットでは既定のプロット オプションが使用されます。プロットをさらにカスタマイズするには、代わりに lsimplot を使用します。

  • 複数の動的システムの応答を同じプロット上にプロットするには、sys をモデルのコンマ区切りリストとして指定します。たとえば、lsim(sys1,sys2,sys3,u,t) は 3 つのモデルの応答を同じプロット上にプロットします。

  • プロット内の各システムの色、ライン スタイル、およびマーカーを指定するには、システムごとに LineSpec 値を指定します。たとえば、lsim(sys1,LineSpec1,sys2,LineSpec2,u,t) は 2 つのモデルをプロットし、それらのプロット スタイルを指定します。LineSpec 値の指定の詳細については、lsimplot を参照してください。

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

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

すべて折りたたむ

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

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

任意の入力信号に対するこのシステムの応答を計算するには、応答を計算する時間 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

MATLAB figure

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

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

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

   201     1

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

lsim で使用する正弦波や矩形波などの周期入力信号を作成するには、gensigを使用します。次の 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

MATLAB figure

プロットには、適用された矩形波がグレー、システム応答が青で表示されています。出力引数を指定した 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)

MATLAB figure

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

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

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

lsim(sys,u,t)

MATLAB figure

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")

MATLAB figure

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

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

MATLAB figure

最初の 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)

MATLAB figure

各軸には、すべての入力で適用された信号 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

MATLAB figure

プロットの最初の半分には、初期状態値 [-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 つの次元は、モデルの出力と入力を表します。残りの次元は配列の次元です (モデル配列とそれらの作成方法の詳細については、モデル配列を参照してください)。

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)

MATLAB figure

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);
ic = findop(lpvSys,0,h0,x=x0,u=u0);
t = 0:1e-3:1;
u = u0*(1+0.1*sin(10*t));
y = lsim(lpvSys,u,t,ic,@(t,x,u) x(1));

応答をプロットします。

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

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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)

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

この例では、カスタム シミュレーションを使用して、状態スナップショット データを取得し、POD モデル次数の低次元化を実行する方法を示します。既定では、POD アルゴリズムは、シミュレーションの実行用に 3 種類の組み込みの励起信号 (チャープ、インパルス、および PRBS) を提供します。ソフトウェアはモデルをシミュレートして状態スナップショット データを抽出し、可制御性グラミアンと可観測性グラミアンを近似します。代わりに、incrementalPODlsim を使用してシミュレーションから生成したカスタム POD データを提供できます。

30 個の状態、1 つの入力、および 1 つの出力をもつランダムな状態空間モデルを生成し、モデル次数の低次元化タスクを作成します。

rng(0)
sys = rss(30,1,1);
R = reducespec(sys,"pod");

この例では、シミュレーションを実行するための入力信号として、重ね合わせた正弦波信号を作成します。

t = linspace(0,100,10000);
u = 0.5*(sin(1.*t)+sin(3.*t)+sin(5.*t)+sin(8.*t)+sin(10.*t));

可到達性グラミアンと可観測性グラミアンの近似を格納する増分 POD オブジェクトを作成します。

rPOD = incrementalPOD;
oPOD = incrementalPOD;

カスタム入力信号 u でプラント モデルとその随伴のシミュレーションを実行します。

[~,~,~,~,rPOD] = lsim(sys,u,t,rPOD);
asys = adjoint(sys);
[~,~,~,~,oPOD] = lsim(asys,u,t,oPOD);

lsim により、状態スナップショット データが生成され、出力としてカスタム POD データが返されます。このデータは R.Options と互換性がある形式で生成されます。

カスタム データを指定し、モデル低次元化アルゴリズムを実行します。オプション CustomLrCustomLo を指定すると、ソフトウェアで組み込みのシミュレーションがバイパスされ、データがそのまま使用されます。

R.Options.CustomLr = rPOD;
R.Options.CustomLo = oPOD;
R = process(R);

これで、次数を選択して低次元化されたモデルを取得する一般的なワークフローに従うことができます。

エネルギー総量の 0.01% を無視する低次元化されたモデルを取得します。

rsys = getrom(R,MaxLoss=1e-4);
order(rsys)
ans = 
9
bodeplot(sys,rsys,"r--")
legend("Original","Reduced")

MATLAB figure

ans = 
  Legend (Original, Reduced) with properties:

         String: {'Original'  'Reduced'}
       Location: 'northeast'
    Orientation: 'vertical'
       FontSize: 8.1000
       Position: [0.7707 0.8532 0.1875 0.0923]
          Units: 'normalized'

  Show all properties

低次元化されたモデルは最大次数のモデルの良好な近似を示しています。

複素係数をもつ状態空間モデルを作成します。

A = [-2-2i -2;1 0];
B = [2;0];
C = [0 0.5+2.5i];
D = 0;
sys = ss(A,B,C,D);

周期 4 秒の矩形波に対するシステムの応答を計算します。

[u,t] = gensig("square",4,12);
[y,tout] = lsim(sys,u,t);

結果の応答データには複素数の出力値が含まれます。

y
y = 193×1 complex

   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
   0.0000 + 0.0000i
      ⋮

入力引数

すべて折りたたむ

動的システム。SISO または MIMO 動的システム モデルか、動的システム モデルの配列として指定します。使用できる動的システムのタイプには次のようなものがあります。

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

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

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

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

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

  • idtfidssidproc モデルなどの同定された LTI モデル。このようなモデルの場合、関数は信頼区間をプロットし、周波数応答の標準偏差を返すこともできます。信頼領域を含む同定されたモデルのステップ応答を参照してください。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です。)

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

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

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

シミュレーションの入力信号。次のいずれかとして指定します。

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

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

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

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

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

R2024b 以降

状態空間モデルのシミュレーションの初期条件。次のいずれかとして指定します。

  • sys の状態ごとに 1 つのエントリをもつベクトル xinit

  • findop で取得した操作条件。操作点オブジェクトを使用して、過去の uw、および y の値が非ゼロである定常状態の操作条件からシミュレーションを開始できます。たとえば、非ゼロの y 値からシミュレーションを開始するには次のように指定できます。

    op = findop(sys,y=3);
    y = lsim(sys,u,t,op)

この引数を省略するか、[] として指定すると、すべてがゼロの初期条件からシミュレーションが開始されます。

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

  • 外因的または明示的な軌跡の場合、p を次元 NNp 列の行列として指定します。ここで、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 の滑らかさに基づいて自動的に方式を選択します。離散化手法の詳細については、連続/離散の変換方法を参照してください。

R2024b 以降

固有直交分解解析。incrementalPOD オブジェクトとして指定します。ProperOrthogonalDecomposition のモデル次数の指定によって提供される組み込みの励起をバイパスし、カスタム励起で生成される独自の状態スナップショット データを提供する場合、lsim で POD 解析を使用します。

入力 xPODIn を空白の incrementalPOD オブジェクトとして指定して新しい解析を開始するか、前のシミュレーションで返されたオブジェクトに追加できます。シミュレーションのたびに、追加の状態データで POD が更新されて強化されていきます。

出力引数

すべて折りたたむ

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

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

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

  • 複素係数をもつシステムの場合、y は複素数値の配列になります。 (R2025a 以降)

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

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

複素係数をもつシステムの場合、x は複素数値の配列になります。 (R2025a 以降)

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

R2024b 以降

固有直交分解解析。incrementalPOD オブジェクトとして返されます。

lsim は、シミュレーションに基づいて追加の状態データで xPODIn を更新し、結果を xPODOut で返します。POD の状態をさらに更新して強化するには、以降の lsim のシミュレーションに xPODOut を渡します。

ヒント

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

  • lsim を使用して作成されたプロットは、複数行のタイトルや、string 配列または文字ベクトルの cell 配列として指定されたラベルをサポートしません。複数行のタイトルやラベルを指定するには、newline 文字を含む単一の string を使用します。

    lsim(sys,u,t)
    title("first line" + newline + "second line");

アルゴリズム

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

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 です。

連続時間のスパース モデル、LTV モデル、LPV モデルの場合、lsimtrbdf または hht の手法に基づいて固定ステップ ソルバーを使用します (sparss モデルおよび mechss モデルの SolverOptions プロパティを参照)。

バージョン履歴

R2006a より前に導入

すべて展開する