对带时滞的SIR模型的hopf分岔的仿真
时间: 2023-10-31 11:07:07 浏览: 107
SIR模型描述了人口在传染病流行中的变化。考虑到许多传染病具有潜伏期,我们可以对SIR模型进行改进,加入潜伏期的概念,并且考虑到治疗和免疫力的效应,建立带时滞的SIR模型:
$$
\begin{aligned}
\frac{dS}{dt} &= \Lambda - \beta S(t) I(t-\tau) - \mu S(t) \\
\frac{dE}{dt} &= \beta S(t) I(t-\tau) - (a+\mu)E(t)\\
\frac{dI}{dt} &= a E(t) - (\gamma+\mu)I(t)\\
\frac{dR}{dt} &= \gamma I(t) - \mu R(t)
\end{aligned}
$$
其中,$S$表示易感人群的比例,$E$表示潜伏人群的比例,$I$表示感染人群的比例,$R$表示康复人群的比例。$\Lambda$是出生率,$\mu$是死亡率,$\beta$是感染率,$\gamma$是康复率,$a$是潜伏期的发病率,$\tau$是潜伏期。我们将使用MATLAB对该模型进行Hopf分岔的仿真。
首先,我们将模型改写为向量形式:
$$
\frac{d\mathbf{x}}{dt} = \mathbf{f}(\mathbf{x}(t)) = \begin{bmatrix}
\Lambda - \beta S(t) I(t-\tau) - \mu S(t) \\
\beta S(t) I(t-\tau) - (a+\mu)E(t) \\
a E(t) - (\gamma+\mu)I(t) \\
\gamma I(t) - \mu R(t)
\end{bmatrix}
$$
然后,我们需要定义时滞函数,用于计算$I(t-\tau)$:
```matlab
function x = delay(t, x, tau)
x = [x(2);x(3);x(4);0];
end
```
接下来,我们定义相关参数:
```matlab
Lambda = 0.1;
mu = 0.01;
beta = 0.25;
a = 0.1;
gamma = 0.05;
tau = 5;
```
然后,我们定义初始条件和时间范围:
```matlab
x0 = [0.9;0.05;0.05;0.0];
tspan = [0 100];
```
接着,我们使用ode15s求解微分方程组:
```matlab
sol = dde23(@delay, tau, @SIR, tspan, x0);
```
最后,我们绘制Hopf分岔图:
```matlab
N = length(sol.x);
idx = find(diff(sign(sol.y(3,2:N)-sol.y(3,1:N-1))) ~= 0);
figure;
plot(sol.y(3,:), 'b');
hold on;
plot(idx, sol.y(3,idx), 'ro');
xlabel('Time');
ylabel('Infective');
title('Hopf Bifurcation Diagram');
```
完整代码如下:
阅读全文