最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

代数ループの概念

Simulink® モデルでは、"代数ループ" は、信号ループがループ内の直達ブロックによってのみ存在しているときに発生します。"直達" とは、Simulink で現在のタイム ステップで出力を計算するためには、そのブロックの入力信号の値が必要であることを意味します。このような信号ループでは、同じタイムステップ内においてブロックの出力と入力の間に循環依存関係が生じます。その結果、各タイムスステップで解を求める必要のある代数方程式が生成され、シミュレーションの計算コストが高まります。

直達入力をもつブロックには、いくつかの例があります。

"非直達" ブロックの場合は、状態変数が維持されます。2 つの例として、IntegratorUnit Delay があります。

ヒント

ブロックに直達があるかどうかを判断するには、ブロックのリファレンス ページの [特性] セクションを参照します。

次の図は、代数ループの例を示しています。Sum ブロックは、最初の入力 u から xa を引いた値に等しくなるように制約されている代数変数 xa (たとえば、xa = u – xa) です。

この単純ループの解は xa = u/2 です。

数学的な解釈

Simulink には、"常微分方程式 (ODE)" のシミュレーションに使用する一連の数値ソルバーが含まれています。常微分方程式は次のように表現される連立方程式です。

x˙=f(x,t),

ここで、x は状態ベクトルで、t は独立時間変数です。

連立方程式には、状態ベクトルの微分係数ではなく、独立変数と状態ベクトルに関する追加の制約を含むものがあります。このような方程式を "微分代数方程式 (DAE)" と呼びます。

"代数" は微分係数を含まない方程式を意味します。工学で使用される DAE は、以下のような半陽的な形式で表現できます。

x˙=f(x,xa,t)0=g(x,xa,t),

ここで、

  • fg はベクトル関数の場合があります。

  • 最初の方程式は微分方程式です。

  • 2 番目の方程式は代数方程式です。

  • 微分方程式の変数のベクトルは x です。

  • 代数方程式の変数のベクトルは xa です。

Simulink モデルでは、代数ループは代数制約です。代数ループをもつモデルは微分代数方程式を定義します。Simulink は ODE ソルバーの各ステップで代数方程式 (代数ループ) を xa に関して数値的に解きます。

この図のモデルは、この半陽的な方程式系と等価です。

x˙=f(x,xa,t)=xa0=g(x,xa,t)=x+u2xa.

ODE ソルバーの各ステップでは、x˙ の微分係数を計算する前に、代数ループ ソルバーで xa に関する代数制約を解かなければなりません。

物理的な解釈

代数制約:

  • 物理的なシステムのモデル化で発生します。多くの場合、質量とエネルギーの保存などの保存法則に関係して発生します。

  • モデルに特定の座標系を選択すると発生します。

  • 動的システムにおいてシステム応答に設計制約を課すことができます。

Simscape™ を使用して、物理ネットワークとしての機械、電気、油圧、その他の物理領域にまたがるシステムをモデル化します。Simscape は、モデルの動作を特徴付ける DAE を作成します。ソフトウェアは、これらの方程式をモデルの他の部分と統合してから、DAE を直接解きます。Simulink は異なる物理領域のコンポーネントの変数を同時に解いて、代数ループの問題を回避します。

疑似代数ループ

Atomic Subsystem または Model ブロックによって Simulink が代数ループを検出する設定になっているときは、サブシステムの内容に入力から出力への直達が含まれていない場合であっても、"疑似代数ループ" が発生します。Atomic Subsystem を作成するときは、すべての Inport ブロックは直達となるため、代数ループが発生します。

まず、含められたモデルで考えてみましょう。このモデルの表すプラントのシンプルな比例制御は、次の式で表されます。

これは、次のような状態空間形式で書き直すことができます。

この方程式は、代数変数も直達ももたず、代数ループももちません。

以下の手順に従って、モデルを変更します。

  1. サブシステムに Controller ブロックと Plant ブロックを含めます。

  2. Subsystem ダイアログ ボックスで、[Atomic サブシステムとして扱う] を選択してサブシステムを Atomic にします。

  3. [モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] パラメーターを error に設定します。

このモデルをシミュレーションすると、Atomic Subsystem 内のパスは直達ではありませんが、サブシステムが直達であるために、代数ループが発生します。シミュレーションは代数ループ エラーで停止します。

代数ループ ソルバーの動作

モデルに代数ループが含まれている場合、Simulink は各タイム ステップで非線形ソルバーを使って代数ループの解を求めます。ソルバーは反復処理を実行し、その代数制約の解がある場合はそれを決定します。その結果、代数ループをもつモデルは、もたないモデルよりも実行が遅くなります。

Simulink は、dogleg 信頼領域アルゴリズムを使用して、代数ループの解を求めます。使われる許容誤差は、ODE ソルバー ReltolAbstol より小さくなります。これは、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 つのアルゴリズムのいずれかを使って代数ループの解を求めます。

  • 信頼領域法

  • ライン探索法

既定の設定では、代数ループ ソルバーは信頼領域法アルゴリズムを使用します。

代数ループ ソルバーが信頼領域アルゴリズムで代数ループの解を見つけることができない場合、他のアルゴリズムを使ってモデルのシミュレーションを試すことができます。

ライン探索法アルゴリズムに切り替えるには、MATLAB® コマンド ラインで次のように入力します。

set_param(model_name, 'AlgebraicLoopSolver', 'LineSearch');

信頼領域法アルゴリズムに戻すには、MATLAB コマンド ラインで次のように入力します。

set_param(model_name, 'AlgebraicLoopSolver', 'TrustRegion');

詳細については、次の参考文献を参照してください。

代数ループ ソルバーの限界

代数ループの解を求める処理は反復処理です。Simulink の代数ループ ソルバーは代数ループが一定値に収束しなければ解くことができません。ループが収束しない、または収束が遅過ぎる場合は、シミュレーションはエラーを出して終了します。

代数ループ ソルバーは次の項目を含む代数ループを解くことはできません。

  • 離散値の出力をもつブロック

  • 倍精度以外の出力または複素数の出力をもつブロック

  • Discontinuities

  • Stateflow® チャート

代数ループが望ましくない理由

モデルに代数ループが含まれている場合。

  • モデルのコードを生成できません。

  • Simulink 代数ループ ソルバーが代数ループを解けない場合があります。

  • Simulink が代数ループを解こうとする間、シミュレーションの速度が低下する可能性があります。

    ほとんどのモデルでは、代数ループ ソルバーは最初のタイム ステップで多くのリソースを計算に費やします。後続のタイム ステップでは、良好な xa の開始点を前のタイム ステップから利用できるので、Simulink ソルバーは短時間で解を出します。

参考

| | |


[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.