Mortalität und Reinfektion in der Klasse cl_SIRbetaInput, die im vorherigen Artikel "Implementierung eines mathematischen Modells" SIR-Modell "für Infektionskrankheiten in OpenModelica" erstellt wurde. Lassen Sie uns eine Vollversion mit der hinzugefügten Rate erstellen.
Voraussetzungen für dieses Modell ――Ein bestimmter Prozentsatz der Menschen stirbt an einer Infektion, um sich zu erholen ――Selbst diejenigen, die einmal Immunität erworben haben, verlieren im Laufe der Zeit mit einer bestimmten Rate die Immunität und kehren zu infektiösen Personen zurück
** Bitte beachten Sie, dass alle folgenden Simulationen nur eine Überprüfung des Modells mit temporären Parametern darstellen und die tatsächlichen Werte nicht widerspiegeln oder vorwegnehmen. ** **.
Als Parameter kann "Sterberate = Sterblichkeitsrate" eingestellt werden. Der Standardwert ist 0,01 (1%).
parameter Real dying_rate = 0.01 "Dying rate";
Der zusätzliche Gleichungsteil ist wie folgt Beim Übergang von I (infizierte Person) zu R (Geneser) wird die Anzahl der Geneser im Verhältnis zur Sterblichkeitsrate zum Tod, und der Rest wird zu "Überlebenden der Genesung".
equation
der(Rdead) = Iy * gamma_const * dying_rate;
// der(Rdead) = der(Ry) * dying_rate;
Rlive = Ry - Rdead;
Die Formel zur erneuten Infektion finden Sie unter "COVID-19-Studie (R and Pandemic Mathematical Model New Corona Virus) als Beispiel". Ich tat. Wenn ρ die Reinfektionsrate ist, wird die folgende Formel erhalten.
\begin{align}
\frac{dS}{dt} &= -\beta SI + ρ R\\
\frac{dI}{dt} &= \beta SI -\gamma I \\
\frac{dR}{dt} &= \gamma I - ρ R\\
\end{align}
Hier können Sie "reinfect_rate = reinfection rate" als Parameter festlegen. Der Standardwert ist 0,001 (0,1%).
parameter Real reinfect_rate = 0.001 "Reinfection rate";
Der zusätzliche Gleichungsteil ist wie folgt Beim Übergang von I (infizierte Person) zu R (Geneser) wird die Anzahl der Geneser im Verhältnis zur Sterblichkeitsrate zum Tod, und der Rest wird zu "Überlebenden der Genesung". Unter den "Survival Recoveryern" verschiebt sich S (potenziell infektiös) proportional zur Reinfektionsrate, und R (Recovery) nimmt um diesen Betrag ab.
equation
der(Sy) = (-contact_rate * Sy * Iy) + Rlive * reinfect_rate;
der(Iy) = contact_rate * Sy * Iy - Iy * gamma_const;
der(Ry) = Iy * gamma_const - Rlive * reinfect_rate;
Inew = contact_rate * Sy * Iy;
Der ganze Code sieht so aus.
class cl_SIRreinfect
extends Modelica.Blocks.Icons.Block;
parameter Real gamma_const = 0.2 "Recovery rate (1/day)";
parameter Real reinfect_rate = 0.001 "Reinfection rate";
parameter Real dying_rate = 0.01 "Dying rate";
Modelica.Blocks.Interfaces.RealInput Si "Connector of initial S(Susceptible)" annotation(
Placement(visible = true, transformation(origin = {-120, 60}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, 62}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealInput Ii "Connector of initial I (Infectious)" annotation(
Placement(visible = true, transformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, 0}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealInput Ri "Connector of initial R (Removed)" annotation(
Placement(visible = true, transformation(origin = {-120, -60}, extent = {{-20, -20}, {20, 20}}, rotation = 0), iconTransformation(origin = {-120, -62}, extent = {{-20, -20}, {20, 20}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealOutput Sy "Output connector of S(Susceptible)" annotation(
Placement(visible = true, transformation(origin = {110, 60}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 62}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealOutput Iy "Output connector of I (Infectious)" annotation(
Placement(visible = true, transformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealOutput Ry "Output connector of R (Removed)" annotation(
Placement(visible = true, transformation(origin = {110, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {110, -60}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Interfaces.RealInput contact_rate "Connector of infectious rate" annotation(
Placement(visible = true, transformation(origin = {0, 120}, extent = {{-20, -20}, {20, 20}}, rotation = -90), iconTransformation(origin = {0, 120}, extent = {{-20, -20}, {20, 20}}, rotation = -90)));
Modelica.Blocks.Interfaces.RealOutput Inew "Output connector of New I(Infectious)" annotation(
Placement(visible = true, transformation(origin = {-60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {-60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
Modelica.Blocks.Interfaces.RealOutput Rlive "Output connector of R (Live)" annotation(
Placement(visible = true, transformation(origin = {60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {60, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
Modelica.Blocks.Interfaces.RealOutput Rdead "Output connector of R (Dead)" annotation(
Placement(visible = true, transformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90), iconTransformation(origin = {0, -110}, extent = {{-10, -10}, {10, 10}}, rotation = -90)));
initial equation
Sy = Si;
Iy = Ii;
Ry = Ri;
Rdead = 0;
equation
der(Sy) = (-contact_rate * Sy * Iy) + Rlive * reinfect_rate;
der(Iy) = contact_rate * Sy * Iy - Iy * gamma_const;
der(Ry) = Iy * gamma_const - Rlive * reinfect_rate;
Inew = contact_rate * Sy * Iy;
der(Rdead) = Iy * gamma_const * dying_rate;
// der(Rdead) = der(Ry) * dying_rate;
Rlive = Ry - Rdead;
annotation(
Diagram,
Icon(coordinateSystem(initialScale = 0.1), graphics = {Text(origin = {-62, 53}, extent = {{-52, 29}, {174, -133}}, textString = "SIR\nReI")}));
end cl_SIRreinfect;
Erstellen Sie mit dem erstellten cl_SIRreinfect ein Modell mdl_SIRmodel_reinfect und simulieren Sie es. Hier wird kein Impfstoff verwendet.
Aus Gründen der Klarheit werden wir die Sterblichkeitsrate auf ziemlich hohe 20% einstellen und simulieren.
Infolgedessen ist die Zahl der Todesfälle auf etwa 18% der Gesamtzahl angewachsen.
Als nächstes simulieren wir mit einem Modell, in dem nur die Reinfektionsrate eingestellt ist. Versuchen Sie eine höhere Reinfektionsrate von 1%.
In der Simulation von bis zu 100 Tagen steigt die Anzahl infektiöser Personen weiter an und es ist nicht abzusehen, was in Zukunft passieren wird. Wenn Sie versuchen, bis zu 500 Tage zu simulieren, konvergieren alle S, I und R allmählich, während sie vibrieren. Wenn Sie sich I (Anzahl der infizierten Personen) ansehen, sehen Sie, dass es eine 2. und 3. Welle gibt.
Versuchen Sie, die beiden oben genannten Parameter gleichzeitig einzustellen.
Durch die Modellierung mit OpenModelica war es meiner Meinung nach einfach, Elemente nach und nach zum grundlegenden SIR-Modell hinzuzufügen und zu simulieren. Tatsächlich scheint es, dass sowohl die Sterblichkeitsrate als auch die Reinfektionsrate mehr als eine Größenordnung niedriger sind als diese Simulation, aber wenn genauere tatsächliche Daten erhalten werden können, ist es möglicherweise möglich, die Parameter zu identifizieren.
Implementierung des mathematischen Modells "SIR-Modell" von Infektionskrankheiten in Open Modelica Implementieren Sie ein mathematisches Modell "SIR-Modell" von Infektionskrankheiten in Open Modelica (siehe Wirkung des Impfstoffs) Einführung eines mathematischen Vorhersagemodells für Infektionskrankheiten (SIR-Modell)
Recommended Posts