如何加快Simulink模型的仿真速度
有幾種原因可能導致仿真運行速度很慢:
1. 模型中有一個 MATLAB 函數塊 :當存在 MATLAB Fcn 模塊時,在每個采樣時間都會調用 MATLAB 解釋器。這會大大降低仿真速度。所以,應盡可能使用內置Simulink模塊。
2. MATLAB S函數(S-Function):在每個時間步長都會計算 S-Function。把MATLAB代碼轉為MEX文件,這樣性能可以得到顯著提高。此外,如果可能,應盡量使用內置模塊建模。
3. 較小的步長或采樣時間(或者彼此間不是倍數關系的采樣時間):為了在仿真期間捕獲重要事件,有時必須設置最夠小的步長;反過來,步長太小會導致產生不必要的輸出點,從而減慢仿真速度。
4. 最大步長太小:如果您更改了最大步長,請嘗試用默認值(設置為自動)來運行仿真。
5. 您要求的精度可能過高:默認相對容差(0.1% 精度)通常就足夠了。對于狀態趨于零的模型,如果絕對容差參數太小,則仿真可能在近零狀態值附近采用過多步長。有關容錯度的詳細信息,請參閱《使用 Simulink 手冊》第 5-13 頁。請記住,所有要輸入的容差值都是絕對值。所以,默認相對容差值設置為 1e-3 時,意味著相對容差是 0.001,或者 0.1%(采用百分比形式)。
6. 時間尺度可能太長:減少時間間隔。
7. 您的模型中包含一個 Memory 模塊:使用 Memory 模塊會導致在每個步長上變階求解器(ode15s 和 ode113)被重置回階數 1。
8. Extras 庫中有包含以上三項之一(即Graph Scope、Autoscaling Scopes、Spectrum analyzer等)的Mask模塊:Unmask模塊來看看它們是否調用 S-Function。
9. 使用了Scope模塊:盡管它們的影響很可能不明顯。
10. 代數環:為了解代數環,會在每個步長上都執行迭代計算。因此,它大大降低了速度。有關代數環的詳細信息,請參閱《使用 Simulink 手冊》第 3-18 頁。
11. 不要在積分函數中引入白噪聲模塊:對于連續系統,使用 Extras/Sources 庫中的帶限白噪聲模塊。
12. 這可能是個剛性(stiff)問題,而您使用的是非剛性(non-stiff)求解器:嘗試使用 ode15s。
13. 您可能碰到了連續過零,導致仿真逐漸“停滯”,時間很長(并且可能是無限長時間):要解決此問題,可以禁用過零檢測。這可以通過在“Simulation 參數”(Simulation Parameters) 對話框的“高級”(Advanced) 窗格中選擇“禁用過零檢測”(Disable zero crossing detection) 選項來實現。在 R11 中,可通過轉到模型的“仿真”(Simulation) ->“參數”(Parameters) ->“診斷”(Diagnostics) 部分來實現此目的。
有關過零檢測的詳細信息,請參閱《使用 Simulink 手冊》第 5-44 頁。
14. 您也可能想要嘗試設置“模型參數配置”(Model Parameter Configuration) 對話框以便您的 Simulink 模型使用“內聯參數”(Inline Parameters) 選項:選擇此選項可使 Simulink 能夠將指定參數視為常量,從而加快仿真速度。請參閱《使用 Simulink 手冊》第 5-30 頁了解更多信息。
15. Simulink Accelerator 仿真模式可以加快仿真時間。Profiler可以分析模型性能瓶頸來提高仿真速度。
16. 如果模型非常復雜(涉及大量模型引用和子系統)且包含大量數據記錄,仿真速度也會受到影響:禁用數據記錄功能也能提高仿真速度。
除此之外,仿真速度受系統(即處理器、RAM、正在發生的交換量等)的制約。
關于仿真速度有還有幾點需要考慮:
- 圖形引擎速度
- CPU 速度
- 內存量
為此,下面是幾點提示:
- 如果在仿真過程中有打開的scope或其他可視化輸出設備,這些都會降低性能
- 性能與 CPU 速度成正比
- 如果在仿真過程中存儲的變量大于系統上的 RAM 量,則性能會很差。解決辦法是運行較小的仿真或增加內存
總結
以上是生活随笔為你收集整理的如何加快Simulink模型的仿真速度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Simulink中添加延迟环节
- 下一篇: 关于Simulink仿真慢的解决方案