Simulink の可変ステップ ソルバー
"可変ステップ ソルバー" では、シミュレーション実行中にステップ サイズが変化します。モデルの状態が急激に変動しているときは精度を上げるためにステップ サイズが小さくなり、モデルの状態の変動が緩慢なときは不必要なステップを取ることを回避するためにステップ サイズが大きくなります。ステップ サイズの計算は、各ステップで計算のオーバーヘッドを加えますが、ステップの総数は減らすことが可能なため、急激に変化あるいは区分的に連続状態をもつモデルの指定したレベルの精度を保持するために必要なシミュレーション時間が増加します。
[ソルバー] コンフィギュレーション ペインの [タイプ] コントロールが [Variable-step
] に設定されている場合は、[ソルバー] コントロールを使用して、いずれかの可変ステップ ソルバーを選択できます。固定ステップ ソルバーと同様に、可変ステップ ソルバーのセットは、離散ソルバーと連続ソルバーの集合で構成されます。ただし、固定ステップ ソルバーとは異なり、ステップ サイズは局所誤差に応じて動的に変化します。
2 つのタイプの可変ステップ ソルバー間の選択は、モデル内のブロックが状態を定義するかどうかと、定義する場合は、定義する状態の種類により異なります。モデルが状態を定義しない、または離散状態のみを定義する場合は、離散ソルバーを選択します。モデルが連続状態をもつ場合、連続ソルバーは、次のタイム ステップで連続状態の値を計算するために数値積分を使用します。
メモ
モデルが状態をもたないまたは離散状態のみをもつ場合は、連続ソルバーを指定しても、Simulink® は離散ソルバーを使用してモデルをシミュレートします。
可変ステップ離散ソルバー
可変ステップ離散ソルバーは、モデルが連続状態を含まないときに使用します。そのようなモデルでは、可変ステップ離散ソルバーは、ゼロクロッシングなどのモデル イベントをキャプチャするためにステップ サイズを小さくし、シミュレーションの性能を向上することが可能な際にステップ サイズを大きくします。
この図に示すモデルには、サンプル時間 0.5 と 0.75 に、2 つの離散正弦波が含まれます。以下のグラフは、モデル内の信号とソルバー ステップを可変ステップ離散ソルバーと固定ステップ離散ソルバーのそれぞれについて示したものです。可変ステップ ソルバーでは、各ブロックからの出力信号を記録するために必要なステップのみが使用されていることが分かります。一方、固定ステップ ソルバーでは、すべての信号を記録するために固定ステップ サイズ (または基本サンプル時間) の 0.25 でシミュレートする必要があるため、全体として多くのステップが使用されます。
可変ステップ連続ソルバー
可変ステップ ソルバーでは、シミュレーション中にステップ サイズが動的に変化します。これらの各ソルバーは局所エラー制御を使用して、指定された許容誤差内に収まるようにステップ サイズの増減を行います。各タイム ステップでのステップ サイズの計算は、計算のオーバーヘッドに加えられます。ただし、ステップの総数を減らすことができ、それによって、指定したレベルの精度を維持するために必要なシミュレーション時間を減らせます。
可変ステップ連続ソルバーは、1 ステップまたはマルチステップ、単一次数または可変次数、陽的または陰的などのようにさらに分けられます。詳細については、1 ステップ連続ソルバーとマルチステップ連続ソルバーを参照してください。
陽的な可変ステップ連続ソルバー
陽的な可変ステップ ソルバーは、スティッフでない問題用に設計されています。Simulink には次の 4 種類のソルバーが用意されています。
ode45
ode23
ode113
odeN
ODE ソルバー | 1 ステップ法 | マルチステップ法 | 精度の次数 | メソッド |
---|---|---|---|---|
ode45 | X | 中 | ルンゲ・クッタ、Dormand-Prince (4,5) の組 | |
ode23 | X | 低 | Bogacki と Shampine による Runge-Kutta (2,3) の組 | |
ode113 | X | 可変、低から高 | Adams-Bashforth-Moutlon の PECE 実装 | |
odeN | X | 陽的な固定ステップ連続ソルバーの精度の次数を参照 | 陽的な固定ステップ連続ソルバーの積分手法を参照 |
ODE ソルバー | 使用時 |
---|---|
ode45 | 一般に、
|
ode113 |
|
ode23 |
|
odeN | odeN は、次数が [ソルバーの次数] パラメーターによって決定される非適応型のルンゲ・クッタ積分を使用するソルバーです。odeN では、[最大ステップ サイズ] パラメーターによって決定される固定ステップ サイズを使用しますが、ステップ サイズを小さくすることでゼロクロッシングや離散サンプル ヒットなどの特定のソルバー イベントを取得できます。 |
メモ
シミュレーション速度が重要な場合は、odeN
ソルバーを選択します。たとえば、次のような場合です。
モデルにゼロクロッシングやソルバーのリセットが多数含まれている
モデルのプロファイリング時に失敗したステップがソルバー プロファイラーで検出されない
陰的な可変ステップ連続ソルバー
問題がスティッフな場合は、陰的な可変ステップ ソルバーのいずれかを使用してみてください。
ode15s
ode23s
ode23t
ode23tb
ODE ソルバー | 1 ステップ法 | マルチステップ法 | 精度の次数 | ソルバー リセット メソッド | 最大次数 | メソッド |
---|---|---|---|---|---|---|
ode15s | X | 可変、低から中 | X | X | 数値微分式 (NDF) | |
ode23s | X | 低 | 変更された 2 次の Rosenbrock 公式 | |||
ode23t | X | 低 | X | 内挿を使用した台形則 | ||
ode23tb | X | 低 | X | TR-BDF2 |
ソルバー リセット メソッド
ode15s
、ode23t
、および ode23tb
に対しては、[ソルバーのリセット メソッド] のドロップダウン メニューがコンフィギュレーション ペインの [ソルバーの詳細] セクションに表示されます。このパラメーターは、たとえばゼロクロッシング検出などによって発生したリセットをソルバーが処理する方法を制御します。使用可能なオプションは、[高速]
と [ロバスト]
です。[高速]
は、ソルバーがそのリセット時にヤコビアンを再計算しないことを指定し、[ロバスト]
は再計算を指定します。結果として、[高速]
設定では計算は速くなりますが、場合によっては小さなステップ サイズを使用することもあります。このような場合のテストでは、各設定を使用してシミュレーションを実行し、結果を比較します。結果に差が見られない場合は、[高速]
設定を問題なく使用して、時間を節約できます。結果が大きく異なる場合は、高速シミュレーションのステップ サイズを削減してみてください。
最大次数
ode15s
ソルバーに対しては、ソルバーが適用する数値微分式 (NDF) の最大次数を選択できます。ode15s
では 1 次~ 5 次の方程式を使用するので、Maximum order
パラメーターを使用して次数 1 ~ 5 を選択できます。スティッフな問題に対しては、2 次から始めてみてください。
陰的な可変ステップ ソルバーを選択するためのヒント
次の表は、陰的な可変ステップ ソルバーのアプリケーションに関するヒントをまとめています。これらのソルバーの動作を比較した例については、スティッフなモデルによる可変ステップ ソルバーの調査を参照してください。
ODE ソルバー | 用途に関するヒント |
---|---|
ode15s |
|
ode23s |
|
ode23t | 関数 |
ode23tb |
|
メモ
スティッフな問題の場合、解は積分間隔に比して非常に短い時間スケールで変化する可能性がありますが、求めている解はそれよりはるかに長い時間スケールで変化します。スティッフな問題用に設計されていない手法は、可能な限り高速な変化を解くため十分に小さなタイム ステップで計算を行うため、解がゆっくりと変化する区間に対しては効果的ではありません。詳細については、Shampine, L. F.、『Numerical Solution of Ordinary Differential Equations』、Chapman & Hall、1994 を参照してください。
可変ステップ ソルバーの許容誤差
局所誤差
可変ステップ ソルバーは、標準制御法を使用してタイム ステップごとに局所誤差を監視します。各タイム ステップの間、ソルバーはステップの終端で状態値を計算し、局所誤差、すなわちこれらの状態値の予測誤差も判別します。その後で、局所誤差を、相対的許容誤差 (rtol) と絶対的許容誤差 (atol) の関数である許容誤差と比較します。局所誤差が任意の状態に対する許容誤差より大きい場合には、ソルバーはステップ サイズを小さくして再び試みます。
"相対許容誤差" は、各状態のサイズとの比較で誤差を測定します。相対的許容誤差は、状態の値の割合を表します。既定の 1e-3 は、計算された状態が 0.1% 以内の精度であることを意味します。
"絶対許容誤差" はしきい値誤差値です。この許容誤差は、測定された状態の値がゼロに近づくにつれて許容可能な誤差を表します。
ソルバーでは、
i
番目の状態に対する誤差 ei は、次式を満たす必要があります。
下の図は、状態のプロットと、相対的許容誤差と絶対的許容誤差が許容誤差を決める領域を示しています。
絶対許容誤差
モデルには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで、グローバル絶対許容誤差を設定できます。この許容誤差モデルのすべての状態に適用されます。auto
または実数スカラーを指定できます。auto
(既定) を指定すると、Simulink は各状態に対する絶対許容誤差を、相対許容誤差に基づいて初期設定します。相対許容誤差が 1e-3 より大きい場合、abstol
は 1e-6 に初期設定されます。ただし、reltol
が 1e-3 より小さい場合、その状態に対する abstol
は reltol * 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 scale absolute toleranceを参照してください。
一部のブロックでは、計算したり出力を定義したりするモデルの状態を解くために絶対許容誤差の値を指定できます。
これらのブロックに対してユーザーが指定した絶対許容誤差値は、[コンフィギュレーション パラメーター] ダイアログ ボックスでのグローバル設定値をオーバーライドします。たとえば、モデルの状態が大きく変化するなどの理由のため、グローバル設定値ではすべてのモデル状態のエラー制御が十分にできない場合は、グローバル設定値をオーバーライドできます。ブロックの絶対許容誤差値は次の値に設定できます。
auto
–
1
(auto
に同じ)positive scalar
real vector
(ブロック内の対応する連続状態の数と同じ次元)
ヒント
絶対許容誤差を設定する場合、低すぎる値を設定すると状態値のゼロ近辺でのソルバーのステップ数が多くなりすぎるため注意が必要です。結果的に、シミュレーションの速度が低下します。
反対に、高すぎる絶対許容誤差を設定した場合には、モデル内の 1 つ以上の連続状態がゼロに近づくにつれて、結果の精度が低くなる可能性があります。
シミュレーションが完了した後に、絶対許容誤差を低くして再度シミュレーションを実行することによって、結果の精度を検証できます。2 回のシミュレーションの結果が大幅に異なっていなければ、十分な精度が得られていると考えられます。