Calcoli scientifici con Julia/Modello Preda-Predatore
Il modello preda–predatore, noto anche come equazioni di Lotka–Volterra, descrive l'interazione tra due specie:
- una preda (ad esempio conigli )
- un predatore (ad esempio volpi )
Le equazioni differenziali ordinarie sono:
Dove:
- = popolazione della preda
- = popolazione del predatore
- = tasso di crescita della preda in assenza di predatori
- = tasso di predazione
- = tasso di mortalità del predatore in assenza di prede
- = tasso di crescita del predatore dovuto alla predazione
Implementazione in Julia
[modifica | modifica sorgente]Considerato un sistema in cui le condizioni iniziali al tempo zero sono 40 prede e 9 predatori si vuole tracciare in Julia il grafico della traiettoria o diagramma di fase che mette sull’asse orizzontale la popolazione di prede x e sull’asse verticale la popolazione di predatori y in 50 giorni. Julia risolve il sistema di equazioni differenziali e traccia il grafico. La curva è chiusa e forma un ciclo (orbita) che si ripete indefinitamente nel modello base. Ogni punto della curva rappresenta uno stato del sistema (numero di prede, numero di predatori) in un certo istante. Muovendosi lungo la curva in senso orario o antiorario (a seconda dei parametri), si attraversano quattro fasi tipiche:
- Prede abbondanti, predatori pochi → i predatori hanno cibo in abbondanza → iniziano a crescere.
- Prede in calo, predatori in aumento → la predazione riduce le prede → i predatori ancora prosperano per un po’.
- Prede scarse, predatori tanti → crollo della popolazione di predatori per mancanza di cibo.
- Prede in ripresa, predatori pochi → le prede si moltiplicano → ciclo ricomincia.
- Il ciclo chiuso indica che nel modello base non c’è equilibrio stabile: le popolazioni oscillano sempre.
- Il centro del ciclo corrisponde all’equilibrio teorico del sistema (popolazioni costanti), ma il modello senza fattori esterni non ci converge.
- In natura, fattori come malattie, migrazione o scarsità di risorse possono smorzare o amplificare le oscillazioni.
using DifferentialEquations
using Plots
# Parametri del modello
α = 1.1 # crescita naturale prede
β = 0.4 # tasso di predazione
γ = 0.4 # mortalità predatori
δ = 0.1 # efficienza predazione
# Funzione del sistema
function lotka_volterra!(du, u, p, t)
x, y = u
du[1] = α*x - β*x*y # dx/dt
du[2] = δ*x*y - γ*y # dy/dt
end
# Condizioni iniziali
u0 = [40.0, 9.0] # 40 prede, 9 predatori
tspan = (0.0, 50.0)
# Definizione del problema e soluzione
prob = ODEProblem(lotka_volterra!, u0, tspan)
sol = solve(prob)
# Grafico popolazioni nel tempo
plot(sol, xlabel="Tempo", ylabel="Popolazione",
label=["Prede" "Predatori"], lw=2)
# Grafico fase (Prede vs Predatori)
plot(sol[1,:], sol[2,:], xlabel="Prede", ylabel="Predatori",
label="Traiettoria", lw=2)
