Using Simulink | ![]() ![]() |
線形化
Simulinkは、状態空間行列 A, B, C, D の形式で線形モデルを抽出する、関数 linmod
と dlinmod
を提供します。状態空間行列は、つぎのような線形の入出力関係を記述します。
ここで、x, u, y はそれぞれ状態、入力、出力ベクトルです。たとえば、つぎのモデルを lmod
とすると、
このSimulinkシステムの線形モデルを抽出するには、つぎのコマンドを入力します。
[A,B,C,D] = linmod('lmod') A = -2 -1 -1 1 0 0 0 1 -1 B = 1 0 0 C = 0 1 0 0 0 -1 D = 0 1
入力と出力は、Signals & SystemsライブラリにあるInportブロックとOutportブロックを用いて定義しなければなりません。SourcesライブラリのブロックとSinksライブラリのブロックは、入力および出力としては機能しません。Inportブロックは、Sumブロックを用いてSourcesのブロックと併用することができます。データが状態空間型であるか、またはLTIオブジェクトに変換されると、Control System Toolbox内の関数を適用して、さらに解析を続けることができます。
sys = ss(A,B,C,D);
bode(A,B,C,D) または bode(sys)
step(A,B,C,D) または step(sys) impulse(A,B,C,D) または impulse(sys) lsim(A,B,C,D,u,t) または lsim(sys,u,t)
Control System ToolboxとRobust Control Toolbox内の他の関数は、線形制御システム設計のために使用することができます。
モデルが非線形である場合、線形化されたモデルを抽出する操作点を選択することができます。非線形モデルは、モデルを抽出する摂動のサイズに対しても敏感です。これらは、打ち切り誤差と丸め誤差間の調整を図るように選択しなければなりません。linmod
に対するオプションの引数で、操作点と摂動点を指定します。
[A,B,C,D] = linmod('sys', x, u, pert, xpert, upert)
離散システム、または連続系と離散系の混成システムの場合、線形化のために関数 dlinmod
を使用します。これは、右辺の2番目の引数で線形化を実行するサンプル時間を指定しなければならないということを除いて、linmod
と同じ呼び出し構文をもっています。詳細については、linfun
コマンドの説明を参照してください。
DerivativeまたはTransport Delayブロックを含むモデルを線形化するために linmod
を使用するのはトラブルのもとです。線形化の前に、これらのブロックを、問題を回避する特別に設計されたブロックで置き換えてください。これらのブロックは、Simulink Extrasサブライブラリ内のLinearizationライブラリにあります。Extrasライブラリには、Blocksets & Toolboxesアイコンを開いてアクセスします。
Derivativeブロックを使用する場合は、他のブロックに導関数の項を組み入れるように試みることもできます。たとえば、Transfer Fcnブロックと直列のDerivativeブロックがある場合、つぎの形式の単一のTransfer Fcnブロックを用いた方がより実現しやすくなります(ただし、これが常に可能であるとは限りません)。
この例では、図の左側のブロックは右側のブロックで置き換えることができます。
![]() | To Workspaceブロックの使用法 | 平衡点の決定 | ![]() |