欧拉数值法求解SEIR传染病动力学模型(MATLAB)

 

 

clc %%具体的MATLAB程序
clear
close all
%% 参数
Q=1;    % 潜伏者相对于感染者传播能力的比值
A=1/14;  %隔离时间14天
G=1/7 ; % 潜伏期向感染者的转化速率潜伏期为7d
c=2;  %接触率
p=1;   %有效接触系数
Si=0.13;  %感染者隔离速率
Sq=0.13;  % 隔离
YI=0.007;
YH=0.014; 
B=2.05*10^(-9);
q=10^(-6);
a=2.7*10^(-4);
h=0.01;  %求解的步长
T=50 ;  %预测50天的
t=0:h:T;
S=59170000;% 当地总人口数1
E=4007;
I=524*1.5;
SQ=2776;
EQ=400;
H=1+EQ;
R=31;

DS=zeros(1,length(t));     DS1=zeros(1,length(t));     % 参数保存地方
DE=zeros(1,length(t));   DE1=zeros(1,length(t));
DI=zeros(1,length(t));   DI1=zeros(1,length(t));
DSQ=zeros(1,length(t));  DSQ1=zeros(1,length(t));
DEQ=zeros(1,length(t));   DEQ1=zeros(1,length(t));
DH=zeros(1,length(t));   DH1=zeros(1,length(t));
DR=zeros(1,length(t));   DR1=zeros(1,length(t));

DS(1)=S;%参数初始化
DE(1)=E;
DI(1)=I;
DSQ(1)=SQ;
DEQ(1)=EQ;
DH(1)=H;
DR(1)=R;
for i=2:length(t)
    DS1(i-1)=-(p*c*B+p*c*q*(1-B))*( DS(i-1) )*( DI(i-1)+1*DE(i-1)  )+A*DSQ(i-1);
    DS(i)=DS(i-1)+DS1(i-1)*h;
    
    DE1(i-1)=p*c*B*(1-q)*DS(i-1)*( DI(i-1)+1*DE(i-1) )-G*DE(i-1);
    DE(i)=DE(i-1)+DE1(i-1)*h;
    
    DI1(i-1)=G*DE(i-1)-(Si+a+YI)*DI(i-1);
    DI(i)=DI(i-1)+DI1(i-1)*h;
    
    DSQ1(i-1)=p*c*q*(1-B)*DS(i-1)*( DI(i-1)+1*DE(i-1) )-A*DSQ(i-1);
    DSQ(i)=DSQ(i-1)+DSQ1(i-1)*h;
    
    DEQ1(i-1)=p*c*B*q*DS(i-1)*( DI(i-1)+1*DE(i-1) )-G*DE(i-1);
    DEQ(i)= DEQ(i-1)+ DEQ1(i-1)*h;
    
    DH1(i-1)=Si*DI(i-1)+Sq*DEQ(i-1)-(a+YH)*DH(i-1);
    DH(i)=DH(i-1)+DH1(i-1)*h;
    
    DR1(i-1)=(YI)*DI(i-1)+YH*DH(i-1);
    DR(i)=DR(i-1)+DR1(i-1)*h;
    
    
end
subplot(3,3,1);
plot(t,DS); hold on;title('易感染总人数');
subplot(3,3,2);
plot(t,DE); hold on;title('潜伏者');
subplot(3,3,3);
plot(t,DI); hold on; title('感染人数');
subplot(3,3,4);
plot(t,DSQ); hold on; title('隔离易感者');
subplot(3,3,5);
plot(t,DEQ); hold on ; title('隔离潜伏者');
subplot(3,3,6);
plot(t,DH); hold on; title('住院患者');
subplot(3,3,7);
plot(t,DR); hold on ; title('康复人群');

以下是具有白噪声的SEIR传染病模型MATLAB代码: ```matlab % 参数设置 beta = 0.5; % 接触率 sigma = 0.1; % 潜伏期转化为感染期的概率 gamma = 0.05; % 康复率 mu = 0.01; % 自然死亡率 nu = 0.005; % 病死率 % 初始值 S0 = 0.9; % 初始易感人群比例 E0 = 0.05; % 初始潜伏期人群比例 I0 = 0.04; % 初始感染人群比例 R0 = 0.01; % 初始康复人群比例 D0 = 0; % 初始死亡人群比例 % 模拟时间和步长 t_end = 100; % 模拟结束时间 dt = 0.01; % 步长 % 初始化 t = 0:dt:t_end; % 时间向量 N = length(t); % 时间步数 S = zeros(N, 1); % 易感人群比例 E = zeros(N, 1); % 潜伏期人群比例 I = zeros(N, 1); % 感染人群比例 R = zeros(N, 1); % 康复人群比例 D = zeros(N, 1); % 死亡人群比例 S(1) = S0; E(1) = E0; I(1) = I0; R(1) = R0; D(1) = D0; % 设置初始状态 % 循环计算 for i = 2:N dS = -beta*S(i-1)*I(i-1) + mu - nu*S(i-1); % 易感人群变化量 dE = beta*S(i-1)*I(i-1) - sigma*E(i-1) - nu*E(i-1); % 潜伏期人群变化量 dI = sigma*E(i-1) - gamma*I(i-1) - nu*I(i-1); % 感染人群变化量 dR = gamma*I(i-1) - nu*R(i-1); % 康复人群变化量 dD = nu*(S(i-1)+E(i-1)+I(i-1)+R(i-1)); % 死亡人群变化量 S(i) = S(i-1) + dS*dt + sqrt(dt)*randn; % 更新易感人群比例 E(i) = E(i-1) + dE*dt + sqrt(dt)*randn; % 更新潜伏期人群比例 I(i) = I(i-1) + dI*dt + sqrt(dt)*randn; % 更新感染人群比例 R(i) = R(i-1) + dR*dt + sqrt(dt)*randn; % 更新康复人群比例 D(i) = D(i-1) + dD*dt + sqrt(dt)*randn; % 更新死亡人群比例 end % 绘图 plot(t, S, t, E, t, I, t, R, t, D); legend('易感人群比例', '潜伏期人群比例', '感染人群比例', '康复人群比例', '死亡人群比例'); xlabel('时间'); ylabel('人群比例'); ``` 这段代码基于SEIR模型,使用欧拉数值求解微分方程,并添加了白噪声。其中,`sqrt(dt)*randn`表示标准正态分布随机数,用于模拟白噪声。注意,这里的白噪声是一种简化假设,实际应用中可能需要更加精细的噪声模型
评论 60
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值