Simulinkモデルのシミュレーション速度を低下させる原因を教えてください。
38 ビュー (過去 30 日間)
古いコメントを表示
Simulinkモデルのシミュレーション速度を低下させる原因を教えてください。
採用された回答
MathWorks Support Team
2012 年 12 月 14 日
シミュレーションを遅くする原因には次の点が挙げられます。
1. 対話的に MATLAB をコールする Interpreted MATLAB Function ブロック
2. MATLAB コード S-Function
3. 微小なステップサイズやサンプル時間(または各々のサンプル時間が倍数関係にないマルチサンプル時間)
4. 小さすぎる最大ステップサイズ
5. 厳しすぎる精度
6. 長すぎる解析時間
7. Memoryブロック
8. Simulink Extrasライブラリのマスクされたブロック
9. Scopeブロック
10. 代数ループ
11. White NoiseブロックからIntegratorブロックへの結線
12. スティッフなモデルのシミュレーションに非スティッフなソルバを使用
13. 連続的なゼロクロッシング検知によるシミュレーション硬直
14. インラインパラメータオプションの未設定
以下、それぞれについて説明します。
1. 対話的に MATLAB をコールする Interpreted MATLAB Function ブロック
Interpreted MATLAB Functionブロック (R2010b 以前の名称では MATLAB Fcn ブロック ) が存在すると、各時間ステップ毎に MATLAB がコールされ、シミュレーション速度に大幅な影響を及ぼします。可能な限り、既存ブロックを使用してください。
2. MATLAB コード S-Function
MATLAB コード S-Functionは各時間ステップ毎に実行されます。MATLAB コード S-Functionの代わりにC-MEX S-FunctionやFortran MEX S-Functionを使用することができれば、MEX-ファイルに変換することによって、パフォーマンスを著しく改善することができます。また、1.と同様に、可能であれば既存ブロックを使用してください。
3. 微小なステップサイズやサンプル時間(または各々のサンプル時間が倍数関係にないマルチサンプル時間)
シミュレーションにて精度良くデータを取得するためには、十分に小さいステップサイズを保つことは重要ですが、ステップサイズが小さすぎると必要以上の点を出力し、シミュレーションを遅くします。
4. 小さすぎる最大ステップサイズ
最大ステップサイズを変更している場合は、デフォルト値の"auto"でシミュレーションを試してください。
5. 厳しすぎる精度
デフォルトの相対許容誤差(1e-3)は、通常、十分な精度を保ちます。また、ゼロになるような状態量を持つモデルの場合は、絶対許容誤差が小さすぎると、ゼロ付近の状態値でステップ数が多くなる場合があります。
6. 長すぎる解析時間
可能であれば解析時間を短くしてください。
7. Memoryブロック
Memoryブロックを使用すると、各時間ステップ毎に可変ソルバ(ode15sやode113)の次元が1にリセットされてしまい、結果としてシミュレーションが遅くなります。
8. Simulink Extrasライブラリのマスクされたブロック
Simulink Extrasライブラリ内のマスクされたブロックがMATLAB コード S-Functionをコールしている場合(Spectrum Analyzer等)、シミュレーションが遅くなります。これらのブロックは、右クリックして[マスクブロックのモデル表示]を選択することでMATLAB コード S-Functionの存在を確認できます。
9. Scopeブロック
影響は微小ですが、速度に影響します。
10. 代数ループ
代数ループの解は、各時間ステップ毎に繰り返し計算を要します。そのため著しく速度が低下します。
11. White NoiseブロックからIntegratorブロックへの結線
White Noise ブロックをIntegrator ブロックに接続すると、シミュレーション速度が遅くなる傾向があります。連続システムに対しては、White Noiseブロックの代わりにBand-Limited White Noiseブロックを使用してください。
12. スティッフなモデルのシミュレーションに非スティッフなソルバを使用
モデルがスティッフな場合は、スティッフなシステムに対応したソルバ、たとえば、ode15sなどを使用してください。
13. 連続的なゼロクロッシング検知によるシミュレーション硬直
ゼロクロッシングの検知を無効にすると、この現象を回避することができます。コンフィギュレーションパラメータの[ソルバ]→[ゼロクロッシングオプション]の[ゼロクロッシングコントロール]から[すべて無効]を選択します。
14. インラインパラメータオプションの未設定
シミュレーションをより高速にするために、可能であれば、コンフィギュレーションパラメータの[最適化]→[シミュレーションとコード生成]から[インラインパラメータ]にチェックを入れてください。このオプションを選択すると、指定したパラメータが定数値として扱われ、シミュレーション速度が向上します。
上記以外の要因として、システム(グラフィックスエンジンのスピード、CPUスピード、メモリの量など)にも依存します。次の点にも注意してください。
- シミュレーション中に開いているScopeやその他のビューアが存在する場合、パフォーマンスが低下します。
- シミュレーション速度は、CPUスピードに比例します。
- シミュレーション中に保存される変数によって使用されるメモリがシステムのRAMの量より大きくなると、パフォーマンスは低下します。
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!