基于matlab分析的传染病模型,包括SI模型的5种不同模型,注释十分清楚,压缩包包括MATLAB代码文件和一个数模文件如图,直接运行可以出结果,一步一步带领大家理解传染病分析过程,
文章目录
以下是基于 MATLAB 的传染病模型代码示例,包括 SI、SIS、SIR、SEIR 和 SIRS 五种经典模型。每个模型都有详细的注释,方便理解传染病的分析过程。
1. SI 模型
SI 模型是最简单的传染病模型,假设个体只有两种状态:易感者(S)和感染者(I)。一旦感染,个体永远不会恢复。
MATLAB 实现
% SI 模型
clear; clc;
% 参数定义
N = 1000; % 总人口
I0 = 1; % 初始感染者数量
S0 = N - I0; % 初始易感者数量
beta = 0.3; % 感染率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % 易感者减少
dI = beta * S(i-1) * I(i-1) / N; % 感染者增加
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
end
% 绘图
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('SI 模型');
legend('易感者 (S)', '感染者 (I)');
grid on;
2. SIS 模型
SIS 模型允许感染者恢复后重新变为易感者。
MATLAB 实现
% SIS 模型
clear; clc;
% 参数定义
N = 1000; % 总人口
I0 = 1; % 初始感染者数量
S0 = N - I0; % 初始易感者数量
beta = 0.3; % 感染率
gamma = 0.1; % 恢复率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N + gamma * I(i-1); % 易感者变化
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % 感染者变化
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
end
% 绘图
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('SIS 模型');
legend('易感者 (S)', '感染者 (I)');
grid on;
3. SIR 模型
SIR 模型引入了恢复者(R),感染者恢复后不再具有传染性。
MATLAB 实现
% SIR 模型
clear; clc;
% 参数定义
N = 1000; % 总人口
I0 = 1; % 初始感染者数量
R0 = 0; % 初始恢复者数量
S0 = N - I0 - R0; % 初始易感者数量
beta = 0.3; % 感染率
gamma = 0.1; % 恢复率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
R(1) = R0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % 易感者减少
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % 感染者变化
dR = gamma * I(i-1); % 恢复者增加
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% 绘图
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('SIR 模型');
legend('易感者 (S)', '感染者 (I)', '恢复者 (R)');
grid on;
4. SEIR 模型
SEIR 模型增加了潜伏期(E),即感染者在潜伏期内不具有传染性。
MATLAB 实现
% SEIR 模型
clear; clc;
% 参数定义
N = 1000; % 总人口
E0 = 0; % 初始潜伏者数量
I0 = 1; % 初始感染者数量
R0 = 0; % 初始恢复者数量
S0 = N - E0 - I0 - R0; % 初始易感者数量
beta = 0.3; % 感染率
sigma = 0.2; % 潜伏期转为感染者的速率
gamma = 0.1; % 恢复率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
E = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
E(1) = E0;
I(1) = I0;
R(1) = R0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % 易感者减少
dE = beta * S(i-1) * I(i-1) / N - sigma * E(i-1); % 潜伏者变化
dI = sigma * E(i-1) - gamma * I(i-1); % 感染者变化
dR = gamma * I(i-1); % 恢复者增加
S(i) = S(i-1) + dS * dt;
E(i) = E(i-1) + dE * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% 绘图
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, E, 'm-', 'LineWidth', 1.5);
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('SEIR 模型');
legend('易感者 (S)', '潜伏者 (E)', '感染者 (I)', '恢复者 (R)');
grid on;
5. SIRS 模型
SIRS 模型允许恢复者失去免疫力并重新变为易感者。
MATLAB 实现
% SIRS 模型
clear; clc;
% 参数定义
N = 1000; % 总人口
I0 = 1; % 初始感染者数量
R0 = 0; % 初始恢复者数量
S0 = N - I0 - R0; % 初始易感者数量
beta = 0.3; % 感染率
gamma = 0.1; % 恢复率
delta = 0.05; % 失去免疫力的速率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
R(1) = R0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N + delta * R(i-1); % 易感者变化
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % 感染者变化
dR = gamma * I(i-1) - delta * R(i-1); % 恢复者变化
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% 绘图
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('SIRS 模型');
legend('易感者 (S)', '感染者 (I)', '恢复者 (R)');
grid on;
压缩包内容
- MATLAB 代码文件:
SI_model.m
,SIS_model.m
,SIR_model.m
,SEIR_model.m
,SIRS_model.m
。
- 数模文件:
- 包含模型的详细说明和参数调节建议。
这里提供一个基于MATLAB的传染病模型代码示例,包括SI、SIS、SIR、SEIR和SIRS五种不同模型。每个模型都有详细的注释,帮助理解传染病分析过程。
SI 模型
% SI Model
clear; clc;
% Parameters
N = 1000; % Total population
I0 = 1; % Initial infected individuals
S0 = N - I0; % Initial susceptible individuals
beta = 0.3; % Infection rate
T = 100; % Simulation time
dt = 1; % Time step
% Initialize
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
% Dynamics
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % Susceptible change
dI = beta * S(i-1) * I(i-1) / N; % Infected change
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
end
% Plot
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
xlabel('Time (days)');
ylabel('Number of individuals');
title('SI Model');
legend('Susceptible (S)', 'Infected (I)');
grid on;
SIS 模型
% SIS Model
clear; clc;
% Parameters
N = 1000; % Total population
I0 = 1; % Initial infected individuals
S0 = N - I0; % Initial susceptible individuals
beta = 0.3; % Infection rate
gamma = 0.1; % Recovery rate
T = 100; % Simulation time
dt = 1; % Time step
% Initialize
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
% Dynamics
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N + gamma * I(i-1); % Susceptible change
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % Infected change
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
end
% Plot
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
xlabel('Time (days)');
ylabel('Number of individuals');
title('SIS Model');
legend('Susceptible (S)', 'Infected (I)');
grid on;
SIR 模型
% SIR Model
clear; clc;
% Parameters
N = 1000; % Total population
I0 = 1; % Initial infected individuals
R0 = 0; % Initial recovered individuals
S0 = N - I0 - R0; % Initial susceptible individuals
beta = 0.3; % Infection rate
gamma = 0.1; % Recovery rate
T = 100; % Simulation time
dt = 1; % Time step
% Initialize
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
R(1) = R0;
% Dynamics
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % Susceptible change
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % Infected change
dR = gamma * I(i-1); % Recovered change
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% Plot
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('Time (days)');
ylabel('Number of individuals');
title('SIR Model');
legend('Susceptible (S)', 'Infected (I)', 'Recovered (R)');
grid on;
SEIR 模型
% SEIR Model
clear; clc;
% Parameters
N = 1000; % Total population
E0 = 0; % Initial exposed individuals
I0 = 1; % Initial infected individuals
R0 = 0; % Initial recovered individuals
S0 = N - E0 - I0 - R0; % Initial susceptible individuals
beta = 0.3; % Infection rate
sigma = 0.2; % Rate at which exposed become infectious
gamma = 0.1; % Recovery rate
T = 100; % Simulation time
dt = 1; % Time step
% Initialize
t = 0:dt:T;
S = zeros(length(t), 1);
E = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
E(1) = E0;
I(1) = I0;
R(1) = R0;
% Dynamics
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N; % Susceptible change
dE = beta * S(i-1) * I(i-1) / N - sigma * E(i-1); % Exposed change
dI = sigma * E(i-1) - gamma * I(i-1); % Infected change
dR = gamma * I(i-1); % Recovered change
S(i) = S(i-1) + dS * dt;
E(i) = E(i-1) + dE * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% Plot
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, E, 'm-', 'LineWidth', 1.5);
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('Time (days)');
ylabel('Number of individuals');
title('SEIR Model');
legend('Susceptible (S)', 'Exposed (E)', 'Infected (I)', 'Recovered (R)');
grid on;
SIRS 模型
% SIRS Model
clear; clc;
% Parameters
N = 1000; % Total population
I0 = 1; % Initial infected individuals
R0 = 0; % Initial recovered individuals
S0 = N - I0 - R0; % Initial susceptible individuals
beta = 0.3; % Infection rate
gamma = 0.1; % Recovery rate
delta = 0.05; % Rate at which recovered lose immunity
T = 100; % Simulation time
dt = 1; % Time step
% Initialize
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
R = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
R(1) = R0;
% Dynamics
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N + delta * R(i-1); % Susceptible change
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1); % Infected change
dR = gamma * I(i-1) - delta * R(i-1); % Recovered change
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
R(i) = R(i-1) + dR * dt;
end
% Plot
figure;
plot(t, S, 'b-', 'LineWidth', 1.5); hold on;
plot(t, I, 'r-', 'LineWidth', 1.5);
plot(t, R, 'g-', 'LineWidth', 1.5);
xlabel('Time (days)');
ylabel('Number of individuals');
title('SIRS Model');
legend

根据提供的图片,这是一个基于MATLAB的传染病模型的模拟结果图。图中显示了易感染者(S)、患者(I)、患病死亡人数(ID)和自然死亡人数(ND)随时间的变化情况。下面是一个可能的MATLAB代码示例,用于生成类似的图表。
### MATLAB 代码示例
```matlab
% 参数定义
N = 1000; % 总人口
I0 = 1; % 初始感染者数量
S0 = N - I0; % 初始易感者数量
beta = 0.3; % 感染率
gamma = 0.1; % 恢复率
mu = 0.001; % 自然死亡率
delta = 0.05; % 病死率
T = 100; % 模拟时间
dt = 1; % 时间步长
% 初始化
t = 0:dt:T;
S = zeros(length(t), 1);
I = zeros(length(t), 1);
ID = zeros(length(t), 1);
ND = zeros(length(t), 1);
S(1) = S0;
I(1) = I0;
% 动力学方程
for i = 2:length(t)
dS = -beta * S(i-1) * I(i-1) / N + mu * (N - S(i-1)); % 易感者变化
dI = beta * S(i-1) * I(i-1) / N - gamma * I(i-1) - delta * I(i-1); % 患者变化
dID = delta * I(i-1); % 患病死亡人数变化
dND = mu * (N - S(i-1) - I(i-1)); % 自然死亡人数变化
S(i) = S(i-1) + dS * dt;
I(i) = I(i-1) + dI * dt;
ID(i) = ID(i-1) + dID * dt;
ND(i) = ND(i-1) + dND * dt;
end
% 绘图
figure;
plot(t, S, 'r-', 'LineWidth', 1.5); hold on;
plot(t, I, 'b-', 'LineWidth', 1.5);
plot(t, ID, 'k-', 'LineWidth', 1.5);
plot(t, ND, 'g-', 'LineWidth', 1.5);
xlabel('时间 (天)');
ylabel('人数');
title('传染病模型');
legend('易感染者 S', '患者 I', '患病死亡人数 ID', '自然死亡人数 ND');
grid on;
代码说明
-
参数定义:
N
: 总人口。I0
: 初始感染者数量。S0
: 初始易感者数量。beta
: 感染率。gamma
: 恢复率。mu
: 自然死亡率。delta
: 病死率。T
: 模拟时间。dt
: 时间步长。
-
初始化:
t
: 时间向量。S
,I
,ID
,ND
: 分别表示易感者、患者、患病死亡人数和自然死亡人数的时间序列。
-
动力学方程:
dS
: 易感者的变化率。dI
: 患者的变化率。dID
: 患病死亡人数的变化率。dND
: 自然死亡人数的变化率。
-
绘图:
- 使用
plot
函数绘制每个状态变量随时间的变化曲线,并添加图例和网格线。
- 使用
这个代码可以运行并生成一个类似于你提供的图片中的图表。你可以根据需要调整参数和时间范围来观察不同的模拟结果。