標籤:

[Matlab] Simulink用得多了,不知道sim()函數你又知多少?

前言

Simulink作為MATLAB中最為強大的APP,相信用的人不會少,不過MATLAB里的sim()函數,你們又知道多少呢?用過Simulink的同學應該不會對這個界面感到陌生吧。

圖形界面的好處是直觀,學習成本低,使用方便,但是當你的Simulink模型只剩下參數需要修改,又或者需要批量模擬的時候,這個圖形界面就不一定能夠滿足你的要求了,這個時候就該sim()函數閃亮登場了。

使用場景

其實說白了sim()函數其實就是調用simulink模型的一個介面,雖然看上去挺簡單,但是功能很齊全。而它的使用場景有以下幾種情況:

  • 批量模擬

    當Simulink模型已經固定下來需要調參或者需要批量模擬的時候,循環語句+sim()函數能夠輕鬆實現這個目標,而且還可以使數據自動導出保存。
  • 參數優化

    這其實已經是以函數的方式調用simulink模型了,這樣的話,MATLAB一眾的優化函數自然就能夠用上了
  • 性能提升

    使用函數調用以後,模擬的時間是能夠降下去的,主要是因為圖形界面的開銷沒有了

簡單入門

例:使用默認模型配置參數對模型Simulink_Model進行模擬,結果返回到工作空間中,模型文件要在同一目錄下

simOut = sim(Simulink_Model,ReturnWorkspaceOutputs,on);

進階使用

接下來就要對更多模擬的參數進行細節的調整,基本上在圖形界面上經常調整的比如變步長模式的絕對容差,定步長模式裡面的步長,求解器,求解模式,停止時間等等都可以在這裡進行設置,不過要是不用改的話,就不設置就好了,會按照你在圖形界面設定好的配置進行運行的。

例:假在絕對容差為 1e-5 的條件下以 Rapid Accelerator 模式對模型 Simulink_Model 進行模擬,並將狀態保存在 xoutNew 中,將輸出保存在 youtNew 中。

simOut = sim(vdp,SimulationMode,rapid,AbsTol,1e-5,...
StopTime, 30, ...
ZeroCross,on, ...
SaveTime,on,TimeSaveName,tout, ...
SaveState,on,StateSaveName,xoutNew,...
SaveOutput,on,OutputSaveName,youtNew,...
SignalLogging,on,SignalLoggingName,logsout);

批量模擬

當然啦,單次的模擬是體現不出來這個函數的威力的,最起碼也要批量模擬才能夠體現出這個函數的優勢,以下是我進行批量模擬的一段代碼,其實搞清楚了過程是很簡單的。

例在MATLAB腳本的目錄下有一個名為 Simulink_Model 的simulink模型文件,需要對裡面的一個叫 parameter 的參數進行批量模擬,那麼對應的常式如下

首先要定義出需要進行批量模擬的參數,然後創建一個 Simulink.SimulationInput 類,然後利用 setVariable() 這個函數對模型里的參數進行賦值,代碼裡面 D_m 是模型中對應參數的名字。

然後利用循環構建一個 SimulationInput 結構體組成的數組,放進函數裡面進行模擬就可以了。

至於模擬結果嘛,其實原來保存進工作空間的結果,都會保存在simOut這個結構體裡面,模擬結束後翻一下這個結構體就可以了。

%% 添加批量運行參數
parameter = 1 : 5;

%% 定義Simulink模型批量運行
model = Simulink_Model;
for i = 1:length(parameter)
in(i) = Simulink.SimulationInput(model);
in(i) = in(i).setVariable(D_m, parameter(i));
end
in = in.setModelParameter(AbsTol, 1e-5, ...
SimulationMode, accelerator, ...
Solver, ode4,...
StopTime, 1);

%% 運行批量模擬並載入監視器
simOut = sim(in, ShowSimulationManager, on);

結語

平時碼字比較少,可能語言不是很清晰,不要見怪,有任何不懂的地方,可以查閱MATLAB的官方文檔,鏈接如下,有需要的再補充。

動態系統模擬 sim() 函數幫助?

ww2.mathworks.cn

模擬監視器?

ww2.mathworks.cn圖標批量模擬?

ww2.mathworks.cn


推薦閱讀:

TAG:MATLAB |