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