Simulink作為MATLAB中最為強大的APP,相信用的人不會少,不過MATLAB里的sim()函數,你們又知道多少呢?用過Simulink的同學應該不會對這個界面感到陌生吧。
圖形界面的好處是直觀,學習成本低,使用方便,但是當你的Simulink模型只剩下參數需要修改,又或者需要批量模擬的時候,這個圖形界面就不一定能夠滿足你的要求了,這個時候就該sim()函數閃亮登場了。
其實說白了sim()函數其實就是調用simulink模型的一個介面,雖然看上去挺簡單,但是功能很齊全。而它的使用場景有以下幾種情況:
使用函數調用以後,模擬的時間是能夠降下去的,主要是因為圖形界面的開銷沒有了
例:使用默認模型配置參數對模型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 |