ドキュメンテーション

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

ソルバーの選択

動的システムをシミュレートするには、指定された時間範囲における連続タイム ステップのそれぞれの状態量を計算します。この計算では、システムのモデルにより提供された情報を使用します。"タイム ステップ" は、計算が生じる時間の間の隔たりです。この時間間隔のサイズを "ステップ サイズ" と呼びます。この方法でモデルの状態を計算するプロセスはモデルの "解決" として知られています。モデルを解く 1 つの方法がすべてのシステムに適用されるわけではありません。Simulink® には、"ソルバー" と呼ばれる一連のプログラムがあります。各ソルバーはモデルを解くための特定のアプローチを表します。

ソルバーは数値的手法によって、モデルを表す一連の常微分方程式を解きます。この計算により、ソルバーは次のシミュレーション ステップの時間を判断します。この初期値の問題を解決するプロセスにおいて、ソルバーは指定された精度要件も満たします。

Simulink のソルバーには、固定ステップ ソルバーと可変ステップ ソルバーの 2 つの主要なタイプがあります。ソルバーは、モデル コンフィギュレーション パラメーターの [ソルバー] ペインで、それぞれのタイプ条件下において表示されます。

ソルバーのタイプ

ソルバーは次の基準を使用しておおまかに分類されます。

  • 計算に使用されるステップ サイズのタイプ

    • 固定ステップ ソルバーでは、シミュレーションの開始から終了までのステップ サイズに対してモデルを解きます。ステップのサイズは指定することもソルバーに選択させることもできます。一般に、ステップ サイズを小さくすると結果の精度は向上しますが、システムのシミュレーションに要する時間が長くなります。

    • 可変ステップ ソルバーでは、シミュレーション中にステップ サイズが変化します。この種のものは、モデルの状態がすばやく変化する場合やゼロクロッシング イベント中にステップ サイズを小さくして精度を上げます。モデルの状態がゆっくり変化する場合は、ステップ サイズを大きくして不要なステップの実行を避けます。ステップ サイズの計算は、各ステップで計算のオーバーヘッドに加えられます。ただし、ステップの総数を減らすことができ、それによって、区分的連続状態または急激に変化する状態をもつモデルについて、指定したレベルの精度を維持するために必要なシミュレーション時間を減らせます。

  • モデルの状態の性質

    • 連続ソルバーは、数値積分を使って前のタイム ステップにおける状態と状態導関数から、現在のタイム ステップにおけるモデルの連続状態量を計算します。連続ソルバーは、個々のブロックに基づいて各タイム ステップにおけるモデルの離散状態量の値を計算します。

    • 離散ソルバーは主に純粋な離散モデルに使われます。モデルについて、すぐ次のシミュレーション タイム ステップのみを計算します。この計算の実行時には、モデルの各ブロックに基づいてそれぞれの離散状態量が更新されます。連続状態は計算されません。

ソルバーの比較

モデルをシミュレートするソルバーを選択するときは、次を考慮します。

  • システムのダイナミクス

  • ソリューションの安定性

  • 計算の速度

  • ソルバーのロバスト性

すべての要件が 1 つのソルバーで完全に満たされるとは限らないため、ソルバーを選択する際は反復的手法を使用します。複数のソルバーのシミュレーション結果を比較し、最小のトレードオフで最適なパフォーマンスを提供するソルバーを 1 つ選択します。

モデルのソルバーを選択するには 2 つの方法があります。

  • 自動ソルバーを使用します。新しいモデルでは、ソルバーの選択が既定値で自動ソルバーに設定されています。自動ソルバーは、モデルに対して固定ステップまたは可変ステップのソルバーと最大ステップ サイズを推奨します。詳細については、自動ソルバーによるソルバーの選択を参照してください。

  • 自動ソルバーを使用したシミュレーション結果が満足のいかないものである場合は、モデル コンフィギュレーション パラメーターの [ソルバー] ペインでソルバーを選択します。

モデルをビルドしてシミュレートするとき、モデルのダイナミクスに基づいてソルバーのタイプを選択できます。可変ステップ ソルバーは、ばね質量ダンパー システムのダイナミクスのような、純粋な連続モデルにより適しています。インバーター電力システムなど複数のスイッチを含むモデルの場合、ソルバーのリセット数の問題で、可変ステップ ソルバーも固定ステップ ソルバーのように振る舞うことになるため、固定ステップ ソルバーが推奨されます。

モデルを生成されたコードとして配布する場合は、固定ステップ ソルバーのみ使用できます。シミュレーション中に可変ステップ ソルバーを選択すると、そのソルバーを使用して配布時に必要となる固定ステップ ソルバーに必要なステップ サイズを計算します。

次のチャートは、Simulink ライブラリにおけるソルバーの大まかな分類を示しています。

選択したソルバーをモデルに合わせるには、シミュレーション精度の確認と改善を参照してください。

理想的には、選択されたソルバーは以下のようになります。

  • モデルを正常に解く。

  • 指定された許容誤差の限度内で解法を示す。

  • 適切な期間でモデルを解く。

これらすべての要件が単一のソルバーで満たされるとは限りません。複数のソルバーでシミュレートしてみた後、選択してください。

Simulink ライブラリには複数のソルバーがあり、それらすべてが代数ループのソルバーと連携できます。

モデル コンフィギュレーション パラメーターの [ソルバー] ペインで、Simulink ライブラリにおけるソルバーは 2 つの主要なタイプに分類されます。固定ステップ ソルバーと可変ステップ ソルバーを参照してください。

各タイプのソルバーはさらに以下のように分類できます。

  • 離散ソルバーと連続ソルバー

  • 陽的な連続ソルバーと陰的な連続ソルバー

  • 1 ステップ連続ソルバーとマルチステップ連続ソルバー

  • 単一次数連続ソルバーと可変次数連続ソルバー

固定ステップ ソルバーと可変ステップ ソルバー

固定ステップ ソルバーと可変ステップ ソルバーでは、次のシミュレーション時間を、現在のシミュレーション時間とステップ サイズの和として計算します。[ソルバー] コンフィギュレーション ペインの [タイプ] コントロールによって、ソルバーのタイプを選択できます。固定ステップ ソルバーでは、ステップ サイズはシミュレーションを通して一定です。可変ステップ ソルバーでは、モデルのダイナミクスに応じ、ステップ サイズをステップごとに変えられます。特に、可変ステップ ソルバーでは、指定された許容誤差内に収まるようにステップ サイズの増減を行います。

これらのタイプの選択は、モデルの配布方法とモデルのダイナミクスに依存します。モデルからコードを生成し、実時間コンピューター システムでコードを実行する場合は、モデルをシミュレートするために固定ステップ ソルバーを選択してください。可変ステップ サイズをリアルタイム クロックにマッピングすることはできません。

モデルを生成コードとして展開するつもりがない場合は、可変ステップ ソルバーと固定ステップ ソルバー間での選択は、モデルのダイナミクスに依存します。可変ステップ ソルバーは、モデルのシミュレーション時間を著しく短縮する場合があります。可変ステップ ソルバーが一定レベルの精度においてこのように時間を短縮できるのは、必要に応じてステップ サイズを動的に調整できるためです。この方法では、要求ステップ数が減ります。固定ステップ ソルバーはシミュレーション全体を通して、精度の要件を満たす 1 つのステップ サイズを使用しなければなりません。シミュレーション全体でこれらの要件を満たすために、固定ステップ ソルバーは通常、ステップを小さくすることが求められます。

ex_multirate は、可変ステップ ソルバーがマルチレート離散モデルについて、どのようにシミュレーション時間を短縮するかを示します。

モデルは、2 つの異なるレート、0.5 秒ごとと 0.75 秒ごとに出力を生成します。両方の出力を取り込むには、固定ステップ ソルバーはタイム ステップが (モデルの "基本サンプル時間" である) 0.25 秒でなければなりません。

[0.0 0.25 0.5 0.75 1.0 1.25 1.5 ...]

これに対し、可変ステップ ソルバーがステップを必要とするのは、モデルが出力を生成するときだけです。

[0.0 0.5 0.75 1.0 1.5 ...]

このスキームにより、モデルのシミュレーションに要するタイム ステップ数が大幅に削減されます。

離散ソルバーと連続ソルバー

ソルバー タイプを選択する場合は、特定のソルバーも選択できます。どちらのソルバーのセットも、離散と連続の 2 つのタイプからなります。離散ソルバーと連続ソルバーは、モデル ブロックに基づいて離散状態の値を計算します。離散状態を定義するブロックが、各タイム ステップでそれらの状態の値を計算します。ただし、離散ソルバーとは異なり、連続ソルバーでは数値積分を使用して、ブロックが定義した連続状態を計算します。ソルバーを選択する場合は、離散ソルバーと連続ソルバーのどちらを使用するか最初に決めます。

モデルに連続状態がない場合、Simulink は固定ステップ離散ソルバーまたは可変ステップ離散ソルバーに切り替わります。モデルに連続状態のみまたは連続状態と離散状態の組み合わせがある場合は、対象モデルのダイナミクスの基準に照らして残ったソルバーの選択肢から連続ソルバーを選択します。そうでない場合、エラーが発生します。

ソルバー ライブラリには、固定ステップ離散ソルバーと可変ステップ離散ソルバーの 2 つの離散ソルバーが含まれます。固定ステップ ソルバーは既定の場合、モデルの最速ブロックにおける状態量の変化の速度に合わせてステップ サイズとシミュレーション速度を選択します。可変ステップ離散ソルバーは、モデルにおける実際の離散状態量の変化速度に合わせてシミュレーションのステップ サイズを調整します。この調整により不必要なステップを取ることが回避されるため、マルチレート モデルのシミュレーション時間が短縮されます (詳細は、システム内のサンプル時間を参照)。

メモ

固定ステップ離散ソルバーは、離散状態を解きません。各ブロックはソルバーとは関係なくその離散状態を計算します。

陽的な連続ソルバーと陰的な連続ソルバー

次の方程式系で陽的なシステムを表します。

x˙=f(x)

x の任意の値に対して、f(x) に x を代入して式を評価し、 x˙ を計算できます。

次の形式の方程式

F(x˙,x)=0

は、陰的と見なされます。x の任意の値に対し、x˙ を計算するためには、この方程式を解かなければなりません。

陰的な線形システムは、次の方程式で表すことができます。

M(x).x˙=f(x)

M(x) は質量行列と呼ばれ、f(x) は強制関数です。モデルで物理モデリング ブロックを使用する場合、システムは陰的な線形システムになります。

これらすべてのシステムは、陰的な連続ソルバーによっても陽的な連続ソルバーによっても解けますが、陰的ソルバーは特に、スティッフな問題を解くために設計されています。陽的なソルバーはノンスティッフな問題を解きます。常微分方程式の問題は、目的の解がゆっくり変化する場合はスティッフと言われますが、急速に変動するより近い解もあります。そうなると数値的手法は、システムを解くために小さなタイム ステップをとらなければなりません。スティッフは効率性の問題です。システムのスティッフ性が高いほど、陽的なソルバーでは計算の実行時間が長くなります。スティッフなシステムは、ゆっくり変化する連続ダイナミクスと素早く変化する連続ダイナミクスの両方をもっています。

陽的ソルバーと比較すると、陰的ソルバーは振動動作に対してより高い安定性をもたらします。ただし、陰的ソルバーは計算量も多くなります。陰的ソルバーはヤコビ行列を生成し、ニュートン法のような方法を使用して、タイム ステップごとに一連の代数方程式を解きます。この余分なコストを削減するために、陰的ソルバーにはそのシミュレーション性能を向上させるための [ソルバーのヤコビ メソッド] パラメーターが用意されています。詳細については、陰的なソルバーに対するヤコビ メソッドの選択を参照してください。陰的な線形システムを解くには、陰的なソルバーの方が陽的なソルバーよりも効率的です。

1 ステップ連続ソルバーとマルチステップ連続ソルバー

Simulink ソルバー ライブラリには、1 ステップ ソルバーとマルチステップ ソルバーの両方が含まれています。1 ステップ ソルバーは、直前の時点における解、 および tn と tn-1 の間の複数の点における微分値を使用して、 を推定します。これらの点は、マイナー ステップです。

マルチステップ ソルバーは、以前の複数のタイム ステップにおける結果を使用して、現在の解を計算します。Simulink には、1 つの陽的マルチステップ ソルバー ode113 と、1 つの陰的マルチステップ ソルバー ode15s があります。どちらも可変ステップ ソルバーです。

単一次数連続ソルバーと可変次数連続ソルバー

この区別は、ソルバーが方程式系を解くために使用する次数に基づきます。2 つの可変次数ソルバー ode15sode113 はソルバー ライブラリに含まれています。これらのソルバーは、複数の次数を使用して方程式系を解きます。具体的には、陰的な可変ステップの ode15s ソルバーは 1 次~ 5 次方程式を使用し、陽的な可変ステップの ode113 ソルバーは 1 次~ 13 次方程式を使用します。ode15s に対しては、適用される最高次数を [最大次数] パラメーターを使用して制限できます。詳細については、最大次数を参照してください。

固定ステップ ソルバーの選択

固定ステップ離散ソルバー

固定ステップ離散ソルバーは、固定されたステップ サイズを現在の時間に加えることで、次のシミュレーション ステップの時間を計算します。シミュレーション結果の精度と時間の長さは、シミュレーションに要するステップのサイズにより異なります。ステップ サイズが小さいと、結果は精度が高くなりますが、シミュレーションに要する時間が長くなります。既定では Simulink でステップ サイズが選択されますが、自分でステップ サイズを選択することもできます。[auto] (既定の設定) を選択し、モデルが離散サンプル時間をもつ場合は、Simulink でステップ サイズがモデルの基本サンプル時間に設定されます。あるいは、離散レートをもたない場合は、Simulink はシミュレーションの開始時間と終了時間の差を 50 で除算した結果にサイズを設定します。

メモ:

連続状態をもつモデルを更新またはシミュレートするために固定ステップ離散ソルバーを使用しようとすると、エラー メッセージが表示されます。そのため、固定ステップ ソルバーを選択してモデルを更新またはシミュレートすると、モデルが連続状態をもっているかどうかを迅速に判断できます。

固定ステップ連続ソルバー

固定ステップ離散ソルバーのような固定ステップ連続ソルバーは、固定サイズのタイム ステップを現在時間に加えることで次のシミュレーション時間を計算します。連続ソルバーは、これらの各ステップに対して数値積分を行い、モデルの連続状態の値を計算します。これらの値は、前のタイム ステップにおける連続状態と現在のタイム ステップと前のタイム ステップとの中間点にある状態導関数 (マイナー ステップ) を使用して計算されます。これにより、固定ステップ連続ソルバーは、連続状態と離散状態の両方を含むモデルを扱うことができます。

メモ:

理論的には、固定ステップ連続ソルバーは、連続状態を含まないモデルを扱うことができます。ただし、シミュレーションには不必要な負荷を与えることになります。そのため、Simulink は、モデルに対して固定ステップ連続ソルバーを指定した場合でも、状態をもたない、または離散状態のみをもつモデルに対して固定ステップ離散ソルバーを使用します。

Simulink が用意している 2 種類の固定ステップ連続ソルバーには、陽的ソルバーと陰的ソルバーがあります。

これらの 2 種類の相違点は、速度と安定性にあります。陰的ソルバーは、陽的ソルバーよりも多い計算がステップごとに必要になりますが、より安定しています。したがって、Simulink の陰的固定ステップ ソルバーは、スティッフなシステムを解く場合、陽的固定ステップ ソルバーよりも優れています。詳細については、陽的な連続ソルバーと陰的な連続ソルバーを参照してください。

陽的な固定ステップ連続ソルバー-  陽的なソルバーは、状態と状態導関数の両方の現在値の陽的な関数として、次のタイム ステップでの状態の値を計算します。陽的な固定ステップ ソルバーの数学的表記は次のとおりです。

x(n+1)=x(n)+hDx(n)

ここで、x は状態、Dx は状態導関数を推定するソルバー依存の関数、h はステップ サイズ、n は現在のタイム ステップを示します。

Simulink には一連の陽的な固定ステップ連続ソルバーが用意されています。ソルバーは、モデルの状態導関数の計算に使用する特定の数値積分手法において異なります。次の表は、各ソルバーと、ソルバーが使用する積分手法の一覧です。この表では、最も複雑でないもの (ode1) から最も複雑なもの (ode8) まで、使用する積分手法の計算の複雑度の順にソルバーを示しています。

ソルバー積分手法精度の次数

ode1

オイラー法

1 次

ode2

Heun 法

2 次

ode3

Bogacki-Shampine 式

3 次

ode4

4 次のルンゲ・クッタ (RK4) 法

4 次

ode5

Dormand-Prince (RK5) 式

5 次

ode8

Dormand-Prince RK8(7) 式

8 次

これらのソルバーにはいずれも誤差制御メカニズムは備わっていません。したがって、シミュレーションの精度と時間の長さはソルバーによって取られるステップのサイズに直接依存します。ステップ サイズを小さくすると、結果はより正確になりますが、シミュレーションに要する時間が長くなります。また、与えられたタイム ステップに対して、より計算的に複雑なソルバーは、シミュレーション結果の精度が高くなります。

モデルのソルバー タイプとして固定ステップを指定する場合、Simulink は既定で FixedStepAuto ソルバーを選択します。自動ソルバーは、中程度の計算量で、連続状態と離散状態の両方を扱うことができる適切な固定ステップ ソルバーを選択します。離散ソルバーの場合と同様、モデルが離散レート (サンプル時間) をもつ場合は、Simulink でステップ サイズは既定の設定でモデルの基本サンプル時間に設定されます。モデルに離散レートがない場合は、Simulink はシミュレーションの合計時間を 50 で除算した結果を自動的に使用します。その結果、ソルバーは、モデルの指定したサンプルレートで、Simulink がモデルの離散状態を更新するために必要なシミュレーション時間ごとにステップを取ります。ただし、これは既定のソルバーがモデルの連続状態を正確に計算することを保証するものではありません。したがって、許容できる精度とシミュレーション時間の短縮の両方を実現するために、他のソルバーと異なる固定ステップ サイズのどちらかまたは両方の選択が必要となる場合があります。

陰的な固定ステップ連続ソルバー-  陰的なソルバーは、次のタイム ステップでの状態を、現在のタイム ステップでの状態と次のタイム ステップでの状態導関数の陰関数として計算します。言い換えれば、次のようになります。

x(n+1)x(n)hDx(n+1)=0

Simulink には 1 つの陰的な固定ステップ ソルバー ode14x が用意されています。このソルバーは、ニュートン法と現在の値の外挿を使用して、次のタイム ステップでの状態の値を計算します。モデルの状態の次の値を計算するためにソルバーが使用する Newton 法の反復回数と外挿の次数を指定できます (固定ステップ サイズ (基本サンプル時間)を参照)。選択した反復回数が多く、外挿の次数が高いほど、精度は高くなりますが、ステップ サイズごとの計算の負荷が大きくなります。

固定ステップ連続ソルバーの選択方法

Simulink 製品の固定ステップ連続ソルバーは、十分に小さなステップ サイズを提供することによって、望む精度レベルのシミュレートが可能です。残念ながら、連続状態に対して許容可能な結果が生ずるソルバーとステップ サイズの組み合わせを、最小の時間で "試すことなく" 決定することは、不可能もしくは非実際的です。特定のモデルに対して最適なソルバーを決定する場合は、一般に試してみることが必要です。

固定ステップ連続ソルバーを選択するには、

  1. 誤差許容値を選択します。詳細については、可変ステップ ソルバーの許容誤差を参照してください。

  2. いずれかの可変ステップ ソルバーを使用して、希望する精度のレベルでモデルをシミュレートします。ode45 から始めます。モデルの実行が遅い場合、問題はスティッフである可能性があり、陰的なソルバーが必要です。このステップの結果は、おおよその正しいシミュレーション結果と適切な固定ステップ サイズを与えます。

  3. ode1 を使用して、モデルの既定のステップ サイズでモデルをシミュレートします。ode1 のシミュレーション結果を可変ステップ ソルバーのシミュレーション結果と比較します。結果が指定したレベルの精度で同一の場合は、モデルに対して ode1 という最適な固定ステップ ソルバーが見つかったことになります。この結論には、ode1 が固定ステップ ソルバーの最もシンプルなものであり、そのため、現在のステップ サイズに対して最も短いシミュレーション時間を与えることから到達します。

  4. ode1 では満足な結果が得られない場合は、最小の計算量で正確な結果を与えるものが見つかるまで、他の固定ステップ ソルバーを使用して前のステップを繰り返します。この作業を行うための最も効率的な方法は、二分探索法を使用することです。

    1. ode3 を試してみます。

    2. ode3 が正確な結果を与える場合は、ode2 を試してみます。ode2 が正確な結果を与える場合は、モデルに対して最適なソルバーです。そうでない場合は、ode3 が最適なソルバーです。

    3. ode3 が正確な結果を与えない場合は、ode5 を試してみます。ode5 が正確な結果を与える場合は、ode4 を試してみます。ode4 が正確な結果を与える場合は、それをモデルのソルバーとして選択します。そうでない場合は、ode5 を選択します。

    4. ode5 が正確な結果を与えない場合は、シミュレーション ステップ サイズを減らして前のプロセスを繰り返します。この方法で、最小の計算努力で正確にモデルを解くソルバーが見つかるまで続けます。

可変ステップ ソルバーの選択

[ソルバー] コンフィギュレーション ペインの [タイプ] コントロールが [Variable-step] に設定されている場合は、[ソルバー] コントロールを使用して、いずれかの可変ステップ ソルバーを選択できます。固定ステップ ソルバーと同様に、可変ステップ ソルバーのセットは、離散ソルバーと連続ソルバーのサブセットで構成されます。ただし、固定ステップ ソルバーとは異なり、ステップ サイズは局所誤差に応じて動的に変化します。

2 つのタイプの可変ステップ ソルバー間の選択は、モデル内のブロックが状態を定義するかどうかと、定義する場合は、定義する状態の種類により異なります。モデルが状態を定義しない、または離散状態のみを定義する場合は、離散ソルバーを選択します。モデルが状態をもたないまたは離散状態のみをもつ場合は、連続ソルバーを指定しても、Simulink は離散ソルバーを使用してモデルをシミュレートします。モデルが連続状態をもつ場合、連続ソルバーは、次のタイム ステップで連続状態の値を計算するために数値積分を使用します。

可変ステップ連続ソルバー

可変ステップ ソルバーでは、シミュレーション中にステップ サイズが動的に変化します。これらの各ソルバーは局所誤差制御を使用して、指定された許容誤差内に収まるようにステップ サイズの増減を行います。各タイム ステップでのステップ サイズの計算は、計算のオーバーヘッドに加えられます。ただし、ステップの総数を減らすことができ、それによって、指定したレベルの精度を維持するために必要なシミュレーション時間を減らせます。

可変ステップ連続ソルバーは、1 ステップまたはマルチステップ、単一次数または可変次数、陽的または陰的などのようにさらに分けられます。(詳細はソルバーの比較を参照)。

陽的な可変ステップ連続ソルバー

陽的な可変ステップ ソルバーは、スティッフでない問題用に設計されています。Simulink には次の 3 種類のソルバーが用意されています。

  • ode45

  • ode23

  • ode113

ODE ソルバー1 ステップ法マルチステップ法精度の次数メソッド
ode45X ルンゲ・クッタ、Dormand-Prince (4,5) の組
ode23X Bogacki と Shampine による Runge-Kutta (2,3) の組
ode113 X可変、低から高Adams-Bashforth-Moutlon の PECE 実装

ODE ソルバー用途に関するヒント
ode45

一般に、ode45 は、ほとんどの問題に対して最初の試みとして適用する最良のソルバーです。この理由により、ode45 は、連続状態をもつモデルの既定のソルバーとなっています。この Runge-Kutta (4,5) ソルバーは、誤差の 4 次推定を行う 5 次法です。このソルバーでも 4 次の "フリー" 内挿を使用して、イベント位置選定とより滑らかなプロットを実現します。

ode45ode23 よりも正確で高速です。ode45 の計算が遅い場合、問題はスティッフである可能性があるため、陰的なソルバーが必要になります。

ode23

ode23 は、粗い誤差許容量およびある程度のスティッフ性が存在するときに、ode45 ソルバーよりも効率的な場合があります。このソルバーは、ステップの最後に計算された値と勾配に 3 次エルミート内挿を適用することで、"フリー" に対して正確な解をもたらします。

ode113

厳密な許容誤差の問題または計算量の多い問題に対しては、Adams-Bashforth-Moulton PECE ソルバーが ode45 よりも効率的である場合があります。

陰的な可変ステップ連続ソルバー

問題がスティッフな場合は、陰的な可変ステップ ソルバーのいずれかを使用してみてください。

  • ode15s

  • ode23s

  • ode23t

  • ode23tb

ODE ソルバー1 ステップ法マルチステップ法精度の次数ソルバー リセット メソッド最大次数メソッド
ode15s X可変、低から中XX数値微分式 (NDF)
ode23sX   変更された 2 次の Rosenbrock 公式
ode23tX X "フリー" 内挿を使用した台形則
ode23tbX X TR-BDF2

ソルバー リセット メソッド-  スティッフな問題に対応する 3 つのソルバー、ode15sode23t、および ode23tb に対しては、[ソルバーのリセット メソッド] のドロップダウン メニューがコンフィギュレーション ペインの [ソルバーの詳細] セクションに表示されます。このパラメーターは、たとえばゼロクロッシング検出などによって発生したリセットをソルバーが処理する方法を制御します。使用可能なオプションは、[高速][ロバスト] です。[高速] は、ソルバーがそのリセット時にヤコビアンを再計算しないことを指定し、[ロバスト] は再計算を指定します。結果として、[高速] 設定では計算は速くなりますが、場合によっては小さなステップ サイズを使用することもあります。このような場合のテストでは、各設定を使用してシミュレーションを実行し、結果を比較します。結果に差が見られない場合は、[高速] 設定を問題なく使用して、時間を節約できます。結果が大きく異なる場合は、高速シミュレーションのステップ サイズを削減してみてください。

最大次数-  ode15s ソルバーに対しては、ソルバーが適用する数値微分式 (NDF) の最大次数を選択できます。ode15s では 1 次~ 5 次の方程式を使用するので、Maximum order パラメーターを使用して 1 ~ 5 の値を選択できます。スティッフな問題に対しては、2 次から始めてみてください。

陰的な可変ステップ ソルバーを選択するためのヒント-  次の表は、陰的な可変ステップ ソルバーのアプリケーションに関連するヒントをまとめています。これらのソルバーの動作を比較した例は、sldemo_solvers を参照してください。

ODE ソルバー用途に関するヒント
ode15s

ode15s は、数値微分式 (numerical differentiation formulas: NDF) に基づく可変次数ソルバーです。NDF は、後退差分式 (BDF) (Gear 法としても知られている) と関連していますが、より効率的です。ode15s ソルバーは、ヤコビ行列を数値的に生成します。問題がスティッフな場合、ode45 がうまくいかない、または効率が非常に悪い場合には、ode15s を試してみてください。通常は、NDF の最大次数を 2 に制限することから始めてみてください。

ode23s

ode23s は、2 次の Rosenbrock の公式を改良したものをベースにしています。この関数は、単段階ソルバーであるため、粗い許容範囲の場合には関数 ode15s よりも効率的な場合があります。ode15s 同様、ode23s はヤコビ行列を数値的に生成してくれます。ただし、ode15s では効果的でない特定のスティッフな問題を解くことができます。

ode23t

関数 ode23t ソルバーは、"フリー" 内挿を使用して台形則を実行します。問題が適度にスティッフで数値的減衰のない解が必要な場合に、このソルバーを使用してください (振動の動きのモデルを作成したときにエネルギーが放散されません)。

ode23tb

ode23tb は、2 つのステージをもつ陰的な Runge-Kutta 法である TR-BDF2 を実装したものです。最初のステージは台形則ステップで、2 番目のステージでは 2 次の後退差分式を使用します。この課程で、両方のステージの評価には同じ反復行列が使用されます。ode23s のように、このソルバーは大まかな許容誤差において ode15s より効率的な可能性があります。

メモ:

"スティッフな" 問題の場合、解は積分間隔に比較して非常に短い時間スケールで変化する可能性がありますが、重要な解はそれよりはるかに長い時間スケールで変化します。スティッフな問題用に設計されていない手法は、可能な限り高速な変化を解くため十分に小さなタイム ステップで計算を行うため、解がゆっくりと変化する区間に対しては効果的ではありません。詳細については、Shampine, L. F.、『Numerical Solution of Ordinary Differential Equations』、Chapman & Hall、1994 を参照してください。

ゼロクロッシング検出のサポート

可変ステップ離散ソルバーと連続ソルバーは、ゼロクロッシング検出 (ゼロクロッシング検出を参照) を使用して、連続信号を扱います。

可変ステップ ソルバーの許容誤差

局所誤差-  可変ステップ ソルバーは、標準制御法を使用してタイム ステップごとに局所誤差を監視します。各タイム ステップの間、ソルバーはステップの終端で状態値を計算し、局所誤差、すなわちこれらの状態値の予測誤差も判別します。その後で、局所誤差を、相対的許容誤差 (rtol) と絶対的許容誤差 (atol) の関数である許容誤差と比較します。局所誤差が任意の状態に対する許容誤差より大きい場合には、ソルバーはステップ サイズを小さくして再び試みます。

  • "相対的許容誤差" は、各状態のサイズに関して誤差を測定します。相対的許容誤差は、状態の値の割合を表します。既定の 1e-3 は、計算された状態が 0.1% 以内の精度であることを意味します。

  • "絶対的許容誤差" は、しきい値誤差値です。この許容誤差は、測定された状態の値がゼロに近づくにつれて許容可能な誤差を表します。

    ソルバーでは、i 番目の状態に対する誤差 ei は、次式を満たす必要があります。

    eimax(rtol×|xi|,atoli).

下の図は、状態のプロットと、相対的許容誤差と絶対的許容誤差が許容誤差を決める領域を示しています。

絶対許容誤差-  モデルには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで、グローバル絶対許容誤差を設定できます。この許容誤差モデルのすべての状態に適用されます。auto または実数スカラーを指定できます。auto (既定) を指定すると、Simulink は各状態に対する絶対許容誤差を、相対許容誤差に基づいて初期設定します。相対許容誤差が 1e-3 より大きい場合、abstol は 1e-6 に初期設定されます。ただし、reltol が 1e-3 より小さい場合、その状態に対する abstolreltol * 1e-3 に初期設定されます。シミュレーションが進行すると、各状態に対する絶対許容誤差は、その時点までの状態の最大値に、その状態の相対許容誤差を掛け合わせたものに再設定されます。したがって、状態が 0 から 1 に変化し reltol が 1e-3 の場合は、abstol は 1e-6 に初期設定され、シミュレーションの終わりには 1e-3 になります。状態が 0 から 1000 に変化した場合、abstol は 1 に変更されます。

ここで、状態が 0 から 1 に変化し、reltol が 1e-4 に設定されている場合、abstol は 1e-7 に初期設定され、シミュレーションの終わりには 1e-4 の値になります。

絶対的許容誤差の初期値の計算結果が適切でない場合、自分で適切な値を指定することができます。絶対的許容誤差に対する適切な値を決定するには、シミュレーションを複数回実行する必要があります。また、AutoScaleAbsTol パラメーターの有効または無効を切り替えることによって、絶対的許容誤差をその [自動] 設定に近い値に調整するかどうかを指定できます。詳細については、絶対許容誤差を自動的にスケールを参照してください。

一部のブロックでは、計算したり出力を定義したりするモデルの状態を解くために絶対許容誤差の値を指定できます。

これらのブロックに対してユーザーが指定した絶対許容誤差値は、[コンフィギュレーション パラメーター] ダイアログ ボックスでのグローバル設定値をオーバーライドします。たとえば、モデルの状態が大きく変化するなどの理由のため、グローバル設定値ではすべてのモデル状態の誤差を十分に制御できない場合は、グローバル設定値をオーバーライドできます。ブロックの絶対許容誤差値は次の値に設定できます。

  • auto

  • 1 ( auto に同じ)

  • positive scalar

  • real vector (ブロック内の対応する連続状態の数と同じ次元)

ヒント-  絶対許容誤差を設定する場合、低すぎる値を設定すると状態値のゼロ近辺でのソルバーのステップ数が多くなりすぎるため注意が必要です。結果的に、シミュレーションの速度が低下します。

反対に、高すぎる絶対許容誤差を設定した場合には、モデル内の 1 つ以上の連続状態がゼロに近づくにつれて、結果の精度が低くなる可能性があります。

シミュレーションが完了した後に、絶対許容誤差を低くして再度シミュレーションを実行することによって、結果の精度を検証できます。2 回のシミュレーションの結果が大幅に異なっていなければ、十分な精度が得られていると考えられます。

陰的なソルバーに対するヤコビ メソッドの選択

ソルバーのヤコビアン

陰的なソルバーに対し、Simulink では "ソルバーのヤコビアン" を計算しなければなりません。これは、Simulink モデルの連続表現に関連付けられているヤコビ行列の部分行列です。一般的に、この連続表現の形式は次のようになります。

x˙=f(x,t,u)y=g(x,t,u).

この方程式系から形成されるヤコビアン J は次のとおりです。

J=(fxfugxgu)=(ABCD).

これにより、ソルバーのヤコビアンは部分行列 Jx になります。

Jx=A=fx.

ヤコビアンのスパース性-  多くの物理システムでは、ソルバーのヤコビアン Jx"スパース"、つまり、 Jx の多くの要素はゼロになっています。

次の方程式系を考えます。

x˙1=f1(x1,x3)x˙2=f2(x2)x˙3=f3(x2).

このシステムからは、方程式の構造を反映したスパース パターンを導出できます。このパターンの boolean 行列は、方程式の右側に明示的に表示される各 xi に対し、1 の値をもっています。したがって、次が得られます。

Jx,pattern=(101010010)

フル摂動法とスパース摂動法およびフル解析法とスパース解析法でそれぞれ説明しているように、スパース摂動法とスパース解析法は、このスパース パターンを利用して必要な計算数を削減し、パフォーマンスを向上できる場合があります。

ソルバーのヤコビ メソッド

[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで陰的ソルバーを選択すると、[ソルバーのヤコビ メソッド] というパラメーターとドロップダウン メニューが表示されます。このメニューには、ソルバーのヤコビアンを計算する際のオプションが 5 つあります。

  • 自動

  • スパース摂動

  • フル摂動

  • スパース解析的

  • フル解析的

メモ

[診断] ペインの [ソルバー] セクションで [自動ソルバー パラメーターの選択][エラー] に設定し、Simulink 以外のソルバー メソッドを選択すると、エラーが表示される場合があります。

制限-  ソルバーのヤコビ メソッドは次の制限を伴います。

  • 解析的ヤコビ メソッドが選択されていてもモデル内の 1 つ以上のブロックに解析的なヤコビアンがない場合、Simulink は摂動法を適用します。

  • スパース摂動を選択し、モデルにデータ ストア ブロックが含まれている場合は、Simulink によってフル摂動法が適用されます。

ヒューリスティックな [自動] 方法

[Solver Jacobian method] の既定の設定は [自動] です。この項目を選択すると、Simulink では 4 つの残りのメソッドのいずれがモデルに最適であるかをヒューリスティックに判断します。このアルゴリズムは次のフロー チャートに示すとおりです。

スパース法は多数の状態をもつモデルに適しているため、モデルに 50 以上の状態が存在する場合は、ヒューリスティックにスパース法が選択されます。ode23s を指定した場合も、このロジックによりスパース法が選択されます。というのも、他の陰的なソルバーとは異なり、ode23s はタイム ステップごとに新しいヤコビアンを生成するためです。したがって、スパース解析法またはスパース摂動法はかなり効果的です。ヒューリスティックな方法では、モデル内の各ブロックが解析ヤコビアンを生成できる場合にのみ、解析的手法が使用されるようにします。

フル摂動法とスパース摂動法

フル摂動法は、Simulink がシステムを解くために使用した標準の数値的手法でした。この方法では、Simulink は完全な摂動方程式を解き、線形代数演算に LAPACK を使用します。この方法は、計算の観点から見るとコストが高くなりますが、ベースライン結果を確立するための推奨される方法となっています。

スパース摂動法では、スパースなヤコビアンのパターンを数学的に利用して、実行時の性能を向上させます。3 つの方程式と 3 つの状態のサンプル システムに戻ります。

x˙1=f1(x1,x3)x˙2=f2(x2)x˙3=f3(x2).

ソルバーのヤコビアンは次のとおりです。

Jx=(f1x1f1x2f1x3f2x1f2x2f2x3f3x1f3x2f3x3)=(f1(x1+Δx1,x2,x3)f1Δx1f1(x1,x2+Δx2,x3)f1Δx2f1(x1,x2,x3+Δx3)f1Δx3f2(x1+Δx1,x2,x3)f2Δx1f2(x1,x2+Δx2,x3)f2Δx2f2(x1,x2,x3+Δx3)f2Δx3f3(x1+Δx1,x2,x3)f3Δx1f3(x1,x2+Δx2,x3)f3Δx2f3(x1,x2,x3+Δx3)f3Δx3)

したがって、3 つの各状態に摂動を 3 回与え、導関数を 3 回評価することが必要になります。n 個の状態をもつシステムでは、状態に n 回摂動が与えられます。

スパース パターンを適用し、状態 x1 および x 2 に共に摂動を与えると、この行列は次のように縮小されます。

Jx=(f1(x1+Δx1,x2+Δx2,x3)f1Δx10f1(x1,x2,x3+Δx3)f1Δx30f2(x1+Δx1,x2+Δx2,x3)f2Δx200f3(x1+Δx1,x2+Δx2,x3)f3Δx20)

これでソルバーは、1 回のスイープで列 1 と列 2 を解くことができるようになりました。スパース摂動法では計算量が大幅に節約されますが、コンパイルのオーバーヘッドも増加します。システムに多数の連続状態が含まれていない場合は、シミュレーションの速度が遅くなる場合もあります。この方法を適用することで性能が向上する分岐点が存在します。一般的に、多数の連続状態をもつシステムは通常はスパースであるため、スパース法が適しています。

スパース摂動法では、スパース解析法と同様に、UMFPACK を使用して線形代数演算を実行します。また、スパース摂動法は、RSim およびラピッド アクセラレータ モードの両方をサポートしています。

フル解析法とスパース解析法

フル解析法とスパース解析法では、摂動方程式の代わりに解析方程式を使用してヤコビアンを計算することで、性能を向上させます。またスパース解析法ではスパース情報を使用して、常微分方程式を解くのに必要な線形代数演算を高速化します。

スパース パターン

MATLAB® でのスパース パターンへのアクセスと解釈の方法の詳細については、sldemo_metro を参照してください。

コード生成のサポート

スパース摂動法は RSim をサポートしていますが、スパース解析法ではサポートしていません。その結果、選択したスパース法にかかわらず、生成されたコードではスパース摂動法が使用されます。この制限は、ラピッド アクセラレータ モードにも適用されます。

関連する例

詳細