SIRS 模型不依赖于初始条件?

计算科学 数值分析 微分方程 计算生物学
2021-12-07 05:37:02

所以我一直在 SIRS 流行病模型中工作(作为一名本科生,工作我的意思是“重做我的教授所做的一些事情”)。SIRS 在这里代表:

易感 -> 感染 -> 恢复 -> 易感。

因此,支配该模型的一阶微分方程组是:

S(t)=βI(t)S(t)+μR(t)
I(t)=βI(t)S(t)γI(t)
R(t)=γI(t)μR(t)
在哪里: R(t)代表导数R关于时间t(同样适用于IS)。γ,βμ是常数,取决于疾病的特性(如果它非常具有传染性,如果它很有可能杀死你,等等)。

所以我打算在Python3中使用欧拉方法求解这些方程,这是我的代码:

while t<140:
  Sold = S
  Iold = I
  S = S + dt*(u*R - B*I*S)
  I = I + dt*(B*I*S - G*I)
  R = R + dt*(G*I - u*R)
  t = t + dt
  Arq.write("{} {} {} {} {} \n".format(t,S,I,R,R+I+S))

请注意,有一个变量的定义。在将函数用于另一个方程之前,我使用它们来保存函数的先前值。(我的意思是,而不是更新R使用新值I, 使用旧值I, 在上面的行中更新之前)。我停止使用旧变量,并且从图形上来说没有任何变化。如果您希望代码使用旧变量运行,这里是:

while t<140:
  Sold = S
  Iold = I
  S = S + dt*(u*R - B*I*S)
  I = I + dt*(B*I*Sold - G*I)
  R = R + dt*(G*Iold - u*R)
  t = t + dt
  Arq.write("{} {} {} {} {} \n".format(t,S,I,R,R+I+S))

好的。所以现在让我们谈谈正在发生的事情。我每次都使用“标准化”人口,即 S + I + R = 1。所以,我为常数选择了 0 到 1 之间的任意值μ,γβ,并设置以下初始值I,RSI(0)=0.1,R(0)=0.05S(0)=0.85. 我在图形人口中得到了以下结果×时间: 在此处输入图像描述

(对不起,我不知道如何在这里减小图像大小)。所以现在,我将初始值更改为非常不同的值:S(0)=0.20,R(0)=0.55, 和I(0)=0.25. 结果如下: 在此处输入图像描述 我们在这里可以看到,尽管初始值非常不同,但这两种情况似乎收敛到三个总体的相同值。我不会在这里放其他图片,否则这个问题会长达一公里,但我放的所有初始条件都没有改变结果。(或似乎没有)。

为什么是这样?我的模型是否正确?如果不是,它有什么问题?如果它是正确的,这可以用数学来解释吗?这是一个试图模拟疾病的模型。是否有任何具有(或具有)这种特性的非致命疾病的例子?

提前致谢。(我想补充一点,非常感谢为代码添加颜色并减小图像大小的编辑(特别是如果这样做的人解释了如何!:))

1个回答

您的模型似乎有一个吸引所有轨道的稳定临界点。你在密谋(S(t),I(t),R(t))作为特定初始条件的时间函数,但实际上更容易直接看到这一点的方法是绘制矢量场(S˙,I˙)在里面 S-I飞机像这样:

在此处输入图像描述

您可以立即看到,对于这个特定的参数选择(我不记得我使用了哪些值),ODE 的每个解都将收敛到相同的临界点。

要从数学上分析这种行为,首先通过求解来确定临界点的位置rhs(S0,I0,R0)=0(R=1SI),然后围绕该临界点线性化 ODE 并查看 rhs 的雅可比行列式的特征值这并不能完全表明所有轨道都收敛到临界点,只有那些开始足够接近临界点的轨道。为了证明所有轨道都收敛到同一个临界点,您可以为您的系统寻找Lyapunov 函数

这些都是任何 ODE 或动力系统教科书中讨论的非常标准的主题。我最近喜欢的一本书是 Trefethen、Birkisson、Driscoll 的Exploring ODEs(在线免费),请参阅第 15-16 章。

我停止使用旧变量,并且从图形上来说没有任何变化。

想象你正在解决y˙=f(y)你犯了一个小错误,你不小心最终解决了y˙=f(y)+δ(t). 如果是I˙,δ将是βI(S(tn+1)S(tn))δt,虽然这个表达式在数学上没有很好的定义。δ只是大小的扰动|S˙|δt2. 如果您使用了转发 Euler 的高阶方法,您将通过注意到您的方法没有以正确的顺序收敛来识别这一点。您(准确地)解决了一个稍微错误的 ODE,而不是准确地求解正确的 ODE,并且看不到模型的差异,因为它只是收敛到相同的临界点。其他具有高阶方法的 ODE 不会这么宽容。