ss
状態空間モデル
説明
ss を使用して実数値の、または複素数値の状態空間モデルを作成したり、動的システム モデルを状態空間モデル形式に変換したりします。
状態空間モデルは、1 階微分方程式で関連付けられる一連の入力、出力、および状態変数としての物理システムの数学的な表現です。状態変数は出力変数の値を定義します。ss モデル オブジェクトは SISO または MIMO 状態空間モデルを連続時間または離散時間で表現できます。
連続時間では、状態空間モデルは次の形式をとります。
ここで、x、u および y はそれぞれ状態、入力および出力を表し、A、B、C および D は状態空間行列です。離散時間では、状態空間モデルは以下の形式を取ります。
ss オブジェクトは、A、B、C および D を、サンプル時間、I/O 名、遅延、オフセットなどの情報と共に格納している MATLAB® の連続時間または離散時間状態空間モデルを表します。
状態と入力行列および出力行列を直接指定して、または別の種類のモデル (伝達関数モデル tf など) を変換して、状態空間モデル オブジェクトを作成することができます。詳細については、状態空間モデルを参照してください。ss モデル オブジェクトを使用して次のことができます。
線形解析を実行する
制御設計を実行するための線形時不変 (LTI) モデルを表す
他の LTI モデルと組み合わせて、より複雑なシステムを表現する
作成
構文
説明
は、同定された線形時不変 (LTI) モデル sys = ss(ltiSys,component)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) モデルである場合にのみ使用します。
入力引数
状態行列。Nx 行 Nx 列の行列として指定します。ここで Nx は状態の数です。この入力はプロパティ A の値を設定します。
入力から状態への行列。Nx 行 Nu 列の行列として指定します。ここで Nx は状態の数、Nu は入力の数です。この入力はプロパティ B の値を設定します。
状態から出力への行列。Ny 行 Nx 列の行列として指定します。ここで Nx は状態の数、Ny は出力の数です。この入力はプロパティ C の値を設定します。
直達行列。Ny 行 Nu 列の行列として指定します。ここで Ny は出力の数、Nu は入力の数です。この入力はプロパティ D の値を設定します。
スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。
状態空間形式に変換する動的システム。SISO または MIMO 動的システム モデル、または動的システム モデルの配列として指定します。変換できる動的システムには次のものが含まれます。
genssやuss(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) モデル オブジェクト (入力A、B、CおよびDが数値行列の場合、または別のモデル オブジェクト タイプから変換する場合)。一般化状態空間モデル (
genss) オブジェクト (1 つ以上の行列A、B、CおよびDにrealpパラメーターや一般化行列 (genmat) などの調整可能なパラメーターが含まれている場合)。例については、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間モデルの作成を参照してください。不確かさをもつ状態空間モデル (
uss) オブジェクト (1 つ以上の入力A、B、CおよびDに不確かさをもつ行列が含まれている場合)。不確かさをもつモデルを使用するには Robust Control Toolbox ソフトウェアが必要です。
プロパティ
状態行列。Nx 行 Nx 列の行列として指定します。ここで Nx は状態の数です。状態行列は、目的とする状態空間モデル実現に応じて、次のような様々な方法で表現できます。
モデル正準形式
コンパニオン正準形式
可観測正準形式
可制御正準形式
詳細については、状態空間実現を参照してください。
入力から状態への行列。Nx 行 Nu 列の行列として指定します。ここで Nx は状態の数、Nu は入力の数です。
状態から出力への行列。Ny 行 Nx 列の行列として指定します。ここで Nx は状態の数、Ny は出力の数です。
直達行列。Ny 行 Nu 列の行列として指定します。ここで Ny は出力の数、Nu は入力の数です。D は静的ゲイン行列とも呼ばれ、定常状態の条件下での入力に対する出力の比率を表します。
陰的な、または記述子の状態空間モデルの行列。Nx 行 Nx 列の行列として指定します。E は既定では空であり、これは状態方程式が陽的であることを意味します。陰的な状態方程式 E dx/dt = Ax + Bu を指定するには、このプロパティを A と同じサイズの正方行列に設定します。記述子状態空間モデルの作成の詳細は、dss を参照してください。
R2024a 以降
モデルのオフセット。次のフィールドをもつ構造体として指定します。
| フィールド | 説明 |
|---|---|
u | 入力のオフセット。入力の数と等しい長さのベクトルとして指定します。 |
y | 出力のオフセット。出力の数と等しい長さのベクトルとして指定します。 |
x | 状態のオフセット。状態の数と等しい長さのベクトルとして指定します。 |
dx | 状態微分のオフセット。状態の数と等しい長さのベクトルとして指定します。 |
状態空間モデル配列の場合は、Offsets をモデル配列と同じ次元の構造体配列に設定します。
次の非線形モデルの線形化について考えます。
次に示すように、操作点 (x0,u0) の周囲では、オフセットをもつ状態空間モデルが結果として得られます。
ここで、
線形化で非線形マップの良好な近似を得るには、オフセット δ0、x0、u0、および y0 を含めなければなりません。linearize (Simulink Control Design) コマンドで StoreOffset オプションを使用すると、A、B、C、D とオフセットの両方が返されます。
このプロパティは線形化オフセットの管理に役立ちます。これにより、応答のシミュレーション、モデルの相互接続、モデルの変換などの操作で、それらのオフセットを使用できます。
スケーリングが有効であるか無効であるかを示す logical 値。0 または 1 として指定します。
Scaled が 0 (無効) に設定されている場合、状態空間モデル sys で動作するほとんどの数値アルゴリズムは、数値的な精度の向上のため、状態ベクトルを自動的に再スケーリングします。こうした自動スケーリングは、Scaled を 1 (有効) に設定することで抑止できます。
スケーリングの詳細は、prescale を参照してください。
状態名。次のいずれかとして指定します。
文字ベクトル —
'velocity'などの 1 次モデルの場合文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StateName は、既定ではすべての状態について空 ' ' です。
線形化で状態ブロック パスを管理しやすくするための状態パス。次のいずれかとして指定します。
文字ベクトル — 1 次モデルの場合
文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StatePath は、既定ではすべての状態について空 ' ' です。
状態単位。以下のいずれかとして指定します。
文字ベクトル —
'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 の整数倍で出力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
時間変数の単位。次のいずれかとして指定します。
'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.u は sys.InputName と同じです。
InputName の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
入力チャネル単位。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit を使用して入力信号の単位を指定します。InputUnit はシステムの動作に影響しません。
入力チャネル グループ。構造体として指定します。InputGroup プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1 と 2、および 3 と 5 をそれぞれ含む、controls および noise という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls 入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')既定では、InputGroup はフィールドのない構造体です。
出力チャネル名。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';出力名は自動的に {'measurements(1)';'measurements(2)'} へと拡張されます。
省略形表記 y を使用して OutputName プロパティを参照することもできます。たとえば、sys.y は sys.OutputName と同じです。
OutputName の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
出力チャネル単位。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit を使用して出力信号の単位を指定します。OutputUnit はシステムの動作に影響しません。
出力チャネル グループ。構造体として指定します。OutputGroup を使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1、および 3 と 5 をそれぞれ含む、temperature および measurement という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から 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 つの変数 zeta と w を個別にサンプリングすることにより、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 を表示する際、配列の各エントリは対応する zeta と w の値を取り込みます。
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 オブジェクトに適用できます。
例
次の状態空間行列で定義される SISO 状態空間モデルを作成します。
行列 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.
Model Properties
サンプル時間が 0.25 秒であり次の状態空間行列をもつ状態空間モデルを作成します。
状態空間行列を指定します。
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、B、C および 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.
Model Properties
行列 C および行列 D を見ると、システムには 3 つの入力と 3 つの出力が含まれているため、sys は MIMO です。MIMO 状態空間モデルの詳細については、MIMO 状態空間モデルを参照してください。
次の離散時間、多入力、多出力の、サンプル時間 ts = 0.2 秒の状態行列を使用して、状態空間モデルを作成します。
状態空間行列を指定して、離散時間 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.
Model Properties
状態空間行列を作成し、サンプル時間を指定します。
A = [-0.2516 -0.1684;2.784 0.3549]; B = [0;3]; C = [0 1]; D = 0; Ts = 0.05;
値と名前のペアを使用して状態名と入力名を指定し、状態空間モデルを作成します。
sys = ss(A,B,C,D,Ts,'StateName',{'Position' 'Velocity'},... 'InputName','Force');
状態名と入力名の数は、A、B、C、および D の次元と一致しなければなりません。
入力と出力に名前を付けるのは、MIMO システムで応答プロットを扱うときに有用である可能性があります。
step(sys)

ステップ応答プロットのタイトルの入力名 Force に注目してください。
この例では、別の状態空間モデルから継承された、同じ time プロパティと input unit プロパティをもつ状態空間モデルを作成します。次の状態空間モデルについて考えます。
まず、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 = 1×2 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 = 1×2 cell
{'minutes'} {'minutes'}
この例では、静的ゲインの MIMO 状態空間モデルを作成します。
次の 2 入力、2 出力の静的ゲイン行列について考えます。
ゲイン行列を指定して静的ゲイン状態空間モデルを作成します。
D = [2,4;3,5]; sys1 = ss(D)
sys1 =
D =
u1 u2
y1 2 4
y2 3 5
Static gain.
Model Properties
以下の伝達関数の状態空間モデルを計算します。
伝達関数モデルを作成します。
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 次系の積としてリファクタリングします。
この例では、同定された多項式モデルの測定成分とノイズ成分を 2 つの別々の状態空間モデルに抽出します。
identifiedModel.mat の Box-Jenkins 多項式モデル ltiSys を読み込みます。
load('identifiedModel.mat','ltiSys');
ltiSys は同定された 形式の離散時間モデルで、 は測定成分、 はノイズ成分を表します。
測定成分とノイズ成分を状態空間モデルとして抽出します。
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.
Model Properties
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.
Model Properties
測定成分はプラント モデルとすることができ、ノイズ成分は制御システム設計の外乱モデルとして使用できます。
記述子状態空間モデル (E ≠ I) を作成します。
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.
Model Properties
記述子と陽的な実現には等価なダイナミクスがあることを確認します。
bodeplot(sysd,syse,'g--')
この例では、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間genssモデルを作成する方法を説明します。
ここで、a と b は初期値がそれぞれ -1 と 3 の調整可能なパラメーターです。
realpを使用して調整可能なパラメーターを作成します。
a = realp('a',-1); b = realp('b',3);
a と b の代数式を使って一般化行列を定義します。
A = [1 a+b;0 a*b];
A は、Blocks プロパティに a と b を含む一般化行列です。a と b の初期値から、A の初期値は [1 2;0 -3] です。
固定値状態空間行列を作成します。
B = [-3.0;1.5]; C = [0.3 0]; D = 0;
ssを使用して状態空間モデルを作成します。
sys = ss(A,B,C,D)
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. Model Properties Type "ss(sys)" to see the current value and "sys.Blocks" to interact with the blocks.
sys は、調整可能なパラメーター a および b を含む一般化 LTI モデル (genss) です。
この例では、次の状態空間行列で定義された SISO 状態空間モデルについて考えます。
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.
Model Properties
get コマンドを使用して MATLAB オブジェクトのすべてのプロパティを表示することもできます。
get(sys)
A: [2×2 double]
B: [2×1 double]
C: [0 1]
D: 0
E: []
Offsets: []
Scaled: 0
StateName: {2×1 cell}
StatePath: {2×1 cell}
StateUnit: {2×1 cell}
InternalDelay: [0×1 double]
InputDelay: 0.5000
OutputDelay: 2.5000
InputName: {''}
InputUnit: {''}
InputGroup: [1×1 struct]
OutputName: {''}
OutputUnit: {''}
OutputGroup: [1×1 struct]
Notes: [0×1 string]
UserData: []
Name: ''
Ts: 0
TimeUnit: 'seconds'
SamplingGrid: [1×1 struct]
LTI モデルのむだ時間の指定の詳細については、むだ時間の指定を参照してください。
この例では、次の状態行列を表す状態空間 System object™ について考えます。
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);
次に、負の単位ゲインについて閉ループ状態空間モデルを計算し、閉ループ状態空間 System object 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 コントローラーを設計します。
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.
Model Properties
ターゲット帯域幅を使用し、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.
Model Properties
タイプ '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 = [-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.
Model Properties
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.
Model Properties
フィードバック ループで接続される入力と出力に基づいて 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.
Model Properties
size(sys)
State-space model with 4 outputs, 5 inputs, and 6 states.
sys は、G と K の指定された入力と出力を接続して取得される結果の閉ループ状態空間モデルです。
R2024a 以降
この例では、Simulink® モデルを線形化し、線形化オフセットを ss モデル オブジェクトの Offsets プロパティに格納する方法を示します。
Simulink モデルを開きます。
mdl = 'watertankNLModel';
open_system(mdl)水位の初期条件を指定します。
h0 = 10;
モデルの線形解析ポイントを指定します。
io(1) = linio('watertankNLModel/Step',1,'input'); io(2) = linio('watertankNLModel/H',1,'output');
モデルをシミュレートし、時間スナップショットで操作点を抽出します。
tlin = [0 15 30]; op = findop(mdl,tlin);
線形化の結果をオフセットと共に計算します。
options = linearizeOptions('StoreOffsets',true);
[linsys,~,info] = linearize(mdl,io,op,options);関数により、状態空間モデルの配列 linsys とそれに対応する線形化オフセットが info.Offsets に返されます。
ss モデル オブジェクトの Offsets プロパティには、フィールド u、y、x、dx をもつ構造体が必要です。これらのオフセットは、linearize からの出力 info.Offsets を使用して直接設定できます。
linsys.Offsets = info.Offsets; linsys.Offsets
ans=3×1 struct array with fields:
dx
x
u
y
バージョン履歴
R2006a より前に導入新しい Offsets プロパティは、モデルのオフセットを格納するために使用します。通常、オフセットは非線形ダイナミクスを線形化するときに一部の操作条件で発生します。このプロパティは線形化オフセットの管理に役立ちます。これにより、応答のシミュレーション、モデルの相互接続、モデルの変換などの操作で、それらのオフセットを使用できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)