メインコンテンツ

initial

状態空間モデルの初期状態に対するシステム応答

    説明

    状態空間モデルおよびスパース状態空間モデルについて、initial は初期状態 xinit に対するシステムの自由応答 y を計算します。

    • 連続時間:

      x˙=dx0+A(xx0),x(t0)=xinity=y0+C(xx0)

    • 離散時間:

      x[k+1]=dx0+A(x[k]x0)x[k0]=xinity=y0+C(x[k]x0)

    これは、u(t) がオフセット値 u0 に保持される場合のシステム応答です。

    線形時変状態空間モデルまたは線形パラメーター変動状態空間モデルの場合、initial は初期状態 xinit、初期パラメーター pinit (LPV モデル)、およびオフセット値に保持される入力 (u(t) = u0(t) または u(t) = u0(t,p)) を使用して応答を計算します。これは、局所的な線形ダイナミクスの初期条件応答に対応します。

    [y,tOut] = initial(sys,IC) は、初期条件 IC から動的システム sys の自由初期応答 y を計算します。時間ベクトル tOutsys の時間単位で表されます。initial では、システム ダイナミクスに基づいてシミュレーションのタイム ステップと期間が自動的に決まります。

    [y,tOut] = initial(sys,IC,t) は、t で指定されたタイム ステップで応答をシミュレートします。タイム ステップを定義するために以下を指定できます。

    • 最終シミュレーション時間 (スカラー値を使用)。

    • 最初と最終のシミュレーション時間 (2 要素ベクトルを使用)。 (R2023b 以降)

    • すべてのタイム ステップ (ベクトルを使用)。

    [y,tOut] = initial(sys,IC,t,p) は、LPV モデルのパラメーターの軌跡 p を指定します。 (R2023a 以降)

    [y,tOut,x] = initial(___) は、状態軌跡 x を返します。

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

    initial(___) は、前述のすべての入力引数の組み合わせについて、sys の初期条件応答を既定のプロット オプションでプロットします。プロットをさらにカスタマイズするには、initialplot を使用します。

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

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

    すべて折りたたむ

    この例では、5 つの状態をもつランダムな状態空間モデルを生成し、初期状態に対するシステム応答のプロットを作成します。

    rng("default")
    sys = rss(5);
    x0 = [1,2,3,4,5];
    initial(sys,x0)

    MATLAB figure

    次の状態空間モデルの応答をプロットします。

    [x˙1x˙2]=[-0.5572-0.78140.78140][x1x2]y=[1.96916.4493][x1x2].

    次の初期条件を取ります。

    x(0)=[10].

    a = [-0.5572, -0.7814; 0.7814, 0];
    c = [1.9691  6.4493];
    x0 = [1 ; 0];
    
    sys = ss(a,[],c,[]);
    initial(sys,x0)

    MATLAB figure

    次の 2 つの入力、2 つの出力の動的システムについて考えます。

    sys(s)=[03ss2+s+10s+1s+52s+6].MIMO system

    初期条件応答プロットは状態空間モデルに対してのみサポートされているため、sys を状態空間形式に変換します。

    sys = ss([0, tf([3 0],[1 1 10]) ; tf([1 1],[1 5]), tf(2,[1 6])]);
    size(sys)
    State-space model with 2 outputs, 2 inputs, and 4 states.
    

    結果の状態空間モデルには 4 つの状態があります。そのため、初期条件ベクトルに 4 つの要素を与えます。

    x0 = [0.3,0.25,1,4];

    初期条件応答プロットを作成します。

    initial(sys,x0);

    MATLAB figure

    結果のプロットには、sys の各出力について 1 つ、計 2 つのサブプロットが含まれています。

    この例では、次の零点-極-ゲイン モデルの初期条件応答を調べて、プロットを tFinal = 15 秒に制限します。

    initial は状態空間モデルのみをサポートしているため、まず zpk モデルを ss モデルに変換します。

    sys = ss(zpk(-1,[-0.2+3j,-0.2-3j],1)*tf([1 1],[1 0.05]));
    tFinal = 15;
    x0 = [4,2,3];

    次に、初期条件応答プロットを作成します。

    initial(sys,x0,tFinal);

    MATLAB figure

    この例では、3 つの動的システムの初期条件応答をプロットします。

    まず、3 つのモデルを作成し、初期条件を与えます。すべてのモデルは状態数が同じでなければなりません。

    rng('default');
    sys1 = rss(4); 
    sys2 = rss(4);
    sys3 = rss(4);
    x0 = [1,1,1,1];

    5 秒にわたる時間ベクトル t を使用して、3 つのモデルの初期条件応答をプロットします。

    t = 0:0.1:5;
    initial(sys1,'r--',sys2,'b',sys3,'g-.',x0,t)

    MATLAB figure

    2 つの状態をもつ次の状態空間モデルの初期条件応答データを抽出します。

    [x˙1x˙2]=[-0.5572-0.78140.78140][x1x2]y=[1.96916.4493][x1x2].

    次の初期条件を使用します。

    x(0)=[10].

    a = [-0.5572, -0.7814; 0.7814, 0];
    c = [1.9691  6.4493];
    x0 = [1 ; 0];
    sys = ss(a,[],c,[]);
    [y,tOut,x] = initial(sys,x0);

    配列 y は、時間サンプル数 (tOut の長さ) と同じ行数、および出力数と同じ列数をもちます。同様に配列 x は、時間サンプル数 (tOut の長さ) と等しい行数、および状態数と同じ列数をもちます。

    この例では、6 つの状態と、3 出力 2 入力をもつ状態空間モデルの初期条件応答データを抽出します。

    まず、モデルを作成して初期条件を指定します。

    rng('default');
    sys = rss(6,3,2); 
    x0 = [0.1,0.3,0.05,0.4,0.75,1];

    15 秒にわたる時間ベクトル t を使用して、モデルの初期条件応答を抽出します。

    t = 0:0.1:15;
    [y,tOut,x] = initial(sys,x0,t);

    配列 y は、時間サンプル数 (tOut の長さ) と同じ行数、および出力数と同じ列数をもちます。同様に配列 x は、時間サンプル数 (tOut の長さ) と等しい行数、および状態数と同じ列数をもちます。

    この例では、throttleLPV.m に、15 度から 90 度の開範囲で線形的に動作する非線形エンジン スロットルのダイナミクスが定義されています。

    lpvss を使用してモデルを作成します。このモデルは、モデルの最初の状態であるスロットル角度でパラメーター化されます。

    c0 = 50;
    k0 = 120;
    K0 = 1e4;
    b0 = 4e4;
    yf = 15*K0/(k0+K0);
    Ts = 0;
    sys = lpvss("x1",@(t,p) throttleLPV(p,c0,k0,b0,K0),Ts,0,15);

    このモデルの初期応答を軌跡 p(t) に沿って計算できます。

    小さい角速度で線形範囲の下限から開始した場合の応答を計算します。パラメーターの軌跡を指定し、findop を使用して初期条件を求めます。

    pFcn = @(t,x,u)x(1);
    xinit = [15;10]; 
    pinit = xinit(1);
    t = linspace(0,0.6,500);
    ic = findop(sys,t(1),pinit,x=xinit);
    y = initial(sys,ic,t,pFcn);
    plot(t,y)

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

    線形範囲の上限にヒットするのに十分な角速度で線形範囲の下限から開始した場合の応答を計算します。

    xinit2 = [15;5e3]; 
    pinit2 = xinit2(1);
    t2 = linspace(0,1,1000);
    ic2 = findop(sys,t2(1),pinit2,x=xinit2);
    y2 = initial(sys,ic2,t2,pFcn);
    plot(t2,y2)

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

    データ関数を表示します。

    type throttleLPV.m
    function [A,B,C,D,E,dx0,x0,u0,y0,Delays] = throttleLPV(x1,c,k,b,K)
    % LPV representation of engine throttle dynamics.
    % Ref: https://www.mathworks.com/help/sldo/ug/estimate-model-parameter-values-gui.html
    % x1: scheduling parameter (throttle angle; first state of the model)
    % c,k,b,K: physical parameters
    
    A = [0 1; -k -c];
    B = [0; b];
    C = [1 0];
    D = 0;
    E = [];
    Delays = [];
    x0 = [];
    u0 = [];
    y0 = [];
    
    % Nonlinear displacement value
    NLx = max(90,x1(1))-90+min(x1(1),15)-15;
    % Capture the nonlinear contribution as a state-derivative offset
    dx0 = [0;-K*NLx]; 
    

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

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

    任意の開始状態に対するシステムの初期条件応答を計算します。

    ic = [1 2];
    [y,t] = initial(sys,ic);

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

    y
    y = 334×1 complex
    
       1.0000 + 5.0000i
       1.0301 + 5.1157i
       1.0607 + 5.1854i
       1.0868 + 5.2140i
       1.1047 + 5.2062i
       1.1116 + 5.1670i
       1.1056 + 5.1012i
       1.0854 + 5.0135i
       1.0506 + 4.9082i
       1.0014 + 4.7894i
       0.9383 + 4.6608i
       0.8623 + 4.5255i
       0.7747 + 4.3864i
       0.6769 + 4.2458i
       0.5706 + 4.1057i
          ⋮
    
    

    入力引数

    すべて折りたたむ

    動的システム。SISO または MIMO 動的システム モデルか、動的システム モデルの配列として指定します。使用できる状態空間モデルのタイプは以下のみです。

    • 連続時間または離散時間の数値 ss モデル。

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

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

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

    • sparss モデルや mechss モデルなどのスパース状態空間モデル。スパース状態空間モデルの最終時間 tFinal を指定しなければなりません。

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

    sys がモデルの配列である場合、この関数は同じ座標軸上に配列のすべてのモデルの応答をプロットします。

    応答を計算するタイム ステップ。次のいずれかの値として指定します。

    • 正のスカラー tFinalt = 0 から t = tFinal までの応答を計算します。

    • 2 要素ベクトル [t0 tFinal]t = t0 から t = tFinal までの応答を計算します。 (R2023b 以降)

    • ベクトル Ti:dt:Tft で指定された時間点の応答を計算します。

      • 連続時間システムの場合、dt は連続システムに対する離散近似のサンプル時間です。

      • サンプル時間が指定された離散時間システムの場合、dtsys のサンプル時間のプロパティ Ts と一致しなければなりません。

      • サンプル時間が未指定 (Ts = -1) の離散時間システムの場合、dt1 でなければなりません。

    • [] — システム ダイナミクスに基づいて自動的に時間値を選択します。

    tFinal または [t0 tFinal] のいずれかを使用して時間範囲を指定する場合、次のようになります。

    • 連続時間システムの場合、関数はシステム ダイナミクスに基づいてステップ サイズと点の数を自動的に決定します。

    • サンプル時間が指定された離散時間システムの場合、関数は sys のサンプル時間をステップ サイズとして使用します。

    • サンプル時間が未指定 (Ts = -1) の離散時間システムの場合、関数は tFinal をサンプリング周期の数と解釈し、1 秒のサンプル時間でシミュレートします。

    tsysTimeUnit プロパティで指定された時間単位を使用して表します。

    初期条件。次のいずれかとして指定します。

    • 初期状態値。状態の数と等しい長さのベクトル xinit として指定します。

    • 応答の構成。RespConfig オブジェクトとして指定します。このオブジェクトを使用して LPV モデルの初期状態と初期パラメーター値を指定します。 (R2024b 以降)

    • 操作条件。findop を使用して作成したオブジェクトとして指定します。 (R2024b 以降)

    R2023a 以降

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

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

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

    • 内因的または暗黙的な軌跡の場合、pp = F(t,x,u) (連続時間) および p = F(k,x,u) (離散時間) の形式の関数ハンドルとして指定し、時間 t または時間サンプル k、状態 x、および入力 u の関数としてパラメーターを与えます。この入力方法には初期パラメーター値が必要です。初期条件を指定するには、IC 引数を使用します。

    出力引数

    すべて折りたたむ

    応答データ。配列として返されます。

    • SISO システムの場合、y は、t (指定した場合) または tOut (t を指定しない場合) と同じ長さの列ベクトルです。

    • 単入力、多出力システムの場合、y は、時間サンプルと同じ行数および出力と同じ列数の行列です。したがって、yj 番目の列、つまり y(:,j) には、入力から j 番目の出力への応答が含まれます。

    • MIMO システムの場合、y の次元は NNy 列になります。ここで、

      • N は時間サンプルの数です。

      • Ny はシステムの出力数です。

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

    応答が計算される時間。ベクトルとして返されます。特定の時間ベクトル t を指定しない場合、initial は、システム ダイナミクスに基づいてこの時間ベクトルを選択します。時間は sys の時間単位で表されます。

    状態軌跡。配列として返されます。x には、t または tOut の各時間における sys の状態の発展が含まれます。x の次元は NNx 列です。ここで、以下となります。

    • N は時間サンプルの数です。

    • Nx は状態の数です。

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

    R2023a 以降

    パラメーターの軌跡。配列として返されます。sys が線形パラメーター変動 (lpvss) モデルの場合、pOut には、sys のパラメーターの発展が含まれます。pOut の次元は NNp 列です。ここで、以下となります。

    • N は時間サンプルの数です。

    • Np はパラメーターの数です。

    ヒント

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

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

      initial(sys)
      title("first line" + newline + "second line");

    バージョン履歴

    R2006a より前に導入

    すべて展開する