Modelo de Crecimiento Poblacional en Python

El modelo de crecimiento poblacional consta de dos modelos simples: 

  • El Modelo de Crecimiento Exponencial:
$${\large \begin{align*} \frac{dP}{dt} = rP \end{align*} }$$ 
  • El Modelo de Crecimiento Logístico:
$${\large \begin{align*} \frac{dP}{dt} = rP\left(1 - \frac{P}{k}\right) \end{align*} }$$

Donde:

P es la población 
t es el tiempo
r es la constante de proporcionalidad
k es la capacidad de carga del sistema

Estas ecuaciones diferenciales si tienen una solución analítica correspondiente. No obstante en este articulo se resolveran las ecuaciones diferenciales por el método del 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

Ahora iniciaremos el código respectivamente

Código Fuente del Modelo de Crecimiento Poblacional 

def mcp(t0, tn, n, P, r, k):
    
    """ t0 = es el tiempo inicial
        tn 0 es el tiempo final
        n es el número de pasos
        [P] es la condicion inicial 
        [r,k] son las constantes del modelo de crecimiento poblacional"""
    
    f1 = lambda t,x,y: r*
    f2 = lambda t,x,y: r*- (r/k)*(y**2)
    
    t = np.linspace(t0, tn, n+1)
    x = np.zeros(n+1)
    y = np.zeros(n+1)
    x[0= P
    y[0= P
    h = (tn-t0)/n
    for i in range(1,n+1):
        x[i] = x[i-1] + h*f1(t[i-1], x[i-1])
        y[i] = y[i-1] + h*f2(t[i-1], y[i-1])
        
    fig, ((ax1, ax2)) = plt.subplots(1,2)
    fig.set_size_inches(16,8)
    
    ax1.plot(t, x, lw = 3, color = 'r', label = "Exponencial")
    ax1.set_xlabel('Tiempo', size = 20
    ax1.set_xlabel('Crecimiento Exponencial', size = 20
    ax1.set_title("Modelo de Crecimiento Exponencial", size=20)
    ax1.legend(fontsize = 20)
    ax1.grid()

    ax2.plot(c/d, b/a, lw = 1, color = 'k', label = "Atractor")
    ax2.axhline(y=k/2, color = 'k', lw = 3, ls = '--', label = "Inflexión")
    ax2.set_xlabel('Tiempo' , size = 20)
    ax2.set_ylabel('Crecimiento Logístico', size = 20
    ax2.set_title("Modelo de Crecimiento Logístico", size=20)
    ax2.legend(fontsize = 20)
    ax2.grid()

    plt.suptitle('Modelo de Crecimiento Poblacional Exponencial - Logístico', fontsize=25, size=20)
    plt.tight_layout()
    plt.show()    
    return mcp

Aplicación del código fuente

mcp(0,10,1000,10,2,50)


Comentarios