Vai al contenuto

Calcoli scientifici con Julia/Modello SIR

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Il modello SIR è un modello compartimentale semplice per la dinamica di una malattia infettiva. La popolazione è divisa in tre classi:

  • : suscettibili
  • : infetti
  • : rimossi (guariti o immuni)

Le equazioni sono:

Dove è il tasso di trasmissione e il tasso di guarigione.

La curva dei suscettibili S(t) tende a a decrescere, mentre la curva degli infetti I(t) cresce in modo accelerato (fase esponenziale) raggiungendo un picco ben definito per poi decrescere perché il pool di suscettibili si è ridotto sufficientemente tendendo a 0, la curva dei rimossi (guariti o immuni) R(t) cresce raggiungendo il massimo.

Il tasso di trasmissione misura la velocità con cui un suscettibile entra in contatto con un infetto e contrae la malattia. Più grande è , più rapidamente si diffonde l’infezione.

Il tasso di guarigione misura la velocità con cui gli infetti guariscono (o vengono rimossi dall’epidemia perché immuni o deceduti).Più grande è , più rapidamente si estingue l’infezione.

Attraverso il parametro si stabilisce se l'epidemia tende a crescere o a estinguersi:

  • Se l’epidemia tende a crescere.
  • Se l’epidemia tende a spegnersi.

Esempio realistico:

  • Influenza stagionale: ,
  • COVID-19 (ceppo iniziale): ,

Esempio in Julia

[modifica | modifica sorgente]

Se l'epidemia dura 160 giorni, le condizioni iniziali del sistema di equazioni differenziali u0 danno il 99% di suscettibili, l'1% di infetti e 0% di guariti o immuni con tasso di trasmissione 0,5 e tasso di guarigione 0,1 allora R0=5 quindi l'epidemia cresce raggiungendo un picco come si vede dal seguente grafico tracciato da Julia, ottenuto risolvendo il sistema di equazioni differenziali:

using DifferentialEquations
using Plots

function SIR!(du, u, p, t)
S, I, R = u
β, γ = p
du\[1] = -β \* S \* I
du\[2] = β \* S \* I - γ \* I
du\[3] = γ \* I
end

β = 0.5
γ = 0.1
p = (β, γ)

u0 = \[0.99, 0.01, 0.0]
tspan = (0.0, 160.0)

prob = ODEProblem(SIR!, u0, tspan, p)
sol = solve(prob, Tsit5())

plot(sol, xlabel="Giorni", ylabel="Frazione della popolazione",
label=\["Sani" "Infetti" "Guariti"], lw=2)