图片缩略图

Simulitis(冠状病毒模拟)

版本1.1.2(6.22 KB)由 约书亚·加福德
MATLAB代码复制华盛顿邮报的冠状病毒模拟
5.0条
8评级

80下载

更新2020年4月11日

查看许可证

我敢肯定,到现在你们都已经看过《华盛顿邮报》的文章,里面有COVID-19的模拟,在面对一种高传染性疾病时,向公众讲述了社会隔离对公共健康的好处。如果你没有,这是一篇文章:https://www.washingtonpost.com/graphics/2020/world/corona-simulator网站/

出于无聊,我在MATLAB中重新创建了这个模拟,用了更多的旋钮和参数。例如,如果一些携带者死亡怎么办?如果疾病是埃博拉病毒(大约50%的死亡率)呢?

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

希望这能让你从社会孤立的低潮中得到一个有趣的(尽管短暂的)喘息!

引用为

约书亚·加福德(2020)。Simulitis(冠状病毒模拟)(//www.tianjin-qmedu.com/matlabcentral/fileexchange/74610-simulitisa-coronavirs-simulation), MATLAB中央文件交换。检索.

评论和评级(34个)

嗨,安吉洛,在“模型输入”标题下寻找代码块。你可以改变这些参数中的任何一个。

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

Mohand Oukaci

我没有得到任何错误和视频保存=真
我再查一遍
谢谢

嗨,莫汉,

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

Mohand Oukaci

嗨,约书亚,
不管是什么原因,新版本的视频都不会被保存。
检查过了,一切看起来都很好,但仍然没有保存视频。
有线索吗?

Mohand Oukaci

乔舒亚,非常感谢你的改变。谢谢

Vira罗伊

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

1.我们看到许多患者在康复后检测呈阳性,这是应对这一流行病的一个主要问题。因此,从某种意义上说,这是一种修正,即很少有康复的携带者(蓝色的)转变为感染的携带者(红色的)。我通过指定一个有限的再次感染的概率,然后与恢复的进行比较来做到这一点。

2。许多病人是无症状携带者,也就是说,他们没有表现出症状,但可以感染其他人。我试着通过引入一种新的载体来模拟这个过程。

虽然我可以做第一个,第二个是逃避我。是否可以通过这些修改进行修改。

无论如何谢谢。代码如我所说,简洁美观。

你好,Vira,我增加了模拟四象限隔离水平墙的能力。设置参数'w_loc_h'确定此墙的位置(作为总空间限制的一部分)。

嗨,莫汉,我已经用你建议的实时数据替换了标题字符串。除了运行三个独立的仿真并在事后进行比较,或者使用外部脚本并行运行三个仿真之外,我想不出一个同时运行三个仿真的好方法。我再考虑一下。

Mohand Oukaci

嗨,约书亚,
我试着做两件事,但在马特拉布我做不到这一点。
1)有一个boz来显示三条曲线中每条所显示的数字,基本上就像一个计数器在图的顶部,未受影响的xx,感染的xx,恢复的xx,已故的xx
2)假设有人构建了三个场景。有一种方法可以在同一时间在同一页上显示它们——Video1, Video2, Video3
为你非凡的工作干杯

Vira罗伊

太好了,长官。我不知道这是不是一个正确的地方问你,但我正在玩你的代码,尝试一些不同的东西。我想在垂直墙的基础上增加一个水平墙,以便将系统建模为四个不同的隔离区,并观察隔离区内不同社区的效果。你能帮个忙吗?或者可以在mathworks论坛上作为问题提问。

任何暗示都可以。谢谢你!

嗨,莫汉德,好建议,我只是增加了阻止大门完全打开的能力。将“w_open”参数设置为介于0和1之间的值将确定最终的浇口宽度(作为总宽度的一部分)。

Mohand Oukaci

精彩的应用程序
我能不能保持大门在一定程度上打开而不是完全打开
谢谢

哈维尔

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

太酷了!

你需要那两个刷新数据的电话吗?他们吃了很多时间。我评论了他们,似乎运行得很好,速度更快。。。我认为“drawnow”负责更新这个数字。

Mostafa Essuri

@乔舒亚,谢谢。
我正在检查。

Tsotne Marghia

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

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

@佐特:你绝对是对的。修改了代码,因此初始感染率仅适用于隔离墙后面(左边)的人。谢谢!

索菲·卡戈

Tsotne Marghia

@约书亚:谢谢你的回复和代码的更新。然而,当我运行它们时,我注意到一些感染者在大门的两边。我以为隔离门的整个想法是把感染者隔离在门后的隔离区。

迈克fienen

这是python代码。https://github.com/mnfienen/pysimulitis热衷于任何反馈。

@迈克:太棒了!如果您碰巧有一个github存储库,希望看到代码

@ Mostafa:只是增加了隔离门的功能,看看吧。这可能不是最健壮/最有效的方法,因为我的时间有限,但它是有效的。您可以通过w_loc设置隔离门的位置,通过w_init和w_speed分别控制打开时间和打开速度。

迈克fienen

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

Mostafa Essuri

谢谢你的工作。
如何在仿真过程中包含带有打开门的仿真。
类似于weshenton post的文章

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

Tsotne Marghia

你好,非常感谢你的工作。
我对如何正确地确定空间极限的个数感兴趣。你所说的携带者是指整个人群还是只指被感染的那一部分?
谢谢你!

感谢您的报道。我认为在元素操作中存在一个关于向量大小的问题,因为v是[n x 2],并且隔离是[n x 1](我的MATLAB版本中,如果列大小不同,我猜会自动假设行元素乘法,但可能旧版本没有?)不管怎样,现在应该对你有用了。

longonauta

对不起,我正在评论,不小心按了回车键。我有这个错误
错误使用。*
矩阵尺寸必须一致。
simulitis中的错误(第131行)
pos_new = pos + v *(~隔离)。*解决;

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

它有一些虫子。。。我办不到。

整洁的代码,良好的帮助,易于使用。。。最及时的:谢谢:)

更新

1.1.2条

修正了初始条件和墙行为的问题

1.1.1条

修正了隔离墙不能打开的问题

1.1.0条

为四象限隔离模拟添加水平墙

1.0.9条

修正了打字错误

1.0.8条

增加了阻止隔离门完全打开的功能。

1.0.7条

删除了不必要的刷新数据调用以加快执行速度。

1.0.6条

改进后的模拟,只有隔离墙后的携带者才能被初始感染。

1.0.5条

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

1.0.4条

添加隔离功能。

1.0.3条

更新的标记

1.0.2条

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

1.0.1条

已删除注释掉的代码

MATLAB版本兼容性
用R2018b创建
与任何版本的R2018b兼容
平台兼容性
窗户 macOS Linux系统