Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

使用parsim可以很容易地并行模拟模型

前段时间,我写了一系列文章来强调并行运行模拟时需要考虑的不同因素。在R2017a中,我们引入了一个新函数,使它变得更加容易:parsim

让我们看看它是如何工作的!

金宝app仿真软件。SimulationInput

如果你要用并行计算工具箱要多次模拟一个模型,显然需要更改某些内容以使每次运行不同。这是通过金宝app仿真软件。SimulationInput对象。

通过创建一个金宝app仿真软件。SimulationInput在每个模拟中,您可以定义特定于每次运行的属性,包括初始状态、模型参数、块参数、输入信号和模型使用的变量。

让我们以这个简单的弹跳球模型为例,尝试在不同的恢复系数下并行模拟它。

弹力球

在本例中,我们将模拟10个不同的值,从0.2到0.9。为此,我创建了一个10个Simulink的数组。金宝app对象,并使用setBlockParameter方法为每个模拟指定恢复系数。然后我可以简单地传递这个Simulink数组。金宝appSimulationInput来parsim的数组作为输出金宝app仿真软件。SimulationOutput对象。

Parsim简单例子

一个更现实的例子

让我们通过添加以下内容来让这个弹跳球的例子更加真实:

工作空间变量:之前parsim,并行模拟模型时的挑战之一是管理模型所需的变量。我试着提供一些建议和技巧来帮助你这是之前的文章.对于我们的弹跳球示例,与其在块对话框中硬编码重力和恢复系数等参数的值,不如让它们成为MATLAB基本工作空间中的变量,由MATLAB脚本创建。

带有工作空间变量的弹跳球模型

输出处理:在大多数情况下,模拟会产生大量的数据。如果在远程集群上进行模拟,则可能希望避免传输所有这些数据。相反,您可以对记录的数据进行后期处理,并将其简化为您真正感兴趣的内容。

对于后期处理,我们需要创建一个函数,该函数接收模拟输出对象作为输入,并返回结构输出。例如,我可以使用记录的位置来计算球停止反弹所需的时间,以及它反弹了多少个篮板。

岗位模拟功能

有了这个设置,我们就可以创建我们的Simulink数组了。金宝app对象,并使用setVariable方法为工作区变量指定不同的值Cr.对于后处理函数,我们将其指定为模拟输入对象的postSimFcn属性的句柄。

下面是它的样子:

Parsim例子

注意我是如何使用的UseFastRestart选项,通过在每个worker上只编译一次模型来进一步加快速度。

处理错误

我喜欢的一点是parsim是模拟出错时它的行为。

在这个例子中,是Simulink。金宝appSimulationOutputobject contains all the logged data until the error happened, and aErrorMessage描述错误原因的字段。

Parsim错误输出

这对于理解哪里出了问题而不需要重新模拟模型非常有用。

如果您无法根据记录的数据找出哪里出了问题,那么您很可能希望向模型添加更多检测,并在主机上重新模拟它。在这种情况下,您会喜欢模拟输入对象的applytommodel方法。顾名思义,
此方法将配置您当前的MATLAB会话和模型,以便您可以像在worker上那样模拟它。

现在轮到你了

试一试新的parsimR2017a的功能,请在下面的评论中告诉我们你的想法。

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。