Simulin万博1manbetxk上的家伙

万博1manbetx基于Simulink和模型的设计

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

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

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

万博1manbetx仿真软件。SimulationInput

如果你要使用并行计算工具箱要多次模拟模型,显然有些东西要改变,以使每个运行不同。这是通过的万博1manbetx仿真软件。SimulationInput目的。

通过创建一个万博1manbetx仿真软件。SimulationInput每个模拟,您可以定义每个运行特定的属性,包括模型使用的初始状态,模型参数,块参数,输入信号和变量。

让我们用这个简单的弹跳球模型,试着对不同的恢复系数进行并行模拟。

弹跳球

在这种情况下,我们将模拟10个不同值的模型,从0.2到0.9。为此,我创建了一个10个Simulink.simulationIng万博1manbetxuppt对象的数组,并使用setBlockParameter.指定每个模拟的恢复系数的方法。然后,我可以简单地传递这个Simulink数组。万博1manbetxSimulationInput来parsim,我将接收作为输出的数组万博1manbetx仿真软件。SimulationOutput对象。

Parsim简单的例子

一个更现实的例子

让我们通过添加以下内容使这个弹跳的球示例更加现实:

工作区变量:parsim,在并行模拟模型时的挑战之一是管理模型所需的变量。我试图提供提示和技巧来帮助这篇之前的帖子.对于我们的弹跳球示例,而不是硬编码块对话框中的重力和恢复系数的参数值,让我们在Matlab基础工作空间中的变量是由Matlab脚本创建的。

与工作区变量的弹跳球模型

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

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

后仿真功能

使用该设置,我们可以创建我们的simulink.simulationInput对象数组,万博1manbetx并使用setVariable方法为工作区变量指定不同的值Cr.对于后处理函数,我们将句柄指定给模拟输入对象的PostSimfcn属性。

它看起来是这样的:

Parsim示例

注意我是如何使用UseFastRestart选项通过在每个工作者上只编译模型一次来加速事情。

处理错误

我喜欢的一个parsim它是如何在模拟错误的情况下行事。

在本例中,是Simulink。万博1manbetxSimulationOutputobject contains all the logged data until the error happened, and a错误信息描述错误原因的字段。

Parsim错误输出

这对于理解发生了什么错误而不需要重新模拟模型非常有用。

如果您不能根据记录的数据找出错误所在,那么您很可能需要向模型中添加更多的检测,并在主机上重新模拟它。在这种情况下,您会喜欢模拟输入对象的applytommodel方法。顾名思义,
这个方法将配置您当前的MATLAB会话和模型,以便您可以模拟它,就像它在工人上做的那样。

现在轮到你了

尝试新的parsim在R2017A中的功能,让我们知道您在下面的评论中的思考。

|

注释

请点击留下评论这里登录到你的MathWorks帐户或创建一个新的。