在做研究的时候我们经常需要对模型的参数就行相应的选择,然而有没有觉得每次更改一个参数都需要运行一次仿真程序觉得很无聊呀,运行完程序还要看效果怎么样,然后再根据效果来调整参数,再次运行程序,如此反复。
下面我介绍一种在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
下面是模型文件的截图