代码传染病指数模型 si模型 sis模型 sir模型 sirp模型拟合Matlab
时间: 2023-11-16 19:43:55 浏览: 172
以下是 MATLAB 中实现 SI、SIS、SIR 和 SIRP 模型的代码示例:
SI 模型:
```matlab
function [t, y] = SI_Model(beta, gamma, I0, N, t_end)
% 变量说明:
% beta:传染率
% gamma:恢复率
% I0:初始感染人数
% N:总人口数
% t_end:模拟时间
% 设置初始状态
S0 = N - I0;
y0 = [S0; I0];
% 定义ODE函数
f = @(t, y) [-beta * y(1) * y(2)/N;
beta * y(1) * y(2)/N - gamma * y(2)];
% 模拟ODE
[t, y] = ode45(f, [0, t_end], y0);
% 绘制结果
plot(t, y(:,1), 'b-', t, y(:,2), 'r-');
xlabel('时间');
ylabel('人数');
legend('易感者', '感染者');
title(['SI模型(beta=', num2str(beta), ', gamma=', num2str(gamma), ', I0=', num2str(I0), ')']);
```
SIS 模型:
```matlab
function [t, y] = SIS_Model(beta, gamma, I0, N, t_end)
% 变量说明:
% beta:传染率
% gamma:恢复率
% I0:初始感染人数
% N:总人口数
% t_end:模拟时间
% 设置初始状态
S0 = N - I0;
y0 = [S0; I0];
% 定义ODE函数
f = @(t, y) [-beta * y(1) * y(2)/N + gamma * y(2);
beta * y(1) * y(2)/N - gamma * y(2)];
% 模拟ODE
[t, y] = ode45(f, [0, t_end], y0);
% 绘制结果
plot(t, y(:,1), 'b-', t, y(:,2), 'r-');
xlabel('时间');
ylabel('人数');
legend('易感者', '感染者');
title(['SIS模型(beta=', num2str(beta), ', gamma=', num2str(gamma), ', I0=', num2str(I0), ')']);
```
SIR 模型:
```matlab
function [t, y] = SIR_Model(beta, gamma, I0, N, t_end)
% 变量说明:
% beta:传染率
% gamma:恢复率
% I0:初始感染人数
% N:总人口数
% t_end:模拟时间
% 设置初始状态
S0 = N - I0;
R0 = 0;
y0 = [S0; I0; R0];
% 定义ODE函数
f = @(t, y) [-beta * y(1) * y(2)/N;
beta * y(1) * y(2)/N - gamma * y(2);
gamma * y(2)];
% 模拟ODE
[t, y] = ode45(f, [0, t_end], y0);
% 绘制结果
plot(t, y(:,1), 'b-', t, y(:,2), 'r-', t, y(:,3), 'g-');
xlabel('时间');
ylabel('人数');
legend('易感者', '感染者', '康复者');
title(['SIR模型(beta=', num2str(beta), ', gamma=', num2str(gamma), ', I0=', num2str(I0), ')']);
```
SIRP 模型:
```matlab
function [t, y] = SIRP_Model(beta, gamma, mu, I0, N, t_end)
% 变量说明:
% beta:传染率
% gamma:恢复率
% mu:病死率
% I0:初始感染人数
% N:总人口数
% t_end:模拟时间
% 设置初始状态
S0 = N - I0;
R0 = 0;
P0 = 0;
y0 = [S0; I0; R0; P0];
% 定义ODE函数
f = @(t, y) [-beta * y(1) * y(2)/N;
beta * y(1) * y(2)/N - (gamma + mu) * y(2);
gamma * y(2);
mu * y(2)];
% 模拟ODE
[t, y] = ode45(f, [0, t_end], y0);
% 绘制结果
plot(t, y(:,1), 'b-', t, y(:,2), 'r-', t, y(:,3), 'g-', t, y(:,4), 'k-');
xlabel('时间');
ylabel('人数');
legend('易感者', '感染者', '康复者', '死亡者');
title(['SIRP模型(beta=', num2str(beta), ', gamma=', num2str(gamma), ', mu=', num2str(mu), ', I0=', num2str(I0), ')']);
```
以上是实现 SI、SIS、SIR 和 SIRP 模型的 MATLAB 代码示例,您可以根据需要进行修改和调整。
阅读全文