图像缩略图

Simulitis(冠状病毒模拟)

1.1.2版(6.22 KB)通过 约书亚Gafford
复制华盛顿邮报冠状病毒模拟的MATLAB代码

76个下载

更新2020年4月11日

查看许可证

我敢肯定,现在你都看到了与COVID-19模拟华盛顿邮报的文章,讲在一种传染性很强的疾病,面对社会隔离的公共健康利益。如果你还没有,这里的文章:https://www.washingtonpost.com/graphics/2020/world/corona-simulator/

好吧,出于我的隔离无聊,我在MATLAB中重新创建了这个模拟,有更多的旋钮可以转动,参数可以使用。例如,如果一些携带者会死呢?如果疾病是埃博拉病毒(约50%的死亡率)?

这个函数模拟一组n个携带者之间的疾病传播,在一个有限的空间里,一定比例的携带者在社会上孤立自己。一个简单的多体物理模型(两个等质量粒子之间的弹性碰撞)决定了载体的运动轨迹。

但愿这给你一个有趣的(尽管是短暂的)喘息从社会孤立的低迷!

引用作为

约书亚Gafford(2020年)。Simulitis(冠状病毒模拟)(//www.tianjin-qmedu.com/matlabcentral/fileexchange/74610-simulitis-a-coronavirus-simulation),MATLAB中心文件交换。恢复

评论和评级(34

嗨,安吉洛,在“模型输入”标题下查找代码块。您可以更改任何这些参数。

感谢你创造了这个约书亚。我是一个高中生,我想用你的模拟在COVID-19上的一个项目来探索不同的场景。我下载了一个Matlab的试用版,运行了Simulitis代码,但似乎无法控制更改参数。我喜欢这个模拟,但是为了在我的项目中使用它,我需要能够使用参数来模拟不同的场景。我应该去哪里寻求帮助?你在这个网站上设置的代码是带有控件的代码吗?谢谢!

我没有得到任何错误和视频保存=真
我会再次检查
谢谢

嗨Mohand,

我不确定,我只是测试了一下,视频似乎保存得对。您确定要将video_save设置为true吗?你有什么错误吗?

乔舒亚,你好,
对于新版本无论什么原因,视频不会被保存。
检查过了,一切看起来都很好,但仍然没有保存视频。
任何线索?

约书亚,你的变化是非常赞赏。非常感谢

谢谢乔舒亚的修改。当然你是在模仿《华盛顿邮报》的文章,但是看到代码是如此的紧凑和漂亮,我可能会谦虚地建议两个简单的修改,使其更接近现实世界。

一。我们看到许多病人在康复后检测呈阳性,这是应对这一流行病的一个主要问题。所以一个修正,在意义上,很少恢复的携带者(蓝色的)变成感染的携带者(红色的)。我这样做是通过分配一个有限的再感染概率,然后与恢复的概率进行比较。

2.很多患者无症状携带者,即他们不表现出症状还可以传染给他人。我试图通过引入新的载体造型这一点。

虽然我可以做的第一个,第二个是躲避我。是否有可能与这些修改来修改。

不管怎么说,多谢拉。该代码是正如我所说的,结构紧凑,美观。

嗨,维拉,我增加了模拟水平墙的四象限隔离的能力。设置参数“w_loc_h”将确定此墙的位置(作为总空间限制的一部分)。

嗨Mohand,我更换了实时统计标题字符串作为你建议。我想不出一个伟大的方式来同时运行三个模拟,除了运行三个独立的模拟,他们在事后进行比较,或者使用外部脚本运行三个平行的。我会考虑这一点了。

乔舒亚,你好,
我试图做两件事情,但我不是在Matlabe comfortble足以做到这一点。
1) 有一个boz来显示这三条曲线中每一条曲线上显示的数字,基本上就像数字顶部的计数器,上面有未受影响的xx,受感染的xx,恢复的xx,死亡的xx
2) 假设有人构建了三个场景。有没有办法把它们同时放在同一页上
Thnaks的精心工作

妙典先生。我不知道这是否是一个正确的地方要问你,但我用你的代码,尝试一些不同的东西玩。我想添加一个水平壁与垂直一个沿,以系统为四个不同的隔离区模型,看到不同的社区进行检疫的效果。难道你可能会帮助如何实现的?还是会好起来问这个作为MathWorks的论坛的问题。

任何暗示都可以。谢谢您。

嗨Mohand,好建议,我刚刚加入到完全打开停止门的能力。设置“w_open”参数为0和1之间的值决定了最终的栅极开口宽度(为总宽度的一小部分)。

出色的应用
我能不能把大门保持在一定程度上开着,不要开得太大
谢谢

哈维尔

@詹姆斯-你说得对!我想refreshdata调用是将新数据推送到axes句柄所必需的,但我想drawnow会像您所说的那样处理这个问题。现在跑得快多了!

凉!

你需要这两个refreshdata电话?他们吃了很多的时间。我评论出来,它似乎运行得很好,整体快了很多......我认为“的DrawNow”需要更新数字的照顾。

@Joshua,谢谢。
我正在检查。

马吉亚

@乔舒亚:非常感谢你这么快的回复。注意:将一个方向轨迹转化为一个随机行走可能是个好主意,所以在每一步中,它都会选择一个新的方向向量cos(2*pi*rand)。

@迈克:看起来很棒,我跑得很好!

@ Tsotne:你是绝对正确的。修改了代码因此初始感染率仅适用于那些后面(左侧的)隔离壁。谢谢!

马吉亚

@Joshua:谢谢你的代码的响应和更新。但是,一旦我跑了他们,我注意到一些感染是在门的两侧。我认为,隔离门的整个想法就是要在门背后的隔离带分开保持被感染的。

@乔舒亚:这是python代码。https://github.com/mnfienen/pysimulitis网站热衷于任何反馈。

@迈克:真棒!希望能看到的代码,如果你碰巧有一个GitHub的库

@莫斯塔法:只是增加了隔离门功能,看看吧。可能不是最健壮/最有效的方法,因为我没有时间,但它工作。您可以通过wúloc设置隔离门的位置,并分别通过wúinit和wúspeed控制开启时间和开启速度。

太酷了!谢谢你的发帖。我冒昧地翻译成Python(带有属性)。非常及时的工作和良好的编码。谢谢你这么做!

谢谢你的工作。
如何在模拟过程中包含具有打开的门的模拟。
类似于《韦森顿邮报》的文章

你好,空间限制变量“lim”只是指二维竞技场的“大小”,单位是无量纲的。所以lim=200产生一个200 x 200的竞技场。carriers变量('n')是指粒子(人)的总数,您可以修改最初感染的部分,方法是使用'p_init'。

马吉亚

你好,非常感谢你的工作。
我感兴趣的是如何正确决定空间的限制数量。并通过运营商你的意思,是感染整个人口或仅几分之几?
谢谢你

谢谢你的报道。我想向量大小在元素操作中有问题,因为v是[n x 2]而isolate是[n x 1](我的MATLAB版本我猜如果列大小不同,会自动假设行元素相乘,但可能旧版本没有?)。不管怎样,它现在应该对你有用了。

龙口

抱歉,我在评论,不小心按了回车键。我有这个错误
使用时出错*
矩阵维数必须一致。
simulitis中的错误(第131行)
pos_new=pos+v.*(分离).*delT;

阿比盖尔嗨,你有什么问题?任何错误?

它有一些错误......我不能运行它。

写整洁代码,很好的帮助,使用方便......,最及时的:谢谢:)

更新

1.1.2

修复了具有初始条件和墙行为的问题

1.1.1

修复了隔离墙将停止打开的问题

1.1.0

增加了水平壁四象限隔离模拟

1.0.9

修正了打字错误

1.0.8

新增能力完全打开停止隔离门。

1.0.7

除去不需要refreshdata呼吁加快执行速度。

1.0.6

修改了模拟,因此只有隔离墙后面的携带者才能被最初感染。

1.0.5

更正了隔离门功能的输入解析

1.0.4

增加了隔离功能。

1.0.3

更新标签

1.0.2

修正了向量大小不一致的问题并改进了参数检查

1.0.1

已删除注释掉的代码

MATLAB版本兼容性
用R2018b创建
与R2018b兼容任何版本
平台兼容性
窗户 马科斯 Linux的