代数ループの概念
"代数ループ" は、モデル内の信号ループに直達をもつブロックしかない場合に発生します。"直達" とは、現在のタイム ステップの出力値の計算に現在のタイム ステップの入力値を使用するブロックを指します。直達をもつブロックしかない信号ループでは、同じタイム ステップ内においてブロックの出力値と入力値の間に循環依存関係が生じます。その結果、方程式が各タイム ステップの解を必要とする代数方程式となり、計算コストが増加します。
ブロックには常に直達をもつものもあれば、特定のブロック構成でのみ直達をもつものもあります。直達をもつブロックの例を次に示します。
非ゼロの D 行列をもつ State-Space ブロック
分子の次数と分母の次数が同じ Transfer Fcn ブロック
零点と極の数が同じ Zero-Pole ブロック
直達がないブロックでは、前のタイム ステップからの入力値を格納する 1 つ以上の状態変数が維持されます。直達がないブロックの例としては、Integrator ブロックや Unit Delay ブロックがあります。
ヒント
ブロックに直達があるかどうかを確認するには、ブロックのリファレンス ページでブロックの特性の表を参照してください。すべてのブロックについてのブロックの特性を表示するには、Block Support Table ブロックまたは関数 showblockdatatypetable
を使用します。
ブロックの出力値 xa を入力値 u から減算する Sum ブロックを含むモデルについて考えます。
このモデルでは次の方程式が実装されます。
xa = u – xa.
この単純なループの解は xa = u/2 です。
数学的な解釈
"常微分方程式" (ODE) のシミュレーション用にいくつかの数値ソルバーが用意されています。ODE は次のように記述できる方程式系です。
ここで、x は状態ベクトルで、t は独立時間変数です。
方程式系には、状態ベクトルの微分係数ではなく、独立変数と状態ベクトルに関する追加の制約を含むものがあります。このような方程式を "微分代数方程式" (DAE) と呼びます。
"代数" は微分係数を含まない方程式を意味します。工学で使用される DAE は、以下のような半陽的な形式で表現できます。
ここで、
f と g はベクトル関数の場合があります。
最初の方程式は微分方程式です。
2 番目の方程式は代数方程式です。
微分変数のベクトルは x です。
代数変数のベクトルは xa です。
モデルでは、代数ループは代数制約を表します。代数ループを含むモデルは、微分代数方程式系を定義します。代数ループは、ODE ソルバーを使用するシミュレーションの各ステップで xa に関して数値的に解かれます。
単純な DAE 系を実装する次のモデルを考えます。内側のループは代数制約を表し、外側のループは微分方程式を表しています。
このモデルでは次の DAE 系が実装されます。
x' = xa
0 = u - x - 2xa
ODE ソルバーの各ステップで、x' の微分係数を計算する前に、代数ループ ソルバーで xa に関する代数制約を解かなければなりません。
物理的な解釈
代数制約:
物理的なシステムのモデル化で発生します。多くの場合、質量とエネルギーの保存などの保存法則に関係して発生します。
モデルに特定の座標系を選択すると発生します。
動的システムにおいてシステム応答に設計制約を課すことができます。
Simscape™ を使用して、物理ネットワークとしての機械、電気、油圧、その他の物理領域にまたがるシステムをモデル化します。Simscape は、モデルの動作を特徴付ける DAE を作成します。ソフトウェアは、これらの方程式をモデルの他の部分と統合してから、DAE を直接解きます。Simulink® は異なる物理領域のコンポーネントの変数を同時に解いて、代数ループの問題を回避します。
疑似代数ループ
Atomic Subsystem または Model ブロックによって Simulink が代数ループを検出する設定になっているときは、サブシステムの内容に入力から出力への直達が含まれていない場合であっても、"疑似代数ループ" が発生します。Atomic Subsystem を作成するときは、すべての Inport ブロックは直達となるため、代数ループが発生します。
まず、含められたモデルで考えてみましょう。このモデルの表すプラントのシンプルな比例制御は、次の式で表されます。
これは、次のような状態空間形式で書き直すことができます。
この方程式は、代数変数も直達ももたず、代数ループももちません。
以下の手順に従って、モデルを変更します。
サブシステムに Controller ブロックと Plant ブロックを含めます。
Subsystem ダイアログ ボックスで、[Atomic サブシステムとして扱う] を選択してサブシステムを [Atomic] にします。
[モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] パラメーターを [
error
] に設定します。
このモデルをシミュレーションすると、Atomic Subsystem 内のパスは直達ではありませんが、サブシステムが直達であるために、代数ループが発生します。シミュレーションは代数ループ エラーで停止します。
代数ループ ソルバーの動作
モデルに代数ループが含まれている場合、Simulink は各タイム ステップで非線形ソルバーを使って代数ループの解を求めます。ソルバーは反復処理を実行し、その代数制約の解がある場合はそれを決定します。その結果、代数ループをもつモデルは、もたないモデルよりも実行が遅くなります。
Simulink は、dogleg 信頼領域アルゴリズムを使用して、代数ループの解を求めます。使われる許容誤差は、ODE ソルバー Reltol
と Abstol
より小さくなります。これは、Simulink が "明示的 ODE メソッド" を使って、インデックスが -1 の微分代数方程式 (DAE) を解くためです。
代数ループ ソルバーが機能するには、
ループ ソルバーによってループを切断してループを解くことができるブロックが 1 つ存在していなければなりません。
モデルは実数の倍精度信号でなければなりません。
基本となっている代数制約は平滑化関数でなければならない。
たとえば、モデルに 2 つの入力 (1 つは加算、もう 1 つは減算) をもつ Sum ブロックがあるとします。Sum ブロックの出力を入力の 1 つに接続した場合、すべてのブロックが直達を含んでいる代数ループが形成されます。
Sum ブロックは入力が不明であれば出力を計算できません。Simulink は代数ループを検出し、ソルバーは反復ループを使用して解を求めます。Sum ブロックの例では、次のようにして正しい解が計算されます。
xa(t) = u(t) / 2 | (1) |
代数ループ ソルバーは勾配に基づいた検索方法を使用します。この方法では、代数ループに対応する代数制約について連続の 1 次導関数が必要になります。その結果、代数ループに不連続性が含まれる場合には、代数ループ ソルバーが失敗する可能性があります。
詳細については、Solving Index-1 DAEs in MATLAB and Simulink を参照してください。 1
代数ループ ソルバーのアルゴリズム: 信頼領域法と直線探索
Simulink 代数ループ ソルバーは次の 2 つのアルゴリズムのいずれかを使って代数ループの解を求めます。
信頼領域法
直線探索
既定では、Simulink が最適な代数ループ ソルバーを選択し、シミュレーション中にこの 2 つの方法を切り替える場合があります。モデルの自動代数ループ ソルバーの選択を明示的に有効にするには、MATLAB® コマンド ラインで次を入力します。
set_param(model_name, 'AlgebraicLoopSolver','Auto');
信頼領域法アルゴリズムに切り替えるには、MATLAB コマンド ラインで次のように入力します。
set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');
代数ループ ソルバーが信頼領域アルゴリズムで代数ループの解を見つけることができない場合、他のアルゴリズムを使ってモデルのシミュレーションを試すことができます。
直線探索アルゴリズムに切り替えるには、MATLAB コマンド ラインで次のように入力します。
set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');
詳細については、以下を参照してください。
Shampine と Reichelt の nleqn.m コード
User Guide for MINPACK-1 の Fortran プログラム HYBRD12
『Numerical Methods for Nonlinear Algebraic Equations』の Powell の「A Fortran subroutine for solving systems in nonlinear equations」3
非線形最小化に対する信頼領域法 (Optimization Toolbox).
直線探索法 (Optimization Toolbox).
代数ループ ソルバーの限界
代数ループの解を求める処理は反復処理です。Simulink の代数ループ ソルバーは代数ループが一定値に収束しなければ解くことができません。ループが収束しない、または収束が遅過ぎる場合は、シミュレーションはエラーを出して終了します。
代数ループ ソルバーは次の項目を含む代数ループを解くことはできません。
離散値の出力をもつブロック
倍精度以外の出力または複素数の出力をもつブロック
Discontinuities
Stateflow® チャート
モデル内の代数ループの影響
モデルに代数ループが含まれている場合。
モデルのコードを生成できません。
Simulink 代数ループ ソルバーが代数ループを解けない場合があります。
Simulink が代数ループを解こうとする間、シミュレーションの速度が低下する可能性があります。
ほとんどのモデルでは、代数ループ ソルバーは最初のタイム ステップで多くのリソースを計算に費やします。後続のタイム ステップでは、良好な xa の開始点を前のタイム ステップから利用できるので、Simulink ソルバーは短時間で解を出します。
参考
Algebraic Constraint | Descriptor State-Space
関連するトピック
1 Shampine, Lawrence F., M.W.Reichelt, and J.A.Kierzenka. ”Solving Index-1 DAEs in MATLAB and Simulink.”Siam Review.Vol.18,No.3,1999,pp.538–552.
2 More,J.J.,B.S.Garbow, and K.E.Hillstrom. User guide for MINPACK-1. Argonne, IL:Argonne National Laboratory,1980.
3 Rabinowitz, Philip, ed. Numerical Methods for Nonlinear Algebraic Equations, New York: Gordon and Breach Science Publishers, 1970.