操作点での線形化
線形化とは
操作点での小規模な摂動に対するシステムの応答を特定することは、システムとコントローラーの設計において重要な作業です。操作点を特定した後、その操作点の周りでモデルを線形化し、これによりシステムの応答と安定性を調べることができます。Simscape™ モデルで操作点を特定する方法については、操作点の検出を参照してください。
線形化モデルとは
操作点付近のシステム状態 x、入力 u、出力 y を、その操作点と比較し、x – x0、u – u0、y – y0 の形式で表すことができます。便宜上、ベクトルから操作点を引き、 x – x0 → x などのようにベクトルを移動します。
システム ダイナミクスが明確には時間に依存せず、操作点が定常状態の場合、状態へのシステム応答および定常状態付近の入力摂動は次のような "線形時不変" (LTI) 状態空間モデルに近似的に支配されます。
dx/dt = A·x + B·u
y = C·x + D·u.
行列 A、B、C、D には、シミュレーション時間に依存しない成分や構造体があります。A の固有値が負の場合、システムは操作点での状態の変化に対して安定しています。
操作点が定常状態でない場合や、システム ダイナミクスが明確に時間に依存している場合、操作点付近での線形化ダイナミクスはより複雑になります。行列 A、B、C、D は一定ではなく、シミュレーション時間 t0 と操作点 x0 および u0 に依存します。
ヒント
入出力がない閉システムを線形化し、非ゼロの行列 A を取得することはできますが、自明でない線形入出力モデルを取得するには u に少なくとも 1 つの入力成分、y に少なくとも 1 つの出力成分がそれぞれ必要です。
例
パイロットが、地上に対して水平で、速度が一定で、高度も一定になるように航空機を操縦しています (または航空機のシミュレーションを実行しています)。航空機のパイロットや設計者にとって非常に重要な問題は、「航空機が突風などの外乱によって定常状態でなくなった場合に、定常状態に戻ることができるか」、つまり「この定常状態は安定しているか」ということです。操作点が不安定な場合、飛行経路が定常状態から離れた状態になり、安定した状態を維持するためには人間による操作または自動操作が必要となることがあります。
線形化に適した操作点の選択
モデルに定常状態やその他の操作点 (状態 x0 と入力 u0) が存在する場合もありますが、このような操作点が線形化に適しているとは限りません。重要なのは「実際のシステム ダイナミクスと比べて線形化近似がどの程度すぐれているか」という点です。
わずかな摂動を加えると、問題がある操作点で大きな非対称を示す場合があります。特定の方向に摂動を加えると非線形性が大きい動作を示し、別の方向では滑らかな動作を示します。
小さい摂動では状態値が不連続に変化することがあり、現在の状態は線形近似に適していません。
大幅に非線形または不連続な操作点は線形化には適していません。このようなモデルは、完全なシミュレーションで、不連続点が一切発生しないようにして解析し、さらに入力、パラメーター、初期条件を変動させてシステムを摂動させる必要があります。一般的な例として作動システムがあり、これは厳密な拘束や端部停止を除外して線形化する必要があります。
ヒント
隣接した複数の操作点で線形化することにより、不適切な操作点を確認できます。結果が大幅に異なる場合、操作点が大幅に非線形であるか、不連続になっています。
物理モデルの線形化
以下の方法で、Simscape コンポーネントが含まれるモデルから数値的線形状態空間モデルを作成できます。
ヒント
線形化解析には Simulink® Control Design™ 製品を推奨します。
独立状態と従属状態
基本的な Simulink モデルと異なる重要な点として、物理ネットワークでの状態は通常、独立ではありません。これは、一部の状態が拘束によって他の状態に依存しているためです。
独立状態はシステム変数のサブセットで、独立した (制約のない) Simscape 動的変数とその他の Simulink 状態で構成されています。
従属状態は、Simscape 代数変数と従属 (制約付き) Simscape 動的変数で構成されています。
Simscape の動的変数と代数変数の詳細は、Simscape でのシミュレーションの仕組みを参照してください。
完全で縮小されていない LTI A、B、C、D の各行列は次のような構造になっています。
A
行列: サイズはn_states
×n_states
です。サイズがn_ind
×n_ind
(n_ind
は独立状態の数) の部分行列を除き、すべて 0 です。B
行列: サイズはn_states
×n_inputs
です。サイズがn_ind
×n_inputs
の部分行列を除き、すべて 0 です。C
行列: サイズはn_outputs
×n_states
です。サイズがn_outputs
×n_ind
の部分行列を除き、すべて 0 です。D
行列: サイズはn_outputs
×n_inputs
で、どこでも非ゼロになることができます。
状態の独立サブセットの取得. 最小限の線形解では、システム状態の 1 つの独立サブセットのみを使用します。A、B、C、D の各行列から、最小限の入出力線形モデルを次の方法で取得できます。
Simulink Control Design ソフトウェアによる線形化
メモ
この節で説明する手法では、Simulink Control Design 製品が必要となります。
この製品の機能は、Simscape 物理ネットワーク ラインやブロック上で直接使用せず、モデルの Simulink ライン上で使用しなければなりません。
この手法では、操作仕様に基づきモデルを平衡化することにより保存された操作点オブジェクトの処理から始めます。
操作点オブジェクトでモデルを線形化するには、関数 linearize
(Simulink Control Design) を使用し、必要に応じてカスタマイズします。この結果生成される状態空間オブジェクトには、A、B、C、D の各行列があります。
Simulink ツールストリップを介してグラフィカル ユーザー インターフェイスを使用することもできます。[アプリ] タブの [制御システム] で、[モデル線形化器] をクリックします。
Simulink Control Design を使用した Simscape モデルの線形化の詳細については、Simscape ネットワークの線形化 (Simulink Control Design)を参照してください。
Simulink の関数 linmod
および dlinmod
による線形化
Simulink の関数 linmod
および dlinmod
を使用する方法はいくつかあり、方法によっては線形化の結果が異なる場合があります。これらの関数を使用するにはモデルを開く必要はなく、MATLAB® パスにモデル ファイルがあれば使用できます。
Simulink の線形化の詳細については、モデルの線形化を参照してください。
ヒント
モデルに連続状態がある場合は、linmod
を使用します (連続状態は Simscape の既定です)。モデルで連続状態と離散状態が混在している場合、または離散状態しかない場合は、dlinmod
を使用します。
(Solver Configuration ブロックで) ローカル ソルバーが有効になっている状態でモデルを線形化することはできません。
既定の状態と入力での線形化. 状態や入力を指定しなくても linmod
を呼び出すことができます。コマンド ラインで「linmod('
」と入力します。modelname
')
linmod
をこの形式で使用すると、Simulink の線形化により、シミュレーションの最初のステップと同様の一貫した初期条件が得られます。どの初期条件 (バネの平衡からの初期オフセットなど) も、シミュレーションが初期時間から開始されている場合と同様に設定されます。
linmod
を使用すると、外部で指定された (内部システム ダイナミクス以外の) 信号の時間を既定値以外に変更することができます。詳細は、関数 linmod
のリファレンス ページを参照してください。
初期定常状態での定常状態ソルバーによる線形化. Simscape 定常状態ソルバーを使用すると、任意の操作点で線形化できます。
モデルで 1 つ以上の Solver Configuration ブロックを開きます。
線形化する物理ネットワークの [定常状態からシミュレーションを開始] チェック ボックスをオンにします。
Solver Configuration のダイアログ ボックスを閉じ、変更したモデルを保存します。
コマンド ラインで「
linmod('
」と入力します。modelname
')
linmod
を使用すると、シミュレーションの最初のステップで線形化が実行されます。この場合、初期状態は操作点 (定常状態) となります。
定常状態ソルバーの設定の詳細は、Solver Configuration ブロックのリファレンス ページを参照してください。
指定した状態と入力による線形化 — 状態の一貫性の確保. linmod
を呼び出すと状態と入力を指定できます。コマンド ラインで「linmod('
」と入力します。追加引数はそれぞれ、シミュレーションの線形化に使用する定常状態 x0 と入力 u0 を指定します。状態を modelname
',x0,u0)linmod
に指定する場合、自己矛盾がなく、ソルバーの許容誤差内であることを確認してください。
linmod
をこの形式で使用すると、Simulink による線形化では初期条件を得られません。モデルのすべての状態が独立している必要はないため、矛盾している状態を linmod
で線形化対象として指定することも可能です (ただし、これは誤った処理です)。
(ソルバーの許容誤差内で) 自己矛盾が発生している状態を指定すると、線形化の試行時に Simscape ソルバーのコマンド ラインで警告が表示されます。その後、Simscape ソルバーは x0
の成分の一部を (場合によっては大幅に) 変更して、矛盾が発生しないようにします。
ヒント
自己矛盾が発生しない状態を取得する最も簡単な方法は、任意のシミュレーション時間から状態を取得することです。たとえば、モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで [状態] チェック ボックスをオンにすると、シミュレーション実行中の状態値を時系列で取得できます。
Simulink Linearization ブロックによる線形化
モデルに Timed-Based Linearization ブロックまたは Trigger-Based Linearization ブロックを追加してシミュレーションを実行すると、Simscape モデルから線形化された状態空間モデルを生成することができます。これらのブロックでは、指定時間や内部トリガー ポイントまでの時間ベースのシミュレーションを、その時間やトリガー ポイントにおける状態ベースの線形化と結合します。
これらのブロックの完全な詳細は、各ブロックのリファレンス ページを参照してください。
メモ:
モデルに PS Constant Delay ブロックや PS Variable Delay ブロック、あるいは Simscape 言語の delay
演算子を使用するカスタム ブロックが含まれる場合は、モデルを線形化するときに Timed-Based Linearization ブロックまたは Trigger-Based Linearization ブロックを使用し、指定の遅延時間より長い時間にわたってモデルをシミュレートすることを推奨します。