加速吧!Simulink君!(一)
Simulink在模擬過程中,大家往往都會遇到模擬速度過慢的問題。由於此類問題發生的砸滑鼠,鍵盤,甚至顯示器的事件也是屢見不鮮。為了防止上述事件的持續發生,我們作為Modeler 有什麼可以做的嗎? 當遇到Simulation很慢的時候往往需要具體模型具體分析,從而因地制宜。下面我們來介紹一些經驗,也歡迎大家一起討論。
首先,建議你換台電腦試試。
其次,我們來介紹一下連續系統(Continuous Model)在求解器上有哪些加速的方法。假設我們的用的是一個連續系統,那麼在Solver的選擇上面我們有兩個選擇:
1. Variable-step
2. Fixed-step

先講講variable-step。
variable-step 在求解過程中會根據用戶的設定來動態的決定步長(主要是根據每一步的數值解是否滿足tolerance,tolerance的選擇屬於個人「喜好」)。variable-step 在求解過程中會分為major time step 和 minor time step, 每一個major time step由多個minor time step組成,如圖。

那麼Major time step受到max step size的限制,而minor time step 的大小和數目是由min step size 控制。 默認的最大步長是 (stop_time - start_time)/ 50, 默認最小步長是無限小,也就是說如果解不滿足tolerance的要求的話可以算無限步。



輸出時間,然後再模擬後畫出時間的圖像來觀察步長:
semilogy(tout(1:end-1),diff(tout)); % aeroblk_HL20 for 5 sec simulationn


這樣我們可以看到step size也提高到了0.03。
這裡我們還可以進一步了解模型需要的最小步長:
min(diff(tout))n
根據最小步長來分析系統在什麼狀態下是需要小布長來進行計算,從而也可以調整系統的參數或者模塊的初始狀態來加快運算。
接下來說說fixed-step solve。
一句話:絕大多數情況下,variable-step要比fixed-step要快。(因為步長可長可短比較合理)
那麼除了調整time step,對於solver的選擇也是一個很讓人困擾的問題。
15b之後, Simulink 提供了 auto solver selection, 會跟據model 的屬性自動選擇solver,根據doc里寫的,heuristic是如下的table :

那麼我在向各位讀者提出幾個問題:
simScape的local solver在哪裡設置?設置local solver和選用global solver的區別是什麼?求選擇local solver後global solver的心理陰影面積。
但然除了對time step和model進行調整外,還有兩大法寶來加速模擬:
Run Simulation in Accelerator mode
Run Parallel Simulations
大家更想聽聽哪一個呢?
推薦閱讀:
※Simulink之——S函數
※使用基於模型設計開發AUTOSAR軟體組件
※細節和效率,哪個更重要?
※simulink 里如何搭建運放?求指導
※半實物平台模擬和simulink模擬有何異同?
