在做研究的時候我們經常需要對模型的參數就行相應的選擇,然而有沒有覺得每次更改一個參數都需要運行一次仿真程序覺得很無聊呀,運行完程序還要看效果怎么樣,然后再根據效果來調整參數,再次運行程序,如此反復。
下面我介紹一種在MATLAB中利用M文件實現對Simulink中S函數的程序實現自動調參數的功能。前面的一些準備工作可以參數我的這篇博文在Simulink中對S 函數進行參數傳遞的三種方法。
1、在Simulink中搭建好模型文件。
2、按照鏈接博客中的方法設置好模型文件中的S函數模塊。
3、用M文件編寫相應的程序,設置好仿真時間,和變量如何變化等等。
4、運行M文件,用程序自動給你調參數,選擇出最好的參數吧。
function startsim2()
for a=5:1:6 %這里可以用來設置循環次數,也可以作為每次循環要傳遞的不同參數值
for b=20:1:21
set_param('test/S-Function4','a',num2str(a)); %%在模塊名和單引號之后不能有空格,否則會提示找不到相應的模塊
set_param('test/S-Function4','b',num2str(b));
%%set_param('Model_name', 'SimulationCommand', 'start');%%用了下面的語句就不要使用這條語句,否則也會報錯:提示不能在同一個仿真中同時打開兩個相同的模型
simOut = sim('test',...
'StopTime', '2', ...
'ZeroCross','on', ...
'SaveTime','on','TimeSaveName','tout', ...
'SaveState','on','StateSaveName','xoutNew',...
'SaveOutput','on','OutputSaveName','youtNew',...
'SignalLogging','on','SignalLoggingName','logsout'); %%每行后面的...是為了表示分行所用的,參數應該是可以不用傳遞這么多的,但是現在還不是特別清楚這個變量的含義
x=simOut.get('x'); %%這條語句用來獲取Simulink中的數據
%這里根據自己的需要編寫相應的程序,可以根據獲取的結果來更改下次
%運行的參數。
set_param('test', 'SimulationCommand', 'stop'); %結束仿真
end
end
end
下面是模型文件的截圖

|