COVID-19:在Simulink中模拟指数传播金宝app
更新(10/14/2020):GitHub存储库现在包含一个MATLAB应用程序来模拟模型和可视化结果。我们将应用程序编译为MATLAB Web应用程序并将其托管在云上使用MATLAB Web应用服务器.点击这里在您的网络浏览器尝试它.
上周,我的同事Mariano Lizarraga Fernandez给我指出《华盛顿邮报》模拟COVID-19我们认为使用MathWorks产品实现类似的东西会很有趣。下载188bet金宝搏
现在,克里夫发表了一基于matlab的仿真器,是时候发布我们使用Simulink、statflow和SimEvents实现的模拟了。金宝app
以下是随机选取50种“药剂”的结果(绿色表示感染前,红色表示感染,蓝色表示康复):
看看我是怎么把它们组合起来的。
扩展冰壶模拟器
当我考虑我将如何实现这个模拟时,我想到的第一件事是,我可能可以重用一些我为冰壶运动模拟器我不久前发表了一篇文章。
在已经实现的石头相互碰撞的动态中,我添加了边界框上的碰撞和跟踪感染传播的逻辑。
首先,让我们看看顶层。
以下是状态流程图:
细节
以下是它的工作原理:
- 在statflow中,Simulink St金宝appate集成了代理的运动
- 在每一个时间步,我们调用一个MATLAB函数来检测一个代理是否击中边界墙。如果有一个代理这样做了,我们将其速度符号在wall方向上反转,并在Simulink状态中用更新后的速度重新初始化Integrator块。金宝app
- 在每一个时间步长,我们调用一个MATLAB函数来检测两个代理是否接触。如果有,我们使用Simulink函数计算新的速度,并在Simulink状态下重置积分器块。金宝app
- 当这种情况发生时,我们调用Stateflow graphic函数来确定感染是否传播。为了跟踪谁被感染,我们使用了一个全局数据存储
- 如果我们确定一个新的代理已被感染,状态流图将调用一个生成SimEvents实体的Simulink函数金宝app
- 将此实体发送到实体服务器,等待固定的时间恢复。
- 一旦恢复时间结束,实体服务器退出操作将调用相应更新全局数据存储的Simulink函数。金宝app
结果
这是一个不同的结果,我降低了代理的初始速度。有趣的是它对传播的影响:
现在轮到你了
评论
要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。