ドキュメンテーション センター

  • 評価版
  • 製品アップデート

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

ソルバーの選択

ソルバーとは?

ソルバーは、Simulink® ソフトウェアのコンポーネントです。Simulink 製品は、広範なソルバーのライブラリを備えており、各ソルバーは、次のシミュレーション ステップの時間を判断し、数値法を適用して、モデルを表す常微分方程式のセットを解きます。この初期値の問題を解決するプロセスにおいて、ソルバーは指定された精度要件も満たします。アプリケーションに最も適したソルバーを選択できるように、「ソルバー タイプの選択」では各種のソルバーの背景について説明しており、「固定ステップ ソルバーの選択 」と「可変ステップ ソルバーの選択」では特定の固定ステップ ソルバーまたは可変ステップ ソルバーを選択するためのガイダンスをそれぞれ提供しています。

次の表は、Simulink ライブラリに含まれているソルバーの種類をまとめたもので、特定のカテゴリへのリンクを示しています。これらのソルバーはいずれも代数ループ ソルバーと併用できます。

  離散連続可変次数
固定ステップ陽的該当なし陽的な固定ステップ連続ソルバー該当なし
陰的該当なし陰的な固定ステップ連続ソルバー該当なし
可変ステップ陽的可変ステップ ソルバーの選択陽的な連続可変ステップ ソルバー可変次数ソルバー
陰的 陰的な連続可変ステップ ソルバー可変次数ソルバー

    メモ:  

    1. 固定ステップ離散ソルバーは、離散状態を解きません。各ブロックはソルバーとは関係なくその離散状態を計算します。詳細は、「離散ソルバーと連続ソルバー」を参照してください。

    2. Simulink ライブラリ内の各ソルバーは、代数ループを含むモデルに対して実行できます。

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

ソルバー タイプの選択

Simulink のソルバーのライブラリは、「[ソルバー] ペイン」において、固定ステップと可変ステップという 2 つのタイプに分けられます。これらの各カテゴリ内でソルバーをさらに分けると、離散または連続、陰的または陽的、1 ステップまたはマルチステップ、単一次数または可変次数に分けられます。

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

固定ステップと可変ステップの両方のソルバーでは、次のシミュレーション時間を、現在のシミュレーション時間と "ステップ サイズ" として知られている数量の和として計算します。固定ステップ ソルバーでは、ステップ サイズはシミュレーションを通して一定です。対照的に、可変ステップ ソルバーでは、ステップ サイズは、モデルのダイナミクスに応じて、ステップごとに変化する場合があります。特に可変ステップ ソルバーは、ステップ サイズを増加または削減して、指定された許容誤差を満たします。Simulink のソルバーのコンフィギュレーション ペインにある [タイプ] コントロールを使用すると、これらの 2 種類のソルバーのどちらかを選択できます。

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

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

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

このモデルは、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 ...]

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

ステップを等間隔にするには、[0.0:0.4:40] ではなく、0.4*[0.0: 100.0] の形式を使用しなければなりません。

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

ソルバーのコンフィギュレーション ペインの [タイプ] コントロールを [固定ステップ] または [可変ステップ] に設定すると、その隣にあるソルバー コントロールにより、特定のソルバーを選択できるようになります。どちらのソルバーのセットも、離散と連続の 2 つのタイプからなります。離散ソルバーと連続ソルバーは、モデル ブロックに基づいて離散状態の値を計算します。離散状態を定義するブロックが、各タイム ステップでそれらの状態の値を計算します。ただし、離散ソルバーとは異なり、連続ソルバーでは数値積分を使用して、ブロックが定義した連続状態を計算します。したがって、ソルバーを選択するときには、離散ソルバーと連続ソルバーのどちらを使用するかをまず決定しなければなりません。

モデルに連続状態がない場合、Simulink では固定ステップ離散ソルバーまたは可変ステップ離散ソルバーに切り替えます。モデルに連続状態が存在する場合は、モデルのダイナミクスに基づいて、残りのソルバーの選択肢から連続ソルバーを選択しなければなりません。そうでない場合、エラーが発生します。

陽的ソルバーと陰的ソルバー

連続ソルバーには陰的ソルバーと陽的ソルバーのどちらかを適用できますが、陰的ソルバーは特にスティッフな問題を解くように設計されており、陽的ソルバーはスティッフでない問題を解くために使用します。スティッフなシステムに対して一般的に受け入れられている定義とは、非常に異なる時間スケールをもつシステムです。陽的ソルバーと比較すると、陰的ソルバーは振動動作に対してより高い安定性をもたらしますが、計算量が多くなります。陰的ソルバーはヤコビ行列を生成し、ニュートン法のような方法を使用して、タイム ステップごとに代数方程式の集合を解きます。この余分なコストを削減するために、陰的ソルバーにはそのシミュレーション性能を向上させるための [ソルバーのヤコビ メソッド] パラメーターが用意されています。詳細は、「陰的なソルバーに対するヤコビ メソッドの選択」を参照してください。

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

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

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

可変次数ソルバー

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

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

Simulink の固定ステップ離散ソルバーについて

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

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

Simulink の固定ステップ連続ソルバーについて

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

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

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

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

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

Simulink は、陽的な固定ステップ連続ソルバーを提供します。ソルバーは、モデルの状態導関数の計算に使用する特定の数値積分手法において異なります。次の表は、各ソルバーと、ソルバーが使用する積分手法の一覧です。

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

ode1

オイラー法

1 次

ode2

Heun 法

2 次

ode3

Bogacki-Shampine 式

3 次

ode4

4 次のルンゲ・クッタ法

4 次

ode5

Dormand-Prince (RK5) 式

5 次

ode8

Dormand-Prince RK8(7) 式

8 次

この表は、最も複雑でないもの (ode1) から最も複雑なもの (ode8)まで、使用する積分手法の計算的な複雑度の順番にソルバーを示しています。

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

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

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

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 は離散ソルバーを使用してモデルをシミュレートします。モデルが連続状態をもつ場合、連続ソルバーは、次のタイム ステップで連続状態の値を計算するために数値積分を使用します。

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

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

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

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

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

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 よりも効率的である場合があります。

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

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

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

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

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

陰的な可変ステップ ソルバーを選択するためのヒント-  次の表は、陰的な可変ステップ ソルバーのアプリケーションに関連するヒントをまとめています。これらのソルバーの動作を比較した例は、sldemo_solverssldemo_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 は、次式を満たす必要があります。

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

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

計算された設定値が適切でない場合は、適切な設定値を指定できます。絶対的許容誤差に対する適切な値を決定するには、シミュレーションを複数回実行する必要があります。

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

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

  • auto

  • 1 ( auto に同じ)

  • real scalar

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

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

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

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

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

ソルバーのヤコビについて

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

上のシステム方程式から形成されるヤコビ J は次のとおりです。

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

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

次のシステム方程式を考えます。

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

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

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

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

    メモ:   [ソルバーの診断制御] ペインで [自動ソルバー パラメーターの選択][警告] または [エラー] に設定し、Simulink 以外のソルバー メソッドを選択すると、警告またはエラーが表示される場合があります。

制限-  ソルバーのヤコビ メソッドには、次のような制限が関連付けられています。

  • 解析的ヤコビ メソッドを選択した場合に、モデル内の 1 つまたは複数のブロックに解析ヤコビが存在しないと、Simulink によって摂動法が適用されます。

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

発見的な [自動] 法

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

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

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

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

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

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

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

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

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

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

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

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

スパース パターン

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

コード生成のサポート

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

この情報は役に立ちましたか?