Main Content

物理シミュレーションに使用するソルバーの最適な選択

デスクトップ シミュレーションには可変ステップ ソルバーを使用することを推奨します。可変ステップ ソルバーは、特に時定数の広がりをもつシステムについて、シミュレーションのパフォーマンスと精度がより優れています。

最終的に固定タイム ステップを実行する場合でも、可変タイム ステップを使用してモデルのデバッグと検証を行います。可変ステップ ソルバーを使用したシミュレーションでは、後続の固定ステップ シミュレーションをチェックするためのベースライン結果が得られます。また、固定タイム ステップを実行すると、モデル化の問題がマスクされる可能性があります。まず可変ステップ ソルバーで実行することで、固定タイム ステップに切り替える前にこのような問題を明らかにして修正することができます。

ハードウェアへの展開には、固定タイム ステップが必要です。次の 2 つのメイン オプションがあります。

  1. Simscape™ ローカル ソルバー。このオプションでは、Simscape ネットワークが各サンプル時間でのみ更新されるため、サブサンプリングは発生しません。モデルの他の部分に対するソルバーとそのパラメーターの選択は、ローカル・ソルバーとは無関係です。したがって、たとえば複数の更新レートを使用するコントローラーをサポートするために、モデルの他の部分で複数の固定ステップ レートを設定することができます。

  2. Simulink® グローバル固定ステップ ソルバー。このオプションでは、モデル全体で 1 つのサンプル時間のみが許可されますが、固定ステップのゼロクロッシングをオンにするとサブサンプリングがサポートされます。詳細については、Use Fixed-Step Zero-Crossing Detection for Faster Simulationsを参照してください。このオプションは、パルス幅変調 (PWM) シミュレーションにおいて、固定タイム ステップでは PWM のオン時間割合が正確に解決されない場合に役立ちます。

シミュレーション時間の点では、オプション 1 の方がオプション 2 よりもパフォーマンスが優れている場合があります。どちらのオプションでも、固定ステップ サイズを、対象の最速時定数に対応するのに十分小さくする必要があります。ハードウェアへの展開の詳細については、リアルタイム シミュレーションを参照してください。

最適なソルバーの選択を行う前に考慮する必要がある主なシミュレーションの概念については、物理シミュレーションでの重要な概念と選択肢を参照してください。

可変タイム ステップでのシミュレーション

最初にモデルを作成する時点では、既定の Simulink ソルバーは VariableStepAuto です。ソルバーの選択で説明されているように、自動ソルバーは適切なソルバーを選択します。Simscape モデルの場合、自動ソルバー選択はモデルのタイプによって異なります。

  • R2021a 以降で作成された新しいモデルで、Simscape ブロックと微分代数方程式 (DAE) が含まれている場合、自動ソルバーは daessc を選択します。このようなモデルが R2021a より前のバージョンで作成されている場合、自動ソルバーは ode23t を使用します。既存のモデルをアップグレードして daessc を使用する方法の詳細については、daessc ソルバーを使用するためのモデルのアップグレードを参照してください。

  • システムを常微分方程式 (ODE) に縮小することが可能で、モデルがスティッフである場合、自動ソルバーは ode15s を選択します。

  • システムを常微分方程式 (ODE) に縮小することが可能で、モデルがノンスティッフである場合、自動ソルバーは陽的ソルバー ode45 を選択します。

自動ソルバー選択に頼らず、モデルのソルバーを明示的に選択することもできます。ソルバーを選択するには、初期設定の変更の手順と同様の手順に従います。

daessc 可変ステップ Simulink ソルバーは物理モデリング専用に設計されています。詳細については、daessc ソルバーの使用を参照してください。

一般的な Simscape モデルで推奨される可変ステップ ソルバーには、他に ode15sode23t があります。これら 2 つのソルバーには次の特徴があります。

  • ode15s ソルバーはより安定していますが、振動を減衰させる傾向にあります。

  • ode23t ソルバーは振動をよりうまく取得しますが、安定性は低くなります。

Simscape モデルを使用すると、これらのソルバーが物理モデルの微分部分と代数部分の解を同時に求めるため、シミュレーションの効率が高くなります。

固定タイム ステップによるシミュレーション — ローカルおよびグローバル固定ステップ ソルバー

Simscape モデルでは、グローバル可変ステップ ソルバーをそのまま使用し、各ネットワークの Solver Configuration ブロックでモデル内の物理ネットワークをローカル固定ステップ ソルバーに切り替えることにより、固定ステップ ソルバーを実装することが推奨されます。ローカル ソルバーの選択肢は以下のとおりです。

  • 後退オイラー法では振動が減衰する傾向がありますが、安定性は (特にタイム ステップを大きくした場合に) 向上します。

  • 台形則ソルバーは振動を取得できますが、安定性は低くなります。

  • 分割ソルバーを使用すると、Simscape ネットワークに対応する方程式系全体をより小さい方程式系のカスケードに分割することにより、リアルタイム シミュレーションの速度を上げることができます。すべてのネットワークを分割できるわけではありません。ただし、システムが分割可能な場合は、このソルバーによってリアルタイム シミュレーションの速度が大幅に上がります。詳細については、分割ソルバーの仕組みについて分割ソルバーを使用したシミュレーションの高速化を参照してください。

いずれのローカル ソルバーを選択した場合でも、次の時点では強制的に後退オイラー法が適用されます。

  • シミュレーションの開始時。

  • 瞬間的な変化 (当該のブロックでの内部離散変化) が発生した直後。このような変化として、クラッチのロックとロック解除、バルブ アクチュエータの開放と閉鎖、PS Asynchronous Sample & Hold ブロックの切り替えなどが挙げられます。

離散状態およびソルバーへの切り替え

  • 物理ネットワークをローカル ソルバーに切り替えると、グローバル ソルバーはそのネットワークが離散状態であると認識します。

  • モデル内の他の物理ネットワークがローカル ソルバーを使用していない場合、またはモデル内の Simscape 以外の部分が連続状態の場合、連続グローバル ソルバーを使用しなければなりません。

  • モデル内のすべての物理ネットワークがローカル ソルバーを使用していて、モデルの他の部分すべてに離散状態しかない場合、グローバル ソルバーは離散状態のみを認識します。その場合は、離散固定ステップ グローバル ソルバーが推奨されます。離散状態で固定コスト シミュレーションを実行する場合は、離散固定ステップ グローバル ソルバーを使用しなければなりません。

メモ

入力フィルター処理によって連続状態が発生する場合があります。離散ソルバーとローカル ソルバーの組み合わせを使用していて、連続状態を含むモデルに関するエラー メッセージが表示される場合は、モデル内の Simulink-PS Converter ブロックをチェックして、必要に応じて入力フィルター処理をオフにします。詳細については、入力信号のフィルター処理と時間微分の提供を参照してください。

固定ステップ シミュレーションで精度を最大限に引き上げる方法

ソリューションの精度が最優先となる場合は、グローバル Simulink 固定ステップ ソルバー ode14x を使用し、ローカル ソルバーは使用しないようにします。この陰的ソルバーは、物理システムに最適なグローバル固定ステップ ソルバーです。大部分のモデルについては ode14x の方が Simscape ローカル ソルバーより精度が高くなりますが、ローカル ソルバーと組み合わせて使用せずに単独で使用すると、計算処理が多くなり、処理速度が低下する場合があります。

このソルバーでは、タイム ステップごとのグローバルな陰的反復の回数を制限しなければなりません。この反復を制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで [Number Newton's iterations] パラメーターを設定します。

固定コストでのシミュレーション

Simscape モデルの多くでは、解を得るために 1 つのタイム ステップの中で複数回の反復が必要となります。タイム ステップごとのシミュレーションのコストを固定するには、この反復回数を制限しなければなりません。これはローカル ソルバーを使用している場合でも、ode14x などのグローバル ソルバーを使用している場合でも同じです。詳細は、制限なし、制限ありおよび固定コスト シミュレーションリアルタイム対応を可能にするための固定コスト シミュレーションを参照してください。

反復回数を制限するには、それぞれの物理ネットワークで Solver Configuration ブロックを開きます。[固定コストでの実行時整合性の反復を使用] を選択し、タイム ステップごとの非線形反復とモード反復の回数制限を設定します。関数 simscape.getLocalSolverFixedCostInfo を使用して、最適な非線形の反復回数を特定できます。

ヒント

大部分のシミュレーションでは、可変ステップ ソルバーによる固定コスト シミュレーションはできません。固定ステップ ソルバーのみを使用して固定コスト シミュレーションを実行するようにし、可変ステップ ソルバーを使用した固定コスト反復は行わないようにしてください。

ソルバーのパフォーマンスのトラブルシューティングと改善

速度に対する精度と安定性の基本的なトレードオフについて考慮する必要があります。タイム ステップや許容誤差の範囲を大きくするとシミュレーションの速度は向上しますが、精度と安定性は低下します。システムで突然な変化や急激な変化があった場合、許容誤差の範囲やステップ サイズが大きいと重大なエラーが発生する場合があります。以下に該当するシミュレーションでは、許容誤差やステップ サイズを小さくしてください。

  • 精度が十分でないか、または物理的にありえない結果になっている。

  • 状態値に不連続点がある。

  • 収束しないまま最小ステップ サイズに達している (このような場合は通常、タイム ステップ内で 1 つ以上のイベントが発生していたり、急激な変化が発生したりしています)。

これに該当するステップのいずれかまたはすべてにより精度は向上しますが、シミュレーションの実行速度は低下します。

ローカル ソルバーの場合

摩擦またはハード ストップが存在するモデルはローカル ソルバーでの処理が特に困難で、処理ができない場合や、タイム ステップを非常に小さくすることが必要となる場合があります。

台形則ソルバーを使用する場合、タイム ステップを大きくすると振動性 "リンギング" の問題が発生する可能性が高くなります。ローカル ソルバーでタイム ステップを大きくする場合は、後退オイラー法を使用してください。

ODE システムの場合

場合によっては、モデルは従属変数ではない代数の ODE システムにまとまることがあります。(Simscape モデルによる物理システムの表現を参照)その場合、任意のグローバル Simulink ソルバーを使用できます。物理モデリングに関して特別に考慮する項目はありません。このような場合、陽的ソルバーが最適となることがよくあります。

  • 慎重な解析によって、モデルが ODE システムで表されるかどうかを判別することができます。

  • Simscape モデルを Simscape 言語による数学的表現で作成する場合に、表されるシステムが ODE であるかどうかを直接判別できます。

大規模なシステムの場合

システム状態の数によっては、Solver Configuration ブロックの [Linear Algebra] 設定の値を変更すると、シミュレーションの効率性が向上する場合があります。

小規模なシステムの場合、[Full] を選択すると処理が速くなります。大規模なシステムの場合は、[Sparse] を選択した方が一般的には速くなります。

スティッフ - ノンスティッフ混合システムでの複数のローカル ソルバーの例

この例では、Simscape モデルに 3 つの物理ネットワークがあります。

  • 2 つのネットワーク (1 番と 3 番) でローカル ソルバーが使用されています。このため、グローバル ソルバーはこの 2 つのネットワークを離散状態であると認識します。内部的には、これらのネットワークは引き続き連続状態です。これらのネットワークのスティッフの程度はそれぞれ中程度と高程度です。

    これらのネットワークの 1 つ (1 番) で、後退オイラー法 (BE) ローカル ソルバーが使用されています。もう一方 (3 番) では台形則 (TR) ローカル ソルバーが使用されています。

  • 残りのネットワーク (2 番) ではグローバル Simulink ソルバーが使用されています。モデルでは、このネットワークの状態は連続状態として認識されます。このネットワークはスティッフではなく、完全な ODE です。陽的グローバル ソルバーを使用します。

  • モデルでは少なくとも 1 つのネットワークが連続状態として認識されているため、連続ソルバーを使用しなければなりません。ただし、ネットワーク 2 を削除し、モデルに Simulink 状態が存在しない場合は、Simulink は自動的に離散グローバル ソルバーに切り替えます。