Main Content

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

ss

説明

ss を使用して実数値の、または複素数値の状態空間モデルを作成したり、動的システム モデルを状態空間モデル形式に変換したりします。ss を使用して、一般化状態空間 (genss) モデルや不確かさをもつ状態空間 (uss (Robust Control Toolbox)) モデルを作成することもできます。

状態空間モデルは、一時微分方程式で関連付けられる一連の入力、出力、および状態変数としての物理システムの数学的な表現です。状態変数は出力変数の値を定義します。ss モデル オブジェクトは SISO または MIMO 状態空間モデルを連続時間または離散時間で表現できます。

連続時間では、状態空間モデルは次の形式をとります。

x˙=Ax+Buy=Cx+Du

ここで、xu および y はそれぞれ状態入力および状態出力を表し、ABC および D は状態空間行列です。ss オブジェクトは、ABC および D を、サンプル時間、名前、入力および出力に固有の遅延などの情報と共に格納している MATLAB® の状態空間モデルを表します。

状態と入力行列および出力行列を直接指定して、または別の種類のモデル (伝達関数モデル tf など) を変換して、状態空間モデル オブジェクトを作成することができます。詳細については、状態空間モデルを参照してください。ss モデル オブジェクトを使用して次のことができます。

  • 線形解析を実行する

  • 制御設計を実行するための線形時不変 (LTI) モデルを表す

  • 他の LTI モデルと組み合わせて、より複雑なシステムを表現する

作成

説明

sys = ss(A,B,C,D) は、次の形式の連続時間状態空間モデル オブジェクトを作成します。

x˙=Ax+Buy=Cx+Du

たとえば、Nx 個の状態、Ny 個の出力、Nu 個の入力をもつプラントについて考えます。状態空間行列は次のようになります。

  • A は、NxNx 列の実数値または複素数値の行列です。

  • B は、NxNu 列の実数値または複素数値の行列です。

  • C は、NyNx 列の実数値または複素数値の行列です。

  • D は、NyNu 列の実数値または複素数値の行列です。

sys = ss(A,B,C,D,ts) は、サンプル時間 ts (秒) をもつ次の形式の離散時間状態空間モデル オブジェクトを作成します。

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

サンプル時間を未指定のままにするには、ts-1 に設定します。

sys = ss(A,B,C,D,ltiSys) は、入力名および出力名、内部遅延およびサンプル時間の値などのプロパティをモデル ltisys から継承した状態空間モデルを作成します。

sys = ss(D) は、静的ゲイン D を表す状態空間モデルを作成します。出力状態空間モデルは ss([],[],[],D) と等価です。

sys = ss(___,Name,Value) は、前述の任意の入力引数の組み合わせについて Name,Value のペアの引数を 1 つ以上使用して、状態空間モデルのプロパティを設定します。

sys = ss(ltiSys) は、動的システム モデル ltiSys を状態空間モデルに変換します。ltiSys に調整可能な要素、または不確かさの要素が含まれている場合、ss は、それらの要素に対して、それぞれ現在の値、またはノミナル値を使用します。

sys = ss(ltiSys,component) は、同定された線形時不変 (LTI) モデル ltiSys のうち、指定された component の測定成分、ノイズ成分またはその両方を ss オブジェクト形式に変換します。この構文は、ltiSys が、idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox)idpoly (System Identification Toolbox) または idgrey (System Identification Toolbox) オブジェクトなどの、識別された (LTI) モデルである場合にのみ使用します。

sys = ss(ssSys,'minimal') は、状態が制御不可能でも観測不可能でもない、最小限の状態空間実現を返します。この実現は minreal(ss(sys)) と等価です。ここで、行列 A は可能な限り最小の次元をもちます。

状態空間形式への変換は、SISO の場合は一意的には定義されません。また、MIMO の場合には、実現が最小になることも保証されません。詳細は、推奨される使用表現を参照してください。

sys = ss(ssSys,'explicit') は動的システム状態空間モデル SSsys の明示的な状態空間実現 (E = I) を返します。ssSys が非プロパーの場合、ss はエラーを返します。明示的な状態空間実現の詳細については、状態空間モデルを参照してください。

入力引数

すべて展開する

状態行列。NxNx 列の行列として指定します。ここで Nx は状態の数です。この入力はプロパティ A の値を設定します。

状態空間への入力行列。NxNu 列の行列として指定します。ここで Nx は状態の数、Nu は入力の数です。この入力はプロパティ B の値を設定します。

状態空間からの出力行列。NyNx 列の行列として指定します。ここで Nx は状態の数、Ny は出力の数です。この入力はプロパティ C の値を設定します。

直達行列。NyNu 列の行列として指定します。ここで Ny は出力の数、Nu は入力の数です。この入力はプロパティ D の値を設定します。

スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。

状態空間形式に変換する動的システム。SISO または MIMO 動的システム モデル、または動的システム モデルの配列として指定します。変換できる動的システムには次のものが含まれます。

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

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

    結果として得られる状態空間モデルは次を仮定します。

    • 調整可能な制御設計ブロックについては調整可能なコンポーネントの現在値。

    • 不確かさをもつ制御設計ブロックについてはモデルのノミナル値。

  • idtf (System Identification Toolbox)idss (System Identification Toolbox)idproc (System Identification Toolbox)idpoly (System Identification Toolbox)idgrey (System Identification Toolbox) モデルなどの、同定された LTI モデル。同定されたモデルの変換する成分を選択するには、component を指定します。component を指定しない場合、ss は、同定されたモデルの測定成分を既定で変換します。(同定されたモデルを使用するには System Identification Toolbox™ ソフトウェアが必要です)。

同定されたモデルの変換対象とするコンポーネント。次のいずれかとして指定します。

  • 'measured'sys の測定成分を変換します。

  • 'noise'sys のノイズ成分を変換します。

  • 'augmented'sys の測定成分とノイズ成分の両方を変換します。

component が適用されるのは、sys が同定された LTI モデルである場合のみです。

同定された LTI モデルおよびその測定成分とノイズ成分の詳細については、同定された LTI モデルを参照してください。

最小実現または明示的な形式に変換する動的システム モデル。ss モデル オブジェクトとして指定します。

出力引数

すべて展開する

出力システム モデル。以下として返されます。

  • 状態空間 (ss) モデル オブジェクト (入力 ABC および D が数値行列の場合、または別のモデル オブジェクト タイプから変換する場合)。

  • 一般化状態空間モデル (genss) オブジェクト (1 つ以上の行列 ABC および Drealp パラメーターや一般化行列 (genmat) などの調整可能なパラメーターが含まれている場合)。例については、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間モデルの作成を参照してください。

  • 不確かさをもつ状態空間モデル (uss) オブジェクト (1 つ以上の入力 ABC および D に不確かさをもつ行列が含まれている場合)。不確かさをもつモデルを使用するには Robust Control Toolbox ソフトウェアが必要です。

プロパティ

すべて展開する

状態行列。NxNx 列の行列として指定します。ここで Nx は状態の数です。状態行列は、目的とする状態空間モデル実現に応じて、次のような様々な方法で表現できます。

  • モデル正準形式

  • コンパニオン正準形式

  • 可観測正準形式

  • 可制御正準形式

詳細については、正準状態空間実現を参照してください。

状態空間への入力行列。NxNu 列の行列として指定します。ここで Nx は状態の数、Nu は入力の数です。

状態空間からの出力行列。NyNx 列の行列として指定します。ここで Nx は状態の数、Ny は出力の数です。

直達行列。NyNu 列の行列として指定します。ここで Ny は出力の数、Nu は入力の数です。D は静的ゲイン行列とも呼ばれ、定常状態の条件下での入力に対する出力の比率を表します。

暗黙的な、または記述子の状態空間モデルの行列。NxNx 列の行列として指定します。E は既定では空であり、これは状態方程式が明示的であることを意味します。暗黙的な状態方程式 E dx/dt = Ax + Bu を指定するには、このプロパティを A と同じサイズの正方行列に設定します。記述子状態空間モデルの作成の詳細は、dss を参照してください。

スケーリングが有効であるか無効であるかを示す logical 値。0 または 1 として指定します。

Scaled0 (無効) に設定されている場合、状態空間モデル sys で動作するほとんどの数値アルゴリズムは、数値的な精度の向上のため、状態ベクトルを自動的に再スケーリングします。こうした自動スケーリングは、Scaled1 (有効) に設定することで抑止できます。

スケーリングの詳細は、prescale を参照してください。

状態名。次のいずれかとして指定します。

  • 文字ベクトル — 'velocity' などの 1 次モデルの場合。

  • 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合。

StateName は、既定ではすべての状態について空 ' ' です。

状態単位。以下のいずれかとして指定します。

  • 文字ベクトル — 'm/s' などの 1 次モデルの場合。

  • 文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合。

StateUnit を使用して、各状態の単位を追跡します。StateUnit はシステムの動作に影響しません。StateUnit は、既定ではすべての状態について空 ' ' です。

モデルの内部遅延。ベクトルとして指定します。内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細については、むだ時間のある閉フィードバック ループを参照してください。

連続時間モデルの場合、内部遅延はモデルの TimeUnit プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプル時間 Ts の整数倍として表現されます。たとえば InternalDelay = 3 は 3 サンプリング周期の遅延を意味します。

内部遅延の値はプロパティ InternalDelay を使用して変更できます。ただし、sys.InternalDelay のエントリの数は、モデルの構造に組み込まれているので変更できません。

各入力チャネルの入力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。

  • Nu 行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu は入力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で入力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

各出力チャネルの出力遅延。次のいずれかとして指定します。

  • スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。

  • Ny 行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny は出力の数です。

連続時間システムの場合は、TimeUnit プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts の整数倍で出力遅延を指定します。

詳細については、線形システムでのむだ時間を参照してください。

サンプル時間。以下として指定します。

  • 0 (連続時間システムの場合)。

  • 離散時間システムのサンプリング周期を表す正のスカラー。TsTimeUnit プロパティによって指定される時間単位で指定します。

  • -1 (サンプル時間が指定されていない離散時間システムの場合)。

Ts を変更してもモデルの離散化やリサンプリングは行われません。連続時間表現と離散時間表現の間の変換を行うには、c2dd2c を使用します。離散時間システムのサンプル時間を変更するには、d2d を使用します。

時間変数の単位。次のいずれかとして指定します。

  • 'nanoseconds'

  • 'microseconds'

  • 'milliseconds'

  • 'seconds'

  • 'minutes'

  • 'hours'

  • 'days'

  • 'weeks'

  • 'months'

  • 'years'

TimeUnit の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit を使用して、システム動作を変更せずに時間単位を変換します。

入力チャネル名。以下のいずれかとして指定します。

  • 文字ベクトル (単入力モデルの場合)。

  • 文字ベクトルの cell 配列 (多入力モデルの場合)。

  • '' (いずれの入力チャネルにも名前を指定しない場合)。

あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys が 2 入力モデルである場合は、以下のようになります。

sys.InputName = 'controls';

入力名は自動的に {'controls(1)';'controls(2)'} へと拡張されます。

省略形表記 u を使用して、InputName プロパティを参照できます。たとえば、sys.usys.InputName と同じです。

InputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

入力チャネル単位。以下のいずれかとして指定します。

  • 文字ベクトル (単入力モデルの場合)。

  • 文字ベクトルの cell 配列 (多入力モデルの場合)。

  • '' (いずれの入力チャネルにも単位を指定しない場合)。

InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。

入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。以下に例を示します。

sys.InputGroup.controls = [1 2];
sys.InputGroup.noise = [3 5];

これは、入力チャネル 12、および 35 をそれぞれ含む、controls および noise という名前の入力グループを作成します。その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。

sys(:,'controls')

既定では、InputGroup はフィールドのない構造体です。

出力チャネル名。次のいずれかとして指定されます。

  • 文字ベクトル (単出力モデルの場合)。

  • 文字ベクトルの cell 配列 (多出力モデルの場合)。

  • '' (いずれの出力チャネルにも名前を指定しない場合)。

あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力力モデルである場合は、以下のようになります。

sys.OutputName = 'measurements';

出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。

省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.ysys.OutputName と同じです。

OutputName の使用目的は次のとおりです。

  • モデル表示とプロット上のチャネルの識別

  • MIMO システムのサブシステムの抽出

  • モデル相互接続時における接続点の指定

出力チャネル単位。次のいずれかとして指定されます。

  • 文字ベクトル (単出力モデルの場合)。

  • 文字ベクトルの cell 配列 (多出力モデルの場合)。

  • '' (いずれの出力チャネルにも単位を指定しない場合)。

OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。

出力チャネル グループ。構造体として指定します。OutputGroup プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。以下に例を示します。

sys.OutputGroup.temperature = [1];
sys.InputGroup.measurement = [3 5];

これは、出力チャネル 1、および 35 をそれぞれ含む、temperature および measurement という出力グループを作成します。その後、以下を使用してすべての入力から measurement 出力にサブシステムを抽出できます。

sys('measurement',:)

既定では、OutputGroup はフィールドのない構造体です。

システム名。文字ベクトルとして指定します。たとえば、'system_1' とします。

システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO' とします。

システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。

モデル配列のサンプリング グリッド。構造体配列として指定します。

SamplingGrid を使用して、モデル配列の各モデルに関連付けられている変数値を追跡します。これには同定された線形時不変 (IDLTI) モデル配列も含まれます。

構造体のフィールド名をサンプリング変数の名前に設定します。フィールドの値を、配列内の各モデルに関連付けられているサンプリングされた変数の値に設定します。すべてのサンプリング変数は数値スカラーでなければならず、サンプル値のすべての配列はモデル配列の次元と一致しなければなりません。

たとえば、t = 0:10 の各時点で線形時変システムのスナップショットを記録することにより、線形モデルの 11 行 1 列の配列 sysarr を作成することができます。次のコードは線形モデルでの時間サンプルを格納します。

 sysarr.SamplingGrid = struct('time',0:10)

同様に、2 つの変数 zetaw を個別にサンプリングすることにより、6 行 9 列のモデル配列 M を作成できます。次のコードは (zeta,w) の値を M にマッピングします。

[zeta,w] = ndgrid(<6 values of zeta>,<9 values of w>)
M.SamplingGrid = struct('zeta',zeta,'w',w)

M を表示する際、配列の各エントリは対応する zetaw の値を取り込みます。

M
M(:,:,1,1) [zeta=0.3, w=5] =
 
        25
  --------------
  s^2 + 3 s + 25
 

M(:,:,2,1) [zeta=0.35, w=5] =
 
         25
  ----------------
  s^2 + 3.5 s + 25
 
...

複数のパラメーター値または操作点で Simulink® モデルを線形化することにより生成されたモデル配列の場合、SamplingGrid には配列の各エントリに対応する変数値が自動的に入力されます。たとえば、Simulink Control Design™ のコマンド linearize (Simulink Control Design) および slLinearizer (Simulink Control Design) により、SamplingGrid が自動的に入力されます。

既定では、SamplingGrid はフィールドのない構造体です。

オブジェクト関数

以下のリストには、ss モデル オブジェクトで使用できる関数の代表的なサブセットが含まれています。一般に、動的システム モデルに適用できるすべての関数は ss オブジェクトに適用できます。

すべて展開する

step動的システムのステップ応答プロット、ステップ応答データ
impulse動的システムのインパルス応答プロット、インパルス応答データ
lsim動的システムの任意の入力への時間応答をシミュレートする
bode周波数応答、またはゲインと位相データのボード線図
nyquist周波数応答のナイキスト線図
nichols周波数応答のニコルス線図
bandwidth周波数応答帯域幅
pole動的システムの極
zeroSISO 動的システムの零点とゲイン
pzplotプロットのカスタマイズ オプションを使用した動的システム モデルの極-零点プロット
marginゲイン余裕、位相余裕、および交差周波数
zpk零点-極-ゲイン モデルを作成するか、零点-極-ゲイン モデルに変換する
tf伝達関数モデル
c2d連続時間から離散時間へモデルを変換
d2c離散時間から連続時間へモデルを変換
d2d離散時間モデルのリサンプリング
feedback複数のモデルのフィードバック接続
connect動的システムのブロック線図相互接続
series2 つのモデルの直列接続
parallel2 つのモデルの並列接続
pidtune線形プラント モデルのための PID 調整アルゴリズム
rlocus動的システムの根軌跡プロット
lqr線形 2 次レギュレーター (LQG) 設計
lqg線形 2 次ガウシアン (LQG) 設計
lqi線形 2 次積分制御
kalmanカルマン フィルター設計、カルマン推定器

すべて折りたたむ

次の状態空間行列で定義される SISO 状態空間モデルを作成します。

A=[-1.5-210]B=[0.50]C=[01]D=0

行列 A、B、C および D を指定して状態空間モデルを作成します。

A = [-1.5,-2;1,0];
B = [0.5;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D)
sys =
 
  A = 
         x1    x2
   x1  -1.5    -2
   x2     1     0
 
  B = 
        u1
   x1  0.5
   x2    0
 
  C = 
       x1  x2
   y1   0   1
 
  D = 
       u1
   y1   0
 
Continuous-time state-space model.

サンプル時間が 0.25 秒であり次の状態空間行列をもつ状態空間モデルを作成します。

A=[01-5-2]B=[03]C=[01]D=[0]

状態空間行列を指定します。

A = [0 1;-5 -2];
B = [0;3];
C = [0 1];
D = 0;

サンプル時間を指定します。

Ts = 0.25;

状態空間モデルを作成します。

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

この例では、慣性テンソル J と振幅が 0.2 の減衰力 F で角を中心にして回転しているキューブについて考えます。システムへの入力は駆動トルクであり、角速度が出力です。このキューブの状態空間行列は次のようになります。

A=-J-1F,B=J-1,C=I,D=0,where,J=[8-3-3-38-3-3-38]andF=[0.20000.20000.2]

行列 ABC および D を指定して、連続時間状態空間モデルを作成します。

J = [8 -3 -3; -3 8 -3; -3 -3 8];
F = 0.2*eye(3);
A = -J\F;
B = inv(J);
C = eye(3);
D = 0;
sys = ss(A,B,C,D)
sys =
 
  A = 
             x1        x2        x3
   x1  -0.04545  -0.02727  -0.02727
   x2  -0.02727  -0.04545  -0.02727
   x3  -0.02727  -0.02727  -0.04545
 
  B = 
           u1      u2      u3
   x1  0.2273  0.1364  0.1364
   x2  0.1364  0.2273  0.1364
   x3  0.1364  0.1364  0.2273
 
  C = 
       x1  x2  x3
   y1   1   0   0
   y2   0   1   0
   y3   0   0   1
 
  D = 
       u1  u2  u3
   y1   0   0   0
   y2   0   0   0
   y3   0   0   0
 
Continuous-time state-space model.

行列 C および行列 D を見ると、システムには 3 つの入力と 3 つの出力が含まれているため、sys は MIMO です。MIMO 状態空間モデルの詳細については、MIMO 状態空間モデルを参照してください。

次の離散時間、多入力、多出力の、サンプル時間 ts = 0.2 秒の状態行列を使用して、状態空間モデルを作成します。

A=[-700-10]B=[5002]C=[1-4-40.5]D=[0-220]

状態空間行列を指定して、離散時間 MIMO 状態空間モデルを作成します。

A = [-7,0;0,-10];
B = [5,0;0,2];
C = [1,-4;-4,0.5];
D = [0,-2;2,0];
ts = 0.2;
sys = ss(A,B,C,D,ts)
sys =
 
  A = 
        x1   x2
   x1   -7    0
   x2    0  -10
 
  B = 
       u1  u2
   x1   5   0
   x2   0   2
 
  C = 
        x1   x2
   y1    1   -4
   y2   -4  0.5
 
  D = 
       u1  u2
   y1   0  -2
   y2   2   0
 
Sample time: 0.2 seconds
Discrete-time state-space model.

状態空間行列を作成し、サンプル時間を指定します。

A = [0 1;-5 -2];
B = [0;3];
C = [0 1];
D = 0;
Ts = 0.05;

値と名前のペアを使用して状態名と入力名を指定し、状態空間モデルを作成します。

sys = ss(A,B,C,D,Ts,'StateName',{'Position' 'Velocity'},...
    'InputName','Force');

状態名と入力名の数は、ABC、および D の次元と一致しなければなりません。

入力と出力に名前を付けるのは、MIMO システムで応答プロットを扱うときに有用である可能性があります。

step(sys)

ステップ応答プロットのタイトルの入力名 Force に注目してください。

この例では、別の状態空間モデルから継承された、同じ time プロパティと input unit プロパティをもつ状態空間モデルを作成します。次の状態空間モデルについて考えます。

A1=[-1.5-210]B1=[0.50]C1=[01]D1=5A2=[7-102]B2=[0.852]C2=[1014]D2=2

まず、TimeUnit プロパティおよび InputUnit プロパティが 'minutes' に設定された状態空間モデル sys1 を作成します。

A1 = [-1.5,-2;1,0];
B1 = [0.5;0];
C1 = [0,1];
D1 = 5;
sys1 = ss(A1,B1,C1,D1,'TimeUnit','minutes','InputUnit','minutes');

sys1 の time プロパティおよび input unit プロパティが 'minutes' に設定されていることを検証します。

propValues1 = [sys1.TimeUnit,sys1.InputUnit]
propValues1 = 1x2 cell
    {'minutes'}    {'minutes'}

sys1 から継承されたプロパティをもつ 2 つ目の状態空間モデルを作成します。

A2 = [7,-1;0,2];
B2 = [0.85;2];
C2 = [10,14];
D2 = 2;
sys2 = ss(A2,B2,C2,D2,sys1);

sys2 の time および input units が sys1 から継承されていることを検証します。

propValues2 = [sys2.TimeUnit,sys2.InputUnit]
propValues2 = 1x2 cell
    {'minutes'}    {'minutes'}

この例では、静的ゲインの MIMO 状態空間モデルを作成します。

次の 2 入力、2 出力の静的ゲイン行列 m について考えます。

D=[2435]

ゲイン行列を指定して静的ゲイン状態空間モデルを作成します。

D = [2,4;3,5];
sys1 = ss(D)
sys1 =
 
  D = 
       u1  u2
   y1   2   4
   y2   3   5
 
Static gain.

以下の伝達関数の状態空間モデルを計算します。

H(s)=[s+1s3+3s2+3s+2s2+3s2+s+1]

伝達関数モデルを作成します。

H = [tf([1 1],[1 3 3 2]) ; tf([1 0 3],[1 1 1])];

このモデルを状態空間モデルに変換します。

sys = ss(H);

状態空間モデルのサイズを調べます。

size(sys)
State-space model with 2 outputs, 1 inputs, and 5 states.

状態の数は、H(s) の SISO エントリの累積次数に等しくなります。

H(s) の最小実現を得るには、次のように入力します。

sys = ss(H,'minimal');
size(sys)
State-space model with 2 outputs, 1 inputs, and 3 states.

結果として得られるモデルの次数は 3 です。これは、H(s) を表現するために必要とされる最小の状態数です。この状態数を確認するには、H(s) を 1 次系と 2 次系の積としてリファクタリングします。

H(s)=[1s+2001][s+1s2+s+1s2+3s2+s+1]

この例では、同定された多項式モデルの測定成分とノイズ成分を 2 つの別々の状態空間モデルに抽出します。

identifiedModel.mat の Box-Jenkins 多項式モデル ltiSys を読み込みます。

load('identifiedModel.mat','ltiSys');

ltiSys は同定された y(t)=BFu(t)+CDe(t) 形式の離散時間モデルで、BF は測定成分、CD はノイズ成分を表します。

測定成分とノイズ成分を状態空間モデルとして抽出します。

sysMeas = ss(ltiSys,'measured') 
sysMeas =
 
  A = 
            x1       x2
   x1    1.575  -0.6115
   x2        1        0
 
  B = 
        u1
   x1  0.5
   x2    0
 
  C = 
            x1       x2
   y1  -0.2851   0.3916
 
  D = 
       u1
   y1   0
 
  Input delays (sampling periods): 2 
 
Sample time: 0.04 seconds
Discrete-time state-space model.
sysNoise = ss(ltiSys,'noise')
sysNoise =
 
  A = 
           x1      x2      x3
   x1   1.026   -0.26  0.3899
   x2       1       0       0
   x3       0     0.5       0
 
  B = 
       v@y1
   x1  0.25
   x2     0
   x3     0
 
  C = 
             x1        x2        x3
   y1     0.319  -0.04738   0.07106
 
  D = 
          v@y1
   y1  0.04556
 
Input groups:        
    Name     Channels
    Noise       1    
                     
Sample time: 0.04 seconds
Discrete-time state-space model.

測定成分はプラント モデルとすることができ、ノイズ成分は制御システム設計の外乱モデルとして使用できます。

記述子状態空間モデル (EI) を作成します。

a = [2 -4; 4 2];
b = [-1; 0.5];
c = [-0.5, -2];
d = [-1];
e = [1 0; -3 0.5];
sysd = dss(a,b,c,d,e);

システムの明示的な実現 (E = I) を計算します。

syse = ss(sysd,'explicit')
syse =
 
  A = 
        x1   x2
   x1    2   -4
   x2   20  -20
 
  B = 
       u1
   x1  -1
   x2  -5
 
  C = 
         x1    x2
   y1  -0.5    -2
 
  D = 
       u1
   y1  -1
 
Continuous-time state-space model.

記述子と明示的な実現には等価なダイナミクスがあることを確認します。

bodeplot(sysd,syse,'g--')

この例では、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間genssモデルを作成する方法を説明します。

A=[1a+b0ab],B=[-3.01.5],C=[0.30],D=0,

ここで、ab は初期値がそれぞれ -13 の調整可能なパラメーターです。

realp を使用して調整可能なパラメーターを作成します。

a = realp('a',-1);
b = realp('b',3);

ab の代数式を使って一般化行列を定義します。

A = [1 a+b;0 a*b];

A は、Blocks プロパティに ab を含む一般化行列です。ab の初期値から、A の初期値は [1 2;0 -3] です。

固定値状態空間行列を作成します。

B = [-3.0;1.5];
C = [0.3 0];
D = 0;

ss を使用して状態空間モデルを作成します。

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

  Generalized continuous-time state-space model with 1 outputs, 1 inputs, 2 states, and the following blocks:
    a: Scalar parameter, 2 occurrences.
    b: Scalar parameter, 2 occurrences.

Type "ss(sys)" to see the current value, "get(sys)" to see all properties, and "sys.Blocks" to interact with the blocks.

sys は、調整可能なパラメーター a および b を含む一般化 LTI モデル (genss) です。

この例では、次の状態空間行列で定義された SISO 状態空間モデルについて考えます。

A=[-1.5-210]B=[0.50]C=[01]D=0

0.5 秒の入力遅延と 2.5 秒の出力遅延を考慮し、行列 A、B、C および D を表す状態空間モデルオブジェクトを作成します。

A = [-1.5,-2;1,0];
B = [0.5;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D,'InputDelay',0.5,'OutputDelay',2.5)
sys =
 
  A = 
         x1    x2
   x1  -1.5    -2
   x2     1     0
 
  B = 
        u1
   x1  0.5
   x2    0
 
  C = 
       x1  x2
   y1   0   1
 
  D = 
       u1
   y1   0
 
  Input delays (seconds): 0.5 
  Output delays (seconds): 2.5 
 
Continuous-time state-space model.

get コマンドを使用して MATLAB オブジェクトのすべてのプロパティを表示することもできます。

get(sys)
                A: [2x2 double]
                B: [2x1 double]
                C: [0 1]
                D: 0
                E: []
           Scaled: 0
        StateName: {2x1 cell}
        StateUnit: {2x1 cell}
    InternalDelay: [0x1 double]
       InputDelay: 0.5000
      OutputDelay: 2.5000
               Ts: 0
         TimeUnit: 'seconds'
        InputName: {''}
        InputUnit: {''}
       InputGroup: [1x1 struct]
       OutputName: {''}
       OutputUnit: {''}
      OutputGroup: [1x1 struct]
            Notes: [0x1 string]
         UserData: []
             Name: ''
     SamplingGrid: [1x1 struct]

LTI モデルのむだ時間の指定の詳細については、むだ時間の指定を参照してください。

この例では、次の状態行列を表す状態空間システム オブジェクトについて考えます。

A=[-1.2-1.60100010],B=[100],C=[00.51.3],D=0,

ss コマンドを使用して状態空間オブジェクト sys を作成します。

A = [-1.2,-1.6,0;1,0,0;0,1,0];
B = [1;0;0];
C = [0,0.5,1.3];
D = 0;
sys = ss(A,B,C,D);

次に、負の単位ゲインについて閉ループ状態空間モデル オブジェクトを計算し、閉ループ状態空間システム オブジェクト sysFeedback を見つけます。

sysFeedback = feedback(sys,1);
P = pole(sysFeedback)
P = 3×1 complex

  -0.2305 + 1.3062i
  -0.2305 - 1.3062i
  -0.7389 + 0.0000i

単位ゲインのフィードバック ループは、すべての極が負の実数部をもつため安定しています。閉ループの極を確認すると、安定性を 2 進数で評価できます。業務上は、安定性が堅牢 (または脆弱) であるかがわかると非常に役に立ちます。堅牢性を示すものとして、安定性が失われる前の、ループ ゲインの変化の度合いがあります。根軌跡プロットを使用すると、ループが安定している k 値の範囲を推定できます。

rlocus(sys)

ループ ゲインの変化は堅牢な安定性を示す 1 つの要素にすぎません。一般的に、不完全なプラントのモデル化は、ゲインと位相の両方が正確にわかっていないことを意味します。モデル化誤差はゲインの交差周波数 (開ループ ゲインが 0dB の周波数) 付近で最も悪影響を及ぼすため、この周波数でどの程度の位相の変化を許容できるかも問題になります。

ゲイン余裕と位相余裕は、以下のようにボード線図に表示できます。

bode(sys)
grid

より詳細な例については、ゲインと位相余裕の評価を参照してください。

この例では、次の行列で表されるシステムについて、0.75 rad/s のターゲット帯域幅をもつ 2-DOF PID コントローラーを設計します。

A=[-0.5-0.110],B=[10],C=[01],D=0.

ss コマンドを使用して状態空間オブジェクト sys を作成します。

A = [-0.5,-0.1;1,0];
B = [1;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D)
sys =
 
  A = 
         x1    x2
   x1  -0.5  -0.1
   x2     1     0
 
  B = 
       u1
   x1   1
   x2   0
 
  C = 
       x1  x2
   y1   0   1
 
  D = 
       u1
   y1   0
 
Continuous-time state-space model.

ターゲット帯域幅を使用し、pidtuneを使用して 2-DOF コントローラーを生成します。

wc = 0.75;
C2 = pidtune(sys,'PID2',wc)
C2 =
 
                       1              
  u = Kp (b*r-y) + Ki --- (r-y) + Kd*s (c*r-y)
                       s              

  with Kp = 0.513, Ki = 0.0975, Kd = 0.577, b = 0.344, c = 0
 
Continuous-time 2-DOF PID controller in parallel form.

タイプ 'PID2' を使用すると、pidtune により 2-DOF コントローラーが生成され、pid2 オブジェクトとして表現されます。表示によりこの結果を確認します。表示にはまた、pidtune がすべてのコントローラー係数を、設定点の重み b および c を含めて調整し、性能とロバスト性のバランスを取っていることも示されます。

ライブ エディターによる対話型の PID 調整については、PID コントローラーの調整ライブ エディター タスクを参照してください。このタスクを使用すると、PID コントローラーを対話的に設計し、ライブ スクリプト用の MATLAB コードを自動的に生成できます。

スタンドアロン アプリによる対話型の PID 調整には、PID 調整器を使用します。アプリを使用したコントローラーの設計の例については、高速設定値追従用の PID コントローラーの設計を参照してください。

5 つの入力と 4 つの出力をもつ状態空間プラント G、および 3 つの入力と 2 つの出力をもつ状態空間フィードバック コントローラー K を考えてみましょう。プラント G の出力 1、3、4 をコントローラー K の入力に接続し、コントローラー出力をプラントの入力 4 と 2 に接続しなければなりません。

この例では、次の一連の行列によって表される G および K の両方についての 2 つの連続時間状態空間モデルについて考えます。

AG=[-30.40.3-0.5-2.8-0.80.20.8-3],BG=[0.400.30.20-0.2-10.1-0.9-0.50.60.90.50.20],CG=[0-0.1-10-0.21.6-0.71.51.2-1.4-0.20],DG=[0000-100.4-0.700.900.30000.20000]

AK=[-0.22.10.7-2.2-0.1-2.2-0.42.3-0.2],BK=[-0.1-2.1-0.3-0.100.6100.8],CK=[-100-0.4-0.20.3],DK=[00000-1.2]

AG = [-3,0.4,0.3;-0.5,-2.8,-0.8;0.2,0.8,-3];
BG = [0.4,0,0.3,0.2,0;-0.2,-1,0.1,-0.9,-0.5;0.6,0.9,0.5,0.2,0];
CG = [0,-0.1,-1;0,-0.2,1.6;-0.7,1.5,1.2;-1.4,-0.2,0];
DG = [0,0,0,0,-1;0,0.4,-0.7,0,0.9;0,0.3,0,0,0;0.2,0,0,0,0];
sysG = ss(AG,BG,CG,DG)
sysG =
 
  A = 
         x1    x2    x3
   x1    -3   0.4   0.3
   x2  -0.5  -2.8  -0.8
   x3   0.2   0.8    -3
 
  B = 
         u1    u2    u3    u4    u5
   x1   0.4     0   0.3   0.2     0
   x2  -0.2    -1   0.1  -0.9  -0.5
   x3   0.6   0.9   0.5   0.2     0
 
  C = 
         x1    x2    x3
   y1     0  -0.1    -1
   y2     0  -0.2   1.6
   y3  -0.7   1.5   1.2
   y4  -1.4  -0.2     0
 
  D = 
         u1    u2    u3    u4    u5
   y1     0     0     0     0    -1
   y2     0   0.4  -0.7     0   0.9
   y3     0   0.3     0     0     0
   y4   0.2     0     0     0     0
 
Continuous-time state-space model.
AK = [-0.2,2.1,0.7;-2.2,-0.1,-2.2;-0.4,2.3,-0.2];
BK = [-0.1,-2.1,-0.3;-0.1,0,0.6;1,0,0.8];
CK = [-1,0,0;-0.4,-0.2,0.3];
DK = [0,0,0;0,0,-1.2];
sysK = ss(AK,BK,CK,DK)
sysK =
 
  A = 
         x1    x2    x3
   x1  -0.2   2.1   0.7
   x2  -2.2  -0.1  -2.2
   x3  -0.4   2.3  -0.2
 
  B = 
         u1    u2    u3
   x1  -0.1  -2.1  -0.3
   x2  -0.1     0   0.6
   x3     1     0   0.8
 
  C = 
         x1    x2    x3
   y1    -1     0     0
   y2  -0.4  -0.2   0.3
 
  D = 
         u1    u2    u3
   y1     0     0     0
   y2     0     0  -1.2
 
Continuous-time state-space model.

フィードバック ループで接続される入力と出力に基づいて feedout および feedin ベクトルを定義します。

feedin = [4 2];
feedout = [1 3 4];
sys = feedback(sysG,sysK,feedin,feedout,-1)
sys =
 
  A = 
           x1      x2      x3      x4      x5      x6
   x1      -3     0.4     0.3     0.2       0       0
   x2    1.18   -2.56    -0.8    -1.3    -0.2     0.3
   x3  -1.312   0.584      -3    0.56    0.18   -0.27
   x4   2.948  -2.929   -2.42  -0.452   1.974   0.889
   x5   -0.84   -0.11     0.1    -2.2    -0.1    -2.2
   x6   -1.12   -0.26      -1    -0.4     2.3    -0.2
 
  B = 
            u1       u2       u3       u4       u5
   x1      0.4        0      0.3      0.2        0
   x2    -0.44       -1      0.1     -0.9     -0.5
   x3    0.816      0.9      0.5      0.2        0
   x4  -0.2112    -0.63        0        0      0.1
   x5     0.12        0        0        0      0.1
   x6     0.16        0        0        0       -1
 
  C = 
           x1      x2      x3      x4      x5      x6
   y1       0    -0.1      -1       0       0       0
   y2  -0.672  -0.296     1.6    0.16    0.08   -0.12
   y3  -1.204   1.428     1.2    0.12    0.06   -0.09
   y4    -1.4    -0.2       0       0       0       0
 
  D = 
          u1     u2     u3     u4     u5
   y1      0      0      0      0     -1
   y2  0.096    0.4   -0.7      0    0.9
   y3  0.072    0.3      0      0      0
   y4    0.2      0      0      0      0
 
Continuous-time state-space model.
size(sys)
State-space model with 4 outputs, 5 inputs, and 6 states.

sys は、GK の指定された入力と出力を接続して取得される結果の閉ループ状態空間モデルです。

R2006a より前に導入