このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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) モデルである場合にのみ使用します。
入力引数
A
— 状態行列
Nx
行 Nx
列の行列
状態行列。Nx
行 Nx
列の行列として指定します。ここで Nx
は状態の数です。この入力はプロパティ A の値を設定します。
B
— 入力から状態への行列
Nx
行 Nu
列の行列
入力から状態への行列。Nx
行 Nu
列の行列として指定します。ここで Nx
は状態の数、Nu
は入力の数です。この入力はプロパティ B の値を設定します。
C
— 状態から出力への行列
Ny
行 Nx
列の行列
状態から出力への行列。Ny
行 Nx
列の行列として指定します。ここで Nx
は状態の数、Ny
は出力の数です。この入力はプロパティ C の値を設定します。
D
— 直達行列
Ny
行 Nu
列の行列
直達行列。Ny
行 Nu
列の行列として指定します。ここで Ny
は出力の数、Nu
は入力の数です。この入力はプロパティ D の値を設定します。
ts
— サンプル時間
スカラー
スカラーとして指定されたサンプル時間。詳細については、Ts プロパティを参照してください。
ltiSys
— 状態空間形式に変換する動的システム
動的システム モデル | モデル配列
状態空間形式に変換する動的システム。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™ ソフトウェアが必要です。)
component
— 同定されたモデルのコンポーネント
'measured'
(既定値) | 'noise'
| 'augmented'
同定されたモデルの変換対象とするコンポーネント。次のいずれかとして指定します。
'measured'
—sys
の測定成分を変換します。'noise'
—sys
のノイズ成分を変換します。'augmented'
—sys
の測定成分とノイズ成分の両方を変換します。
component
が適用されるのは、sys
が同定された LTI モデルである場合のみです。
同定された LTI モデルおよびその測定成分とノイズ成分の詳細については、同定された LTI モデルを参照してください。
ssSys
— 最小実現または陽的な形式に変換する動的システム モデル
ss
モデル オブジェクト
最小実現または陽的な形式に変換する動的システム モデル。ss
モデル オブジェクトとして指定します。
出力引数
sys
— 出力システム モデル
ss
モデル オブジェクト | genss
モデル オブジェクト | uss
モデル オブジェクト
出力システム モデル。以下として返されます。
状態空間 (
ss
) モデル オブジェクト (入力A
、B
、C
およびD
が数値行列の場合、または別のモデル オブジェクト タイプから変換する場合)。一般化状態空間モデル (
genss
) オブジェクト (1 つ以上の行列A
、B
、C
およびD
にrealp
パラメーターや一般化行列 (genmat
) などの調整可能なパラメーターが含まれている場合)。例については、固定パラメーターと調整可能なパラメーターの両方をもつ状態空間モデルの作成を参照してください。不確かさをもつ状態空間モデル (
uss
) オブジェクト (1 つ以上の入力A
、B
、C
およびD
に不確かさをもつ行列が含まれている場合)。不確かさをもつモデルを使用するには Robust Control Toolbox ソフトウェアが必要です。
プロパティ
A
— 状態行列
Nx
行 Nx
列の行列
状態行列。Nx
行 Nx
列の行列として指定します。ここで Nx
は状態の数です。状態行列は、目的とする状態空間モデル実現に応じて、次のような様々な方法で表現できます。
モデル正準形式
コンパニオン正準形式
可観測正準形式
可制御正準形式
詳細については、状態空間実現を参照してください。
B
— 入力から状態への行列
Nx
行 Nu
列の行列
入力から状態への行列。Nx
行 Nu
列の行列として指定します。ここで Nx
は状態の数、Nu
は入力の数です。
C
— 状態から出力への行列
Ny
行 Nx
列の行列
状態から出力への行列。Ny
行 Nx
列の行列として指定します。ここで Nx
は状態の数、Ny
は出力の数です。
D
— 直達行列
Ny
行 Nu
列の行列
直達行列。Ny
行 Nu
列の行列として指定します。ここで Ny
は出力の数、Nu
は入力の数です。D
は静的ゲイン行列とも呼ばれ、定常状態の条件下での入力に対する出力の比率を表します。
E
— 陰的な状態空間モデルの行列
[]
(既定値) | Nx
行 Nx
列の行列
陰的な、または記述子の状態空間モデルの行列。Nx
行 Nx
列の行列として指定します。E
は既定では空であり、これは状態方程式が陽的であることを意味します。陰的な状態方程式 E dx/dt = Ax + Bu を指定するには、このプロパティを A
と同じサイズの正方行列に設定します。記述子状態空間モデルの作成の詳細は、dss
を参照してください。
Offsets
— モデルのオフセット
[]
(既定値) | 構造体
R2024a 以降
モデルのオフセット。次のフィールドをもつ構造体として指定します。
フィールド | 説明 |
---|---|
u | 入力のオフセット。入力の数と等しい長さのベクトルとして指定します。 |
y | 出力のオフセット。出力の数と等しい長さのベクトルとして指定します。 |
x | 状態のオフセット。状態の数と等しい長さのベクトルとして指定します。 |
dx | 状態微分のオフセット。状態の数と等しい長さのベクトルとして指定します。 |
状態空間モデル配列の場合は、Offsets
をモデル配列と同じ次元の構造体配列に設定します。
次の非線形モデルの線形化について考えます。
次に示すように、操作点 (x0,u0) の周囲では、オフセットをもつ状態空間モデルが結果として得られます。
ここで
線形化で非線形マップの良好な近似を得るには、オフセット δ0、x0、u0、および y0 を含めなければなりません。linearize
(Simulink Control Design) コマンドで StoreOffset
オプションを使用すると、A、B、C、D とオフセットの両方が返されます。
このプロパティは線形化オフセットの管理に役立ちます。これにより、応答のシミュレーション、モデルの相互接続、モデルの変換などの操作で、それらのオフセットを使用できます。
Scaled
— スケーリングが有効であるか無効であるかを示す logical 値。
0
(既定値) | 1
スケーリングが有効であるか無効であるかを示す logical 値。0
または 1
として指定します。
Scaled
が 0
(無効) に設定されている場合、状態空間モデル sys
で動作するほとんどの数値アルゴリズムは、数値的な精度の向上のため、状態ベクトルを自動的に再スケーリングします。こうした自動スケーリングは、Scaled
を 1
(有効) に設定することで抑止できます。
スケーリングの詳細は、prescale
を参照してください。
StateName
— 状態名
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
状態名。次のいずれかとして指定します。
文字ベクトル —
'velocity'
などの 1 次モデルの場合文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StateName
は、既定ではすべての状態について空 ' '
です。
StatePath
— 状態パス
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
線形化で状態ブロック パスを管理しやすくするための状態パス。次のいずれかとして指定します。
文字ベクトル — 1 次モデルの場合
文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StatePath
は、既定ではすべての状態について空 ' '
です。
StateUnit
— 状態単位
' '
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
状態単位。以下のいずれかとして指定します。
文字ベクトル —
'm/s'
などの 1 次モデルの場合文字ベクトルの cell 配列 — 2 つ以上の状態をもつモデルの場合
StateUnit
を使用して、各状態の単位を追跡します。StateUnit
はシステムの動作に影響しません。StateUnit
は、既定ではすべての状態について空 ' '
です。
InternalDelay
— モデルの内部遅延
ベクトル
モデルの内部遅延。ベクトルとして指定します。内部遅延は、たとえば、システムで遅延のあるフィードバック ループを閉じるときや、遅延システムを順番にまたは並列で接続するときに生じます。内部遅延の詳細については、むだ時間のある閉フィードバック ループを参照してください。
連続時間モデルの場合、内部遅延はモデルの TimeUnit
プロパティで指定された時間単位で表現されます。離散時間モデルの場合、内部遅延はサンプル時間 Ts
の整数倍として表現されます。たとえば、InternalDelay = 3
は 3 サンプリング周期の遅延を意味します。
内部遅延の値はプロパティ InternalDelay
を使用して変更できます。ただし、sys.InternalDelay
のエントリの数は、モデルの構造に組み込まれているので変更できません。
InputDelay
— 入力遅延
0
(既定値) | スカラー | Nu
行 1 列のベクトル
各入力チャネルの入力遅延。次のいずれかとして指定します。
スカラー — SISO システムに入力遅延を、または多入力システムのすべての入力に同じ遅延を指定します。
Nu
行 1 列のベクトル — 多入力システムの入力に別々の入力遅延を指定します。Nu
は入力の数です。
連続時間システムの場合は、TimeUnit
プロパティによって指定された時間単位で入力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts
の整数倍で入力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
OutputDelay
— 出力遅延
0
(既定値) | スカラー | Ny
行 1 列のベクトル
各出力チャネルの出力遅延。次のいずれかとして指定します。
スカラー — SISO システムに出力遅延を、または多出力システムのすべての出力に同じ遅延を指定します。
Ny
行 1 列のベクトル — 多出力システムの出力に別々の出力遅延を指定します。Ny
は出力の数です。
連続時間システムの場合は、TimeUnit
プロパティによって指定された時間単位で出力遅延を指定します。離散時間システムの場合は、サンプル時間 Ts
の整数倍で出力遅延を指定します。
詳細については、線形システムでのむだ時間を参照してください。
TimeUnit
— 時間変数の単位
'seconds'
(既定値) | 'nanoseconds'
| 'microseconds'
| 'milliseconds'
| 'minutes'
| 'hours'
| 'days'
| 'weeks'
| 'months'
| 'years'
| ...
時間変数の単位。次のいずれかとして指定します。
'nanoseconds'
'microseconds'
'milliseconds'
'seconds'
'minutes'
'hours'
'days'
'weeks'
'months'
'years'
TimeUnit
の変更は他のプロパティには影響しませんが、システム全体の動作が変わります。chgTimeUnit
を使用して、システム動作を変更せずに時間単位を変換します。
InputName
— 入力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル名。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多入力モデルの入力名を割り当てることもできます。たとえば、sys
が 2 入力モデルである場合は、以下のように入力します。
sys.InputName = 'controls';
入力名は自動的に {'controls(1)';'controls(2)'}
へと拡張されます。
省略形表記 u
を使用して、InputName
プロパティを参照できます。たとえば、sys.u
は sys.InputName
と同じです。
InputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
InputUnit
— 入力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
入力チャネル単位。以下のいずれかとして指定します。
文字ベクトル (単入力モデルの場合)。
文字ベクトルの cell 配列 (多入力モデルの場合)。
''
(いずれの入力チャネルにも単位を指定しない場合)。
InputUnit
を使用して入力信号の単位を指定します。InputUnit
はシステムの動作に影響しません。
InputGroup
— 入力チャネル グループ
構造体
入力チャネル グループ。構造体として指定します。InputGroup
プロパティを使用して、MIMO システムの入力チャネルをグループに割り当て、各グループを名前で参照します。InputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの入力チャネルです。たとえば、入力チャネル 1
と 2
、および 3
と 5
をそれぞれ含む、controls
および noise
という名前の入力グループを作成するには、次のように入力します。
sys.InputGroup.controls = [1 2]; sys.InputGroup.noise = [3 5];
その後、以下を使用して controls
入力からすべての出力にサブシステムを抽出できます。
sys(:,'controls')
既定では、InputGroup
はフィールドのない構造体です。
OutputName
— 出力チャネル名
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル名。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも名前を指定しない場合)。
あるいは、自動的なベクトル拡張を使用して多出力モデルの出力名を割り当てることもできます。たとえば、sys
が 2 出力モデルである場合は、以下のように入力します。
sys.OutputName = 'measurements';
出力名は自動的に {'measurements(1)';'measurements(2)'}
へと拡張されます。
省略形表記 y
を使用して OutputName
プロパティを参照することもできます。たとえば、sys.y
は sys.OutputName
と同じです。
OutputName
の使用目的は次のとおりです。
モデル表示とプロット上のチャネルの識別
MIMO システムのサブシステムの抽出
モデル相互接続時における接続点の指定
OutputUnit
— 出力チャネル単位
''
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
出力チャネル単位。次のいずれかとして指定されます。
文字ベクトル (単出力モデルの場合)。
文字ベクトルの cell 配列 (多出力モデルの場合)。
''
(いずれの出力チャネルにも単位を指定しない場合)。
OutputUnit
を使用して出力信号の単位を指定します。OutputUnit
はシステムの動作に影響しません。
OutputGroup
— 出力チャネル グループ
構造体
出力チャネル グループ。構造体として指定します。OutputGroup
プロパティを使用して、MIMO システムの出力チャネルをグループに割り当て、各グループを名前で参照します。OutputGroup
のフィールド名はグループ名であり、フィールドの値は各グループの出力チャネルです。たとえば、出力チャネル 1
、および 3
と 5
をそれぞれ含む、temperature
および measurement
という名前の出力グループを作成します。
sys.OutputGroup.temperature = [1]; sys.OutputGroup.measurement = [3 5];
その後、以下を使用してすべての入力から measurement
出力にサブシステムを抽出できます。
sys('measurement',:)
既定では、OutputGroup
はフィールドのない構造体です。
Name
— システム名
''
(既定値) | 文字ベクトル
システム名。文字ベクトルとして指定します。たとえば、'system_1'
とします。
Notes
— ユーザー指定のテキスト
{}
(既定値) | 文字ベクトル | 文字ベクトルの cell 配列
システムに関連付けるユーザー指定のテキスト。文字ベクトルまたは文字ベクトルの cell 配列として指定します。たとえば、'System is MIMO'
とします。
UserData
— ユーザー指定のデータ
[]
(既定値) | 任意の MATLAB データ型
システムに関連付けるユーザー指定のデータ。任意の MATLAB データ型として指定します。
SamplingGrid
— モデル配列のサンプリング グリッド
構造体配列
モデル配列のサンプリング グリッド。構造体配列として指定します。
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 状態空間モデル
次の状態空間行列で定義される 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.
離散時間状態空間モデルの作成
サンプル時間が 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);
連続時間 MIMO 状態空間モデル
この例では、慣性テンソル 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.
行列 C
および行列 D
を見ると、システムには 3 つの入力と 3 つの出力が含まれているため、sys
は MIMO です。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.
状態空間モデルの状態名と入力名の指定
状態空間行列を作成し、サンプル時間を指定します。
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 = 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 状態空間モデル
この例では、静的ゲインの MIMO 状態空間モデルを作成します。
次の 2 入力、2 出力の静的ゲイン行列について考えます。
ゲイン行列を指定して静的ゲイン状態空間モデルを作成します。
D = [2,4;3,5]; sys1 = ss(D)
sys1 = D = u1 u2 y1 2 4 y2 3 5 Static gain.
伝達関数の状態空間モデルへの変換
以下の伝達関数の状態空間モデルを計算します。
伝達関数モデルを作成します。
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.
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.
測定成分はプラント モデルとすることができ、ノイズ成分は制御システム設計の外乱モデルとして使用できます。
記述子状態空間モデルの陽的な実現
記述子状態空間モデル (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.
記述子と陽的な実現には等価なダイナミクスがあることを確認します。
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. 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.
get
コマンドを使用して MATLAB オブジェクトのすべてのプロパティを表示することもできます。
get(sys)
A: [2x2 double] B: [2x1 double] C: [0 1] D: 0 E: [] Offsets: [] Scaled: 0 StateName: {2x1 cell} StatePath: {2x1 cell} StateUnit: {2x1 cell} InternalDelay: [0x1 double] InputDelay: 0.5000 OutputDelay: 2.5000 InputName: {''} InputUnit: {''} InputGroup: [1x1 struct] OutputName: {''} OutputUnit: {''} OutputGroup: [1x1 struct] Notes: [0x1 string] UserData: [] Name: '' Ts: 0 TimeUnit: 'seconds' SamplingGrid: [1x1 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.
ターゲット帯域幅を使用し、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 = [-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
は、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 より前に導入R2024a: オフセットをもつ状態空間モデルの作成
新しい Offsets
プロパティは、モデルのオフセットを格納するために使用します。通常、オフセットは非線形ダイナミクスを線形化するときに一部の操作条件で発生します。このプロパティは線形化オフセットの管理に役立ちます。これにより、応答のシミュレーション、モデルの相互接続、モデルの変換などの操作で、それらのオフセットを使用できます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)