传染病SIR传播模型(搬运,含带MATLAB代码)

学习笔记之SIR传染病模型@TOC

本文主要是对此篇文章代码部分的详解

function y=sir(~,x)
    a=0.8; %感染率0.8
    b=0.2; %治愈率0.2
    y=[-a*x(1)*x(2),a*x(1)*x(2)-b*x(2),b*x(2)]';
end
%t 为持续时间,%x为三维矩阵,其中x(1)为易感染者,x(2)为传染者,x(3)为移除者    

首先新建一个脚本,定义函数。。至于为什么这么定义这个函数(微分方程),需要了解你的数学模型要求解的是什么。
"~"处原为t,是有关t的函数,因为在定义此函数时并未用到t,故MATLAB自动修错功能提示改为这个了。
然后,再新建一个脚本,编程序,调用之前的那个编写好的函数。。上面那个文件名可能需要和函数名sir一致。

[t,x]=ode45('sir',[0,100],[0.97 0.02 0.01]); 
%ode45是用来求解常微分函数的方法,0100是天数,也可以写成[0:1:100]%[0.97  0.02  0.01]分别是易感者的比例,传染者的比例,移除者的比例
%引用提前编好的求解微分方程式的m文件,我取名为sir1
[t,x];%x 是的三列结果分别是s,i,r
plot(t,x(:,1),'-',t,x(:,2),'--',t,x(:,3),'-.k')
title('SIR模型');
xlabel('时间');
ylabel('比例');
legend('健康者','病人','移出者','3');%我猜,3应该是指3条线共同展示在同一张图中的意思

注意,这里的sir,,一定一定,,要和你定义好的函数名保持一致。

然后,你想要的图就出来啦,啦,啦。。
传染病SIR传播模型(搬运,含带MATLAB代码)_第1张图片
好啦,over!

下面对另一个有关SIR的文章,对他的代码进行解释以及标注出我所认为的错误。
添加链接描述

此处的[1 740000 0]分别为S(t),I(t),R(t)的初始值。

显然,S(t)代表的是易感者的初始时的数量,不可能为1,故正确的顺序应为[740000,1,0]。此文中设置了400天。

小生不才,对代码世界知之甚少。如有不正确之处,还望各位大神指出,如若言之有理,必做修正。
好啦,下次见~

你可能感兴趣的:(MATLAB)