学习笔记之SIR传染病模型@TOC
本文主要是对此篇文章代码部分的详解
function y=sir(~,x)a=0.8; %感染率0.8b=0.2; %治愈率0.2y=[-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是用来求解常微分函数的方法,0至100是天数,也可以写成[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,,一定一定,,要和你定义好的函数名保持一致。
然后,你想要的图就出来啦,啦,啦。。
好啦,over!
下面对另一个有关SIR的文章,对他的代码进行解释以及标注出我所认为的错误。
添加链接描述
此处的[1 740000 0]分别为S(t),I(t),R(t)的初始值。
显然,S(t)代表的是易感者的初始时的数量,不可能为1,故正确的顺序应为[740000,1,0]。此文中设置了400天。
小生不才,对代码世界知之甚少。如有不正确之处,还望各位大神指出,如若言之有理,必做修正。
好啦,下次见~