此示例示出了在需要的范围的输入和参数值的运行并行模拟应用中的使用快速加速器。
我们使用的发动机怠速模型来模拟发动机的怠速转速。该模型的输入是所述旁路空气阀的电压和输出是怠速。
我们使用parsim
采用两组阀电压,并在两个值的范围内分别改变传递函数的三个增益参数中的两个。下表列出了将与参数值一起运行的8个模拟。外部输入,inpSets
中,在步骤2中创建的下面,并gain2
和gain3
为两个增益参数对应的变量。
跑 | ExternalInput | gain2 | gain3 |
---|---|---|---|
1 | inpSets(1) | 25 | 20 |
2 | inpSets(1) | 25 | 三十 |
3 | inpSets(1) | 35 | 20 |
4 | inpSets(1) | 35 | 三十 |
五 | inpSets (2) | 25 | 20 |
6 | inpSets (2) | 25 | 三十 |
7 | inpSets (2) | 35 | 20 |
8 | inpSets (2) | 35 | 三十 |
通过修改用于构建此示例的脚本文件,可以很容易地为自己的应用程序定制此示例。单击此页左上角的链接来编辑脚本文件。点击右上角的链接运行MATLAB®的这个例子。
首先我们打开在模拟模式已经被设置为快速加速器模型。缺省输入数据,并且所需要的参数被预加载在基部的工作区。
打开模型:
MDL =“sldemo_raccel_engine_idle_speed”;open_system(MDL);
在这里我们扰乱默认输入值向量,以获得新的输入值向量。
inpSets(1) = timeseries(inpData, time);rndPertb = 0.5 + rand(长度(时间),1);inpSets (2) = timeseries (inpData。* rndPertb、时间);numInpSets =长度(inpSets);
我们想看看怠速如何改变不同的值的参数gain2
和gain3
。创建一个数组万博1manbetxSimulink.SimulationInput
对象指定每个模拟不同的参数值和外部输入。SimulationInput对象的数组预分配获得更好的性能。另外请注意,外部输入可以在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 * numInpSets;(1:numSims) = Si万博1manbetxmulink.SimulationInput (mdl);idx = 1;对于IG2 = 1:num_gain2_vals对于IG3 = 1:num_gain3_vals对于inpSetsIdx = 1:numInpSets in(idx) = in(idx).setModelParameter('SimulationMode','快速',...'RapidAcceleratorUpToDateCheck',“关闭”,...“SaveTime”,'上',...'SaveOutput','上');使用setVariable为变量指定一个新值%的模拟在(idx) = (idx) .setVariable ('GAIN2'gain2_vals (iG2));在(idx) = (idx) .setVariable (“增益3”,gain3_vals(IG3));在(IDX).ExternalInput = inpSets(inpSetsIdx);IDX = IDX + 1;结束结束结束
请注意,我们还可以使用setModelParameter
的方法SimulationInput
对象组模型参数来运行快速加速器模式的模拟和启用日志记录。快速加速器目标是使用内置SetupFcn
。快速加速器目标是一次构建,并通过所有后续模拟节约模型编译所需的时间使用。下面是SetupFcn代码
函数sldemo_parallel_rapid_accel_sims_script_setup (mdl)%临时将workers上的当前文件夹更改为空%文件夹,以便在客户端上的任何现有slprj文件夹不%干扰在构建过程。currentFolder = pwd;tempDir = tempname;mkdir (tempDir);cd (tempDir);oc = onCleanup(@() cd (currentFolder));万博1manbetxSimulink.BlockDiagram.buildRapidAcceleratorTarget (mdl);结束
使用parsim
函数并行执行模拟。的数组SimulationInput
对象,在
,则将在最后一步中创建的parsim
函数作为第一个参数。在一个变量存储模拟输出数据,出
,其值是数组万博1manbetxSimulink.SimulationOutput
对象。每SimulationOutput
对象中包含已记录的信号SimulationMetadata
。当使用运行多个模拟parsim
,错误被捕获,以便后续的模拟可以继续运行。任何错误会在显示ErrorMessage
财产的SimulationOutput
对象。
OUT = parsim(在,'ShowProgress','上',...“SetupFcn”,@()sldemo_parallel_rapid_accel_sims_script_setup(MDL));
[16-OCT-2018 15:54:39]使用“本地”的个人资料...连接到并行池(:6名工人的数量)检查并行池的可用性...开始并行池(parpool)。[16-OCT-2018 15点55分37秒]并行的工人....万博1manbetx..分析开始Simulink和传输文件给工人...完成。[16-OCT-2018 15时55分38秒]配置模拟高速并行的工人文件夹... [10月16日2018 15时55分38秒]上并行运行工... SetupFcn [16-OCT-2018 15:56:28]在平行工人加载模型... [16-OCT-2018 15时56分29秒]运行模拟... [16-OCT-2018十五时56分34秒]已完成的8模拟运行1 [16-辛2018 15时56分34秒]已完成模拟运行2 8的[16-OCT-2018 15时56分34秒]已完成3 8的模拟运行[16-OCT-2018 15时56分34秒]已完成4 8的模拟运行[16-OCT-2018 15时56分34秒]已完成5 8的模拟运行[16-OCT-2018 15时56分34秒]已完成6 8的模拟运行[16-OCT-2018 15时56分38秒]已完成8 7的模拟运行[16-OCT-2018 15时56分38秒]已完成8 8的模拟运行[16-OCT-2018 15时56分38秒]清理平行工人...
绘制引擎空转速度相对于时间对不同的参数值和输入。的输出记录在所述阵列格式,并且可以从SimulationOutput对象进行访问。
对于i = 1:numSims simOut = out(i);t = simOut.tout;y = simOut.yout;情节(t, y)所有结束
删除(GCP(“nocreate”))
使用“本地”配置文件的并行池正在关闭。