Моделирование на практике.
Проведём моделирование на практике, для этого напишем программный код на языке python (приложение) и посмотрим, как поведёт себя система с разными начальными условиями.
Для моделирования использовались следующие значения:
β=0.3: скорость передачи инфекции (интенсивность заражения). Это означает, что вероятность заражения одного восприимчивого человека увеличивается пропорционально числу зараженных.
γ=0.1: скорость выздоровления. Это означает, что в среднем человек выздоравливает через 1/γ=10 дней.
μ=0.02: скорость летального исхода. Это означает, что в среднем вероятность смерти для одного зараженного составляет μ/(γ+μ)=16,7%.
После исследования получаем следующий график:
Рис. 2. График моделирования расширенной SIR модели.
Попробуем задать такие условия, чтобы эпидемии не произошло: необходимо, чтобы число репродукции R0 было меньше или равно 1.
Для этого необходимо выполнить одно или несколько из следующих действий:
Уменьшить β (скорость передачи инфекции). Это можно интерпретировать как снижение контактов между людьми или введение профилактических мер (например, ношение масок, социальное дистанцирование).
Увеличить γ + μ (суммарную скорость выздоровления и летального исхода). Это означает ускорение выздоровления (эффективное лечение) или повышение смертности, хотя последний фактор не желателен.
Промоделируем систему со следующими параметрами:
β = 0.1 (уменьшение скорости заражения).
γ = 0.15 (ускорение выздоровления).
μ = 0.05 (летальность осталась на уровне 5%).
Рис. 3. Моделирование системы без эпидемии.
Вывод.
В ходе данной работы была рассчитана модель распространения вирусной инфекции, с учётом возможности выздоровления или смертельного исхода. Были рассмотрены различные существующие модели, описаны основные их параметры.
Для построенной математической модели был написан код на языке программирования python, который позволил промоделировать систему с разными начальными условиями и проверить теоретические положения моделирования.
Было доказано, что для появления эпидемии, необходимо, чтобы число репродукции было больше 1. В приведённых примерах, при числе репродукции 2,5 эпидемия происходила, а при числе репродукции 0,5 эпидемии не происходило.
Приложение 1. Код программы моделирования.
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
# Функция для системы уравнений SIRD
def sir_model(y, t, beta, gamma, mu):
S, I, R, D = y
dSdt = -beta * S * I
dIdt = beta * S * I - (gamma + mu) * I
dRdt = gamma * I
dDdt = mu * I
return [dSdt, dIdt, dRdt, dDdt]
# Основные параметры
N = 10**2 # Общее население
beta = 0.1 # Скорость передачи инфекции
gamma = 0.15 # Скорость выздоровления
mu = 0.05 # Скорость летального исхода
# Начальные условия
S0 = N - 1 # Восприимчивые
I0 = 1 # Зараженные
R0 = 0 # Выздоровевшие
D0 = 0 # Умершие
# Нормированные начальные условия
S0_norm = S0 / N
I0_norm = I0 / N
R0_norm = R0 / N
D0_norm = D0 / N
# Период моделирования (дни)
t = np.linspace(0, 160, 160)
# Решение системы уравнений
y0 = [S0_norm, I0_norm, R0_norm, D0_norm]
solution = odeint(sir_model, y0, t, args=(beta, gamma, mu))
S, I, R, D = solution.T
# Визуализация результатов
plt.figure(figsize=(10, 6))
plt.plot(t, S, label='Восприимчивые (S)', color='blue')
plt.plot(t, I, label='Зараженные (I)', color='red')
plt.plot(t, R, label='Выздоровевшие (R)', color='green')
plt.plot(t, D, label='Умершие (D)', color='black')
plt.title('Расширенная SIR-модель с летальным исходом')
plt.xlabel('Время (дни)')
plt.ylabel('Доля населения')
plt.legend()
plt.grid()
plt.show()
