数模-微分方程(SIS模型)
作者:互联网
SIS模型
代码
fun1.m
function dx=fun1(t,x) % 大家可以修改里面的参数,来看结果的变化
global TOTAL_N % 定义总人数为全局变量
beta = 0.1; % 易感染者与已感染者接触且被传染的强度
alpha = 0.06; % 由感染状态I恢复为易感者状态S的恢复率
dx = zeros(2,1); % x(1)表示S x(2)表示I
dx(1) = alpha*x(2) - beta*x(1)*x(2)/TOTAL_N;
dx(2) = beta*x(1)*x(2)/TOTAL_N - alpha*x(2);
end
code.m
%% 最简单的SIS模型
clc;clear
global TOTAL_N % 定义总人数为全局变量(可以在子函数中使用)
TOTAL_N = 1000; % 总人数
i0 = 1; % 初始时刻患者(已感染者)的人数
[t,x]=ode45('fun1',[1:500],[TOTAL_N-i0 i0]);
x = round(x); % 对x进行四舍五入(人数为整数)
figure(1)
plot(t,x(:,1),'r-',t,x(:,2),'b-','Linewidth',1.5) % x的第一列是易感染者S的数量,x的第二列是患者I的数量
legend('易感染者S','患者I')
结果
SIS模型扩展
代码
fun2.m
function dx=fun2(t,x) % 大家可以修改里面的参数,来看结果的变化
global TOTAL_N % 定义总人数为全局变量
beta = 0.1; % 易感染者与已感染者接触且被传染的强度
alpha = 0.02; % 由感染状态I恢复为易感者状态S的恢复率
if t > 200
alpha = alpha * 10; % 第200期后引入了新的医疗装备,使得恢复率alpha增加为原来的10倍
end
dx = zeros(2,1); % x(1)表示S x(2)表示I
dx(1) = alpha*x(2) - beta*x(1)*x(2)/TOTAL_N;
dx(2) = beta*x(1)*x(2)/TOTAL_N - alpha*x(2);
end
code.m
%% 考虑某种使得恢复率alpha增加的因素(例如建立医院、升级医疗装备等)
% 第200期后引入了新的医疗装备,使得恢复率alpha增加为原来的10倍
clc;clear
global TOTAL_N % 定义总人数为全局变量(可以在子函数中使用)
TOTAL_N = 1000; % 总人数
i0 = 1; % 初始时刻患者(已感染者)的人数
[t,x]=ode45('fun2',[1:500],[TOTAL_N-i0 i0]);
x = round(x); % 对x进行四舍五入(人数为整数)
figure(2)
plot(t,x(:,1),'r-',t,x(:,2),'b-','Linewidth',1.5) % x的第一列是易感染者S的数量,x的第二列是患者I的数量
legend('易感染者S','患者I')
axis([0 500 0 1000]) % 设置坐标轴范围,x轴为0-500 y轴为0-1000
结果
标签:SIS,i0,感染者,beta,数模,dx,微分方程,alpha,TOTAL 来源: https://www.cnblogs.com/jgg54335/p/15185156.html