Sistemas Dinámicos Discretos

Antonio López García

1. Actividad 1 — Sistemas dinámicos discretos

Descargar PDF Descargar Python (ejercicio 2)

Ejercicio 1 — Gimnasio Poincaré

Sistema dinámico discreto de socios: Nn+1 = 0,95 Nn + 5 (5% de bajas, 5 altas mensuales).

Solución general explícita: Nn = (N₀ − 100)(0,95)ⁿ + 100.

Punto de equilibrio: Ne = 100. Como 0,95 < 1, el equilibrio es estable.

Puntos periódicos: No hay puntos periódicos distintos del punto de equilibrio (N=100).

Ingresos a largo plazo: 100 socios × 25 € = 2.500 €/mes.

Ejercicio 2 — Producción fabril

Función: f(Q) = D · sin(Q / C) con D=12, C=5.

Puntos de equilibrio en [0, 5π]: Q ≈ 0,0 (inestable) y Q ≈ 10,43564 (inestable).

Órbitas de periodo 2: (0,0) repulsora, (15,70796, 15,70796) repulsora. A largo plazo la producción se estabiliza según el valor inicial Q₀, tendiendo a un equilibrio u oscilando entre dos valores.

Código Python (ejercicio 2)

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import newton

def f(Q):
    return 12 * np.sin(Q / 5)

def f_prime(Q):
    return 12 / 5 * np.cos(Q / 5)

def ff(Q):
    return f(f(Q))

def ff_prime(Q):
    return f_prime(f(Q)) * f_prime(Q)

def find_equilibrium_points():
    Q_values = np.linspace(0, 5 * np.pi, 1000)
    tolerance = 1e-5
    equilibrium_points = []
    for Q0 in Q_values:
        try:
            root = newton(func=lambda Q: f(Q) - Q,
                          fprime=lambda Q: f_prime(Q) - 1, x0=Q0, tol=tolerance)
            if all(abs(root - eq) > tolerance for eq in equilibrium_points):
                equilibrium_points.append(root)
        except (RuntimeError, OverflowError):
            continue
    return equilibrium_points

Ejercicio 3 — Equilibrios paramétricos

Estudio de equilibrios del sistema en función del parámetro real µ. Cuando no aplica el criterio analítico, se usa cobweb-plot para analizar la dinámica.

Ejercicio 1 - desarrollo Ejercicio 1 - fórmula explícita Ejercicio 1 - punto equilibrio Ejercicio 2 - código y puntos equilibrio Ejercicio 2 - órbitas periodo 2 Ejercicio 2 - cobweb plots Ejercicio 3 - página 1 Ejercicio 3 - página 2 Ejercicio 3 - página 3 ↑ Volver al índice

2. Semana 02 — Cadenas de Markov y modelo de Lefkovitch

Descargar PDF Descargar código Python (Colab)

Ejercicio 1 — Cadenas de Markov (compañías telefónicas)

Tres compañías (A, B, C) compiten. La matriz de transición refleja la fidelidad de usuarios tras cada campaña publicitaria:

T = [[0.85, 0.05, 0.075],
     [0.05, 0.85, 0.075],
     [0.10, 0.10, 0.85 ]]

Estado inicial x⁽⁰⁾ = (0.6, 0.2, 0.2).

Variación tras 3 campañas: usuarios de A pasan de 60% a 44,46% → −25,9%.

Distribución a largo plazo: Autovalor dominante λ=1. Vector propio normalizado: 40% A, 30% B, 30% C.

Ejercicio 2 — Modelo de Lefkovitch (población vegetal)

Tres clases: plántulas, plantas jóvenes, plantas adultas. Matriz de transición:

M = [[0.5, 2,   1  ],
     [0.3, 0.6, 0  ],
     [0,   0.4, 0.9]]

Población inicial: (100 plántulas, 50 jóvenes, 20 adultas).

Pasados 4 meses: ≈ 514 plántulas, 181 jóvenes, 128 adultas.

Las plantas jóvenes y adultas aportan plántulas, aumentando su número con el tiempo.

Código Python (Colab)

import numpy as np

T = np.array([[0.85, 0.05, 0.075],
              [0.05, 0.85, 0.075],
              [0.1,  0.1,  0.85 ]])

# Distribución tras 3 campañas
T_3 = np.linalg.matrix_power(T, 3)
x0 = np.array([0.60, 0.20, 0.20])
x3 = np.dot(T_3, x0)
print('Distribución tras 3 campañas:', x3)

# Distribución a largo plazo
eigenvalues, eigenvectors = np.linalg.eig(T)
stationary = eigenvectors[:, np.argmax(eigenvalues)]
stationary = stationary / np.sum(stationary)
print('Largo plazo:', stationary)

# Modelo Lefkovitch
M = np.array([[0.5, 2, 1],
              [0.3, 0.6, 0],
              [0, 0.4, 0.9]])
init = np.array([100, 50, 20])
pop_4 = init @ np.linalg.matrix_power(M, 4)
print('Población tras 4 meses:', pop_4)
Diagrama de estados y matriz Ejercicio 1 - variación porcentual Ejercicio 1 - largo plazo Modelo de Lefkovitch Población tras 4 meses Evolución población Desarrollo ejercicio 1 - página 1 Desarrollo ejercicio 1 - página 2 Desarrollo ejercicio 2 ↑ Volver al índice