El modelo de Lotka - Volterra es un sistema de dos ecuaciones diferenciales no lineales en el que se intenta modelar la interacción entre los depredadores y las presas en un determinado ecosistema respectivamente.
$${\Large \begin{align*} \frac{dx}{dt} &= x(a - b y) \hspace{1.2cm},\hspace{0.2cm} x(0) = x_{0} \\ \frac{dy}{dt} &= y(dx - c) \hspace{1.2cm},\hspace{0.2cm} y(0) = y_{0} \end{align*} }$$
Donde:
y(t) es el depredador
x(t) es la presa
t es el tiempo
t es el tiempo
a = taza de crecimiento de las presas
c = taza de crecimiento de los depredadores
b = taza de muerte de los depredadores
d = taza de caza de los depredadores
En este sistema de ecuaciones diferenciales no se puede obtener una solución analítica x(t) y y(t) debido a que es un sistema no lineal. Por consiguiente este problema se debe analizar mediante el análisis numérico.
Antes de crear el código fuente es necesario que se importan algunas librerías correspondientes para compilar este código.
import numpy as np
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
np.seterr(divide='ignore', invalid='ignore')
Ahora iniciaremos el código respectivamente
Código Fuente del Modelo de Lotka - Volterra
def mlv(t0, tn, x0, y0, a, b, c, d):
""" t0 = es el tiempo inicial
tn 0 es el tiempo final
n es el número de pasos
[x0, y0] es la condicion inicial
[a,b,c,d] son las constantes del modelo de lotka - volterra"""
fig, ((ax1, ax2)) = plt.subplots(1,2)
fig.set_size_inches(20,8)
f1 = lambda t,x,y: a*x - b*y*x
f2 = lambda t,x,y: -c*y + d*y*x
t = np.linspace(t0, tn, 500*tn +1)
x = np.zeros(500*tn +1)
y = np.zeros(500*tn +1)
x[0] = x0
y[0] = y0
h = (tn-t0)/(500*tn)
for i in range(1,500*tn +1):
x[i] = x[i-1] + h*f1(t[i-1], x[i-1], y[i-1])
y[i] = y[i-1] + h*f2(t[i-1], x[i-1], y[i-1])
ax1.plot(t, x, lw = 3, color = 'r', label = "Presa")
ax1.plot(t, y, lw = 3, color = 'b', label = "Depredador")
ax1.set_xlabel('Tiempo', size = 20)
ax1.set_ylabel('Población', size = 20)
ax1.set_title("Presa y Depredador en función del tiempo", size=20)
ax1.legend(fontsize = 20)
ax1.grid()
ax2.plot(x, y, lw = 3, color="black", label="Atractor")
ax2.plot(c/d, a/b, lw = 6, marker="o", color="black", markersize = 20)
ax2.set_xlabel('Presa', size = 20)
ax2.set_ylabel('Depredador', size = 20)
ax2.set_title("Depredador en función de la Presa", size=20)
ax2.legend(fontsize = 20)
ax2.grid()
u = np.linspace(0, max(x), 20)
v = np.linspace(0, max(y), 20)
U, V = np.meshgrid(u, v)
Ux = U*(1 - (b/a)*V) / np.sqrt((U*(1 - (b/a)*V))**2 + (V*((d/c)*U - 1))**2)
Vy = V*((d/c)*U - 1) / np.sqrt((U*(1 - (b/a)*V))**2 + (V*((d/c)*U - 1))**2)
ax2.quiver(U,V,Ux,Vy)
plt.suptitle('Modelo Lotka - Volterra', fontsize=25, size=20)
plt.subplots_adjust(left=0.125,
bottom=0.1,
right=0.9,
top=0.9,
wspace=0.15,
hspace=0.35)
return mlv
Aplicación del código fuente
- Cuando la población de las presas es mayor que la población de los depredadores
$${\large \begin{align*} \frac{dx}{dt} &= x(0.4 - 0.2 y) \hspace{1.2cm},\hspace{0.2cm} x(0) = 10 \\ \frac{dy}{dt} &= -y(0.3 - 0.05 x) \hspace{1.2cm},\hspace{0.2cm} y(0) = 4 \end{align*} }$$
mlv(0,250,10,4, 0.4, 0.37, 0.3, 0.05) |
Simulación del Modelo Lotka - Volterra |
Comentarios
Publicar un comentario