此示例显示在需要运行并行模拟的应用程序中使用快速加速器进行一系列输入和参数值。
我们使用模拟发动机空闲速度的发动机空闲速度模型。该模型的输入是旁路空气阀的电压,输出是空闲速度。
我们使用并行模拟运行Parsim
通过两组阀电压,并且通过在两个值的范围内独立地改变传递函数的三个增益参数中的两个。下表列出了将与参数值一起运行的八个模拟。外部输入,不平等
,是在下面的第2步创建的,BAIN2.
和GAIN3.
是对应于两个增益参数的变量。
跑 | 外差 | BAIN2. | GAIN3. |
---|---|---|---|
1 | 不适应(1) | 25. | 20. |
2 | 不适应(1) | 25. | 30. |
3. | 不适应(1) | 35. | 20. |
4. | 不适应(1) | 35. | 30. |
5. | 不适应(2) | 25. | 20. |
6. | 不适应(2) | 25. | 30. |
7. | 不适应(2) | 35. | 20. |
8. | 不适应(2) | 35. | 30. |
通过修改用于构建此示例的脚本文件,易于为自己的应用程序自定义此示例。单击此页面左上角的链接以编辑脚本文件。单击右上角的链接以从MATLAB®运行此示例。
首先,我们打开模型,其中模拟模式已设置为快速加速器。默认输入数据和所需的参数在基础工作区中预加载。
开放模型:
mdl ='sldemo_raccel_engine_idle_speed';Open_System(MDL);
这里我们扰乱了默认输入值向量以获得新的输入值向量。
不适应(1)= TimeSeries(Inpdata,时间);rndpertb = 0.5 + rand(长度(时间),1);不平实集(2)= TimeSeries(Inpdata。* rndpertb,时间);numinpsets =长度(不适应);
我们希望了解闲置速度如何变为不同的参数值BAIN2.
和GAIN3.
。创建一个数组万博1manbetxsimulink.simulationInpul.
对象指定每个模拟的不同参数值和外部输入。仿真量阵列对象是预分配的,以获得更好的性能。另请注意,外部输入可以直接在SimulationInPut对象上指定,而不是使用型号参数。
gain2_vals = 25:10:35;gain3_vals = 20:10:30;num_gain2_vals =长度(gain2_vals);num_gain3_vals =长度(gain3_vals);numsims = num_gain2_vals * num_gain3_vals * num.psets;在(1:numsims)= si万博1manbetxmulink.simulationInput(MDL);Idx = 1;为了IG2 = 1:num_gain2_vals为了IG3 = 1:num_gain3_vals为了inpsetsidx = 1:numinpsets(idx)= in(idx).setmodelparameter('simulationmode'那'迅速的'那......'Rapidacceleratoruptodatecheck'那'离开'那......'省时间'那'在'那......'saptoutput'那'在');%使用SetVariable来指定变量期间的新值%模拟在(idx)=中(IDX).setvariable('gain2',gain2_vals(Ig2));在(idx)=中(IDX).setvariable('gain3',gain3_vals(Ig3));在(IDX).externalInput = Inpsets(Inpsetsidx);idx = idx + 1;结尾结尾结尾
注意我们也使用setmodelparameter.
方法的方法模拟算法
对象设置模型参数以在快速加速器模式下运行模拟并启用日志记录。快速加速器目标是使用该的setupfcn.
。快速加速度目标是一次构建一次,并通过所有后续模拟使用,从而节省了模型编译所需的时间。这是setupfcn的代码
功能sldemo_parallel_rapid_accel_sims_script_setup(mdl)%临时将工人上的当前文件夹更改为空%文件夹,以便客户端上的任何现有的SLPRJ文件夹都没有%干扰构建过程。CurrentFolder = PWD;tempdir = tempname;MKDIR(Tempdir);CD(Tempdir);oc = oncleanup(@()cd(currentfolder));万博1manbetxsimulink.blockdiagram.buildRapidaccelEratortarget(MDL);结尾
使用Parsim
函数并行执行模拟。阵列模拟算法
对象,在
,在最后一步中创建的被传递到Parsim
用作第一个参数。将仿真输出数据存储在变量中,出去
,其值是一系列的万博1manbetxsimulink.simulationOutput.
对象。每个仿真output.
对象包含记录信号以及仿真metadata.
。运行多个模拟时Parsim
,捕获错误,以便随后的模拟可以继续运行。任何错误都会显示出来错误信息
财产的财产仿真output.
目的。
出局= Parsim(在,'showprogress'那'在'那......'setupfcn',@()sldemo_parallel_rapid_accel_sims_script_setup(mdl));
[16-O10-2018 15:54:39]检查并行池的可用性...使用“本地”配置文件...启动并行池(Parpool)...连接到并行池(工人数:6)。[16-O10-2018 15:55:37]在并行工人上启动Si万博1manbetxmulink ...分析和将文件转移到工人......完成。[16-O10-2018 15:55:38]配置并行工人的模拟缓存文件夹... [16-O10-2018 15:55:55:38]并行工作人员运行setupfcn ... [16-O10-2018 15:56:28]在平行工人上加载模型... [2018年10月15:56:29]运行模拟... [16-O10-2018 15:56:34]完成了8个模拟运行[16-2018年10月15:56:34]完成了8个模拟运行中的2个[16-O10-2018 15:56:34]完成了8个模拟运行中的3个[16-O10-2018 15:56:34]完成了4个模拟运行[16-O10-2018 15:56:34]完成了8个模拟运行中的5个[16-O10-2018 15:56:34]完成了8个模拟运行中的6个[16-O10-2018 15:56:38]完成8个仿真运行中的7个[16-oct-2018 15:56:38]完成了8个模拟运行中的8个[16-O10-2018 15:56:38]清理平行工人......
在不同参数值和输入的时间方面绘制发动机空闲速度。输出以阵列格式记录,可以从SimulationOutput对象访问。
为了i = 1:numsims simout = out(i);t = simout.tout;y = simout.yout;绘图(T,Y)持有全部结尾
删除(GCP('noicreate')))
使用“本地”配置文件的并行池正在关闭。