Main Content

シミュレーションの高速化

シミュレーション速度を低下させる可能性がある要因はいくつかあります。モデルが次の条件に当てはまるかどうかを確認してください。

  • モデルに Interpreted MATLAB Function ブロックが含まれている。モデルに Interpreted MATLAB Function ブロックが含まれていると、タイム ステップごとに MATLAB® 実行エンジンが呼び出され、シミュレーションが著しく低速になります。できるだけ Math Function ブロックを使用してください。

  • モデルに MATLAB ファイルの S-Function が含まれている。MATLAB ファイルの S-Function でも、タイム ステップごとに MATLAB 実行エンジンが呼び出されます。S-Function をサブシステムまたは C-MEX ファイル S-Function に変換することを検討してください。

  • モデルに Memory ブロックが含まれている。Memory ブロックを使用すると、可変次数ソルバー (ode15s および ode113) がタイム ステップごとに 1 次に再設定されます。

  • 最大ステップ サイズが小さすぎる。最大ステップ サイズを変更した場合は、既定値 (auto) を使用して再度シミュレーションを実行してみてください。

  • 精度の要件が高すぎる。通常は、既定の相対許容誤差 (0.1% の精度) で十分です。状態がゼロに移動するモデルの場合、絶対許容誤差のパラメーターが小さすぎると、状態値がゼロに近いところでシミュレーションのステップ数が過剰になります。オンライン ドキュメンテーションの「Maximum order」でこのエラーの説明を参照してください。

  • 時間スケールが長すぎる。間隔を短くしてください。

  • スティッフなシステムを表すモデルでノンスティッフなソルバーを使用している。ode15s を使用してみてください。詳細については、システムのスティッフを参照してください。

  • モデルで互いに倍数でないサンプル時間を使用している。互いに倍数でないサンプル時間を混ぜると、ソルバーは小さいステップを使用して、すべてのサンプル時間のサンプル時間がヒットするようにします。

  • モデルに代数ループが含まれている。代数ループに対する解は、タイム ステップごとに反復計算されます。したがって、パフォーマンスが大幅に低下します。詳細については、代数ループの概念を参照してください。

モデルのブロックについて、次の状況を確認できます。

  • モデルは、Random Number ブロックを Integrator ブロックに入力している。連続システムの場合は、Sources ライブラリの Band-Limited White Noise ブロックを使用してください。

  • モデルに含まれているスコープ ビューアーが表示するデータ点が多すぎる。パフォーマンスに影響するビューアーのプロパティ設定を調整してみてください。詳細については、Scope Viewer を参照してください。

  • モデルのシミュレーションを繰り返し実行する必要がある。反復間で調整可能なパラメーターを変更しますが、モデルに構造的な変更は加えないでください。反復のたびにモデルを再コンパイルする必要があるため、全体のシミュレーション時間が長くなります。シミュレーションを繰り返し実行するには、高速リスタートを使用してください。このワークフローでは、モデルは 1 回だけコンパイルされ、反復的なシミュレーションは 1 つのコンパイル フェーズに関連付けられます。詳細については、高速リスタートによる反復的なシミュレーションの改善を参照してください。

関連する例

詳細