SIS传染病数学模型代码
时间: 2023-11-11 10:06:09 浏览: 43
SIS模型是一种经典的传染病数学模型,其代码实现如下(使用Python语言):
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义参数
beta = 0.2 # 传染率
gamma = 0.1 # 恢复率
N = 1000 # 总人口数
I0 = 1 # 初始感染人数
T = 200 # 模拟时间
# 初始化数组
S = np.zeros(T+1)
I = np.zeros(T+1)
# 初始值
S[0] = N - I0
I[0] = I0
# 模拟SIS模型
for t in range(T):
S[t+1] = S[t] - beta * S[t] * I[t] / N + gamma * I[t]
I[t+1] = I[t] + beta * S[t] * I[t] / N - gamma * I[t]
# 绘图
plt.plot(range(T+1), S, label='Susceptible')
plt.plot(range(T+1), I, label='Infected')
plt.xlabel('Time')
plt.ylabel('Population')
plt.title('SIS Model')
plt.legend()
plt.show()
```
运行以上代码,可以得到SIS模型的人口感染情况随时间的变化图。
相关问题
数学建模SIS传染病模型代码
以下是一个基于SIS传染病模型的数学建模代码示例,使用Python编写:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义模型参数
alpha = 0.3 # 感染率
beta = 0.1 # 恢复率
N = 1000 # 总人数
I0 = 10 # 初始感染人数
T = 100 # 模拟时长
# 初始化模型状态
S = N - I0
I = I0
# 模拟SIS模型
S_list = [S]
I_list = [I]
for t in range(T):
dS = beta * I - alpha * S * I / N
dI = alpha * S * I / N - beta * I
S += dS
I += dI
S_list.append(S)
I_list.append(I)
# 绘制感染人数变化曲线
t = np.arange(T+1)
plt.plot(t, I_list, label='Infected')
plt.plot(t, S_list, label='Susceptible')
plt.legend()
plt.xlabel('Time')
plt.ylabel('Number of people')
plt.show()
```
这个代码实现了一个简单的SIS传染病模型,使用欧拉法对连续时间模型进行离散化求解,并绘制了感染人数和易感人数随时间的变化曲线。可以根据需求修改模型参数和初始状态,进一步进行模拟和分析。
sis传染病模型matlab代码
以下是基于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`,分别表示每个时间步长下易感人群数和感染人群数的数量。