sis传染病模型matlab代码
时间: 2023-11-26 22:03:25 浏览: 38
以下是基于SIS传染病模型的MATLAB代码,其中包括使用欧拉方法和Runge-Kutta方法求解微分方程的代码:
使用欧拉方法求解微分方程的代码:
```
% SIS传染病模型的欧拉方法代码
function [S, I] = SIS_Euler(beta, gamma, S0, I0, T, h)
% 初始化S和I
S = zeros(T/h+1, 1);
I = zeros(T/h+1, 1);
S(1) = S0;
I(1) = I0;
% 使用欧拉方法求解微分方程
for i = 1:T/h
S(i+1) = S(i) - h * beta * S(i) * I(i) + h * gamma * I(i);
I(i+1) = I(i) + h * beta * S(i) * I(i) - h * gamma * I(i);
end
end
```
使用Runge-Kutta方法求解微分方程的代码:
```
% SIS传染病模型的Runge-Kutta方法代码
function [S, I] = SIS_RK(beta, gamma, S0, I0, T, h)
% 初始化S和I
S = zeros(T/h+1, 1);
I = zeros(T/h+1, 1);
S(1) = S0;
I(1) = I0;
% 使用Runge-Kutta方法求解微分方程
for i = 1:T/h
k1 = -beta * S(i) * I(i) + gamma * I(i);
l1 = beta * S(i) * I(i) - gamma * I(i);
k2 = -beta * (S(i)+h/2*k1) * (I(i)+h/2*l1) + gamma * (I(i)+h/2*l1);
l2 = beta * (S(i)+h/2*k1) * (I(i)+h/2*l1) - gamma * (I(i)+h/2*l1);
k3 = -beta * (S(i)+h/2*k2) * (I(i)+h/2*l2) + gamma * (I(i)+h/2*l2);
l3 = beta * (S(i)+h/2*k2) * (I(i)+h/2*l2) - gamma * (I(i)+h/2*l2);
k4 = -beta * (S(i)+h*k3) * (I(i)+h*l3) + gamma * (I(i)+h*l3);
l4 = beta * (S(i)+h*k3) * (I(i)+h*l3) - gamma * (I(i)+h*l3);
S(i+1) = S(i) + h/6*(k1+2*k2+2*k3+k4);
I(i+1) = I(i) + h/6*(l1+2*l2+2*l3+l4);
end
end
```
其中,`beta`表示感染率,`gamma`表示恢复率,`S0`表示初始易感人群数,`I0`表示初始感染人群数,`T`表示模拟时间,`h`表示时间步长。函数的返回值为两个向量`S`和`I`,分别表示每个时间步长下易感人群数和感染人群数的数量。