01 · Punto de partida
Lo que pasó condiciona lo que viene
Un tanque vacío se llena rápido y uno casi lleno con la misma canilla apenas sube si el desagüe depende del nivel. Una epidemia con 10 infectados crece distinto que con 10.000. En ambos casos el presente depende del pasado a través del estado acumulado: eso es un modelo dinámico.
Lo contrario es un modelo estático: una foto que calcula una salida desde una entrada sin memoria (costo = precio × cantidad). Útil, pero incapaz de contar una historia en el tiempo.
- ¿El resultado depende solo de hoy o también de ayer?
- ¿El estado aparece en su propia tasa de cambio?
- ¿Hay realimentación: el nivel frena o acelera su crecimiento?
- ¿Hacia dónde se movería solo, sin tocar nada?
02 · Definición
¿Qué hace dinámico a un modelo?
Tres ingredientes lo distinguen de una fórmula estática:
Memoria
El estado guarda el pasado: N(t) resume todo lo que entró y salió. Sin estado no hay dinámica.
Realimentación
El nivel modifica su propia tasa: más nivel, más salida. Frena (negativa) o acelera (positiva).
Movimiento propio
Con entradas fijas el sistema igual evoluciona: se acerca al equilibrio o se escapa de él.
La prueba es directa: si en la tasa aparece el estado x, el modelo es dinámico. Si solo aparecen entradas y parámetros, es estático.
| Modelo | Regla | Qué cuenta |
|---|---|---|
| Estático | costo = 2 × litros | Una foto: sin tiempo ni memoria. |
| Dinámico sin realimentación | dN/dt = 3 − 2 | Historia con tasa fija: recta. |
| Dinámico con realimentación | dN/dt = 3 − k·N | Historia que se frena sola: curva con techo. |
| Dinámico acoplado | dS/dt, dI/dt, dR/dt | Tres estados que se pasan población. |
03 · Anatomía
Realimentación negativa y positiva
La realimentación es el carácter del modelo dinámico:
- Negativa (estabiliza)
- Más estado, menos crecimiento: desagüe proporcional al nivel, enfriamiento, saciedad. Busca el equilibrio.
- Positiva (amplifica)
- Más estado, más crecimiento: contagios, intereses, divisiones. Se escapa del equilibrio.
- Equilibrio dinámico
- Tasa cero con flujos activos: entra lo mismo que sale. El sistema se mueve para quedarse quieto.
- Acoplamiento
- Un estado mueve la tasa de otro: S alimenta a I, la posición alimenta a la velocidad.
Realimentación negativa
El tanque con desagüe libre
dN/dt = entrada − k·N: lleno, sale mucho; vacío, sale poco. El nivel converge a entrada/k venga de donde venga.
Realimentación positiva
La colonia temprana
dP/dt = r·P: más bacterias, más divisiones. El crecimiento acelera hasta que otro límite lo frena (Tema 16).
04 · Dinámica en modelos clásicos
Dónde vive la memoria en cada dominio
La misma pregunta —¿el estado aparece en su tasa?— clasifica cada modelo:
- 1Tanque con desagüe libre.
dN/dt = q − k·N. Negativa pura: un solo equilibrio estable en N* = q/k.
- 2Enfriamiento.
dT/dt = −k·(T − T_amb). Negativa hacia el ambiente: la taza olvida su pasado.
- 3Crecimiento temprano.
dP/dt = r·P. Positiva pura: el pasado acelera el futuro.
- 4Logístico.
dP/dt = r·P·(1 − P/K). Positiva al inicio, negativa cerca del techo: dos equilibrios.
- 5SIR.
Tres estados acoplados: la realimentación cruza de S a I y de I a R.
05 · Representación en Python
Si la tasa usa el estado, es dinámico
En Python la diferencia se ve en una línea: ¿la función de tasas recibe el estado o solo parámetros? Si lo recibe y lo usa, el modelo tiene memoria.
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Cambiá k y observá cómo la misma entrada lleva a otro equilibrio.
def estatico(litros, precio):
return litros * precio
def dinamico(estado, entrada, k):
# La tasa usa el estado: hay realimentacion negativa.
return entrada - k * estado["N"]
print("estatico:", estatico(10, 2))
print("dinamico en N=10:", dinamico({"N": 10.0}, 3, 0.2))
print("dinamico en N=20:", dinamico({"N": 20.0}, 3, 0.2))
Con el mismo caudal de entrada, en N = 20 la tasa es negativa: el sistema se frena solo.
Equilibrio de un vistazo
El equilibrio anula la tasa: entrada − k·N* = 0 → N* = entrada/k. Sin integrar ya sabemos a dónde va:
def equilibrio_tanque(entrada, k):
return entrada / k
for k in [0.1, 0.2, 0.5]:
print(k, "→ N* =", equilibrio_tanque(3, k))
06 · Exploración
Laboratorio: el tanque que se frena solo
Tanque con desagüe proporcional: dN/dt = entrada − k·N. La línea punteada es el equilibrio N* = entrada/k. Partí de abajo o de arriba y observá que todas las curvas convergen al mismo nivel: la realimentación negativa borra el pasado.
Convergencia al equilibrio
dN/dt = entrada − k · N
Con entrada 3 y k 0,2, el equilibrio está en 15.
Todas las trayectorias se acercan a la línea de equilibrio: la memoria del inicio se pierde y solo quedan la entrada y el desagüe.
Preguntas para explorar
- Con entrada 3 y k 0,2, partí de N₀ = 2 y de N₀ = 28. ¿A dónde llegan ambas?
- Duplicá k con la misma entrada. ¿El equilibrio sube o baja? ¿La llegada es más rápida o más lenta?
- ¿Qué pasa con entrada 0? ¿Cuál es el equilibrio y qué significa?
Ver respuestas sugeridas
- Ambas a N* = 15: una sube y la otra baja. La realimentación negativa atrae desde los dos lados.
- Baja a la mitad y llega más rápido: más k es más freno y más velocidad de convergencia.
- N* = 0: el tanque se vacía solo. El equilibrio existe aunque el sistema termine vacío.
07 · Comprensión
Confusiones frecuentes
«Si cambia en el tiempo, ya es dinámico»
Una entrada que varía (lluvia por horas) mueve al sistema sin que él recuerde nada. Dinámico exige que el estado aparezca en su propia tasa.
«Equilibrio significa apagado»
En N* = 15 siguen entrando 3 y saliendo 3 por minuto: el equilibrio dinámico es movimiento que se compensa, no reposo total.
«Realimentación siempre estabiliza»
Solo la negativa. La positiva desestabiliza: más contagio genera más contagio hasta que otro mecanismo la frena.
«Un modelo dinámico no tiene parámetros estáticos»
Sí los tiene: entrada, k, r, K configuran la dinámica sin ser estados. Cambiarlos cambia el equilibrio y la velocidad.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: detectar dinámica
Sin ejecutar primero: ¿cuál de estas tasas es dinámica? Después comprobalo mirando si usa el estado.
def tasa_a(estado, q):
return q
def tasa_b(estado, q, k):
return q - k * estado["N"]
print("A en N=5 :", tasa_a({"N": 5.0}, 3))
print("A en N=25:", tasa_a({"N": 25.0}, 3))
print("B en N=5 :", tasa_b({"N": 5.0}, 3, 0.2))
print("B en N=25:", tasa_b({"N": 25.0}, 3, 0.2))
Ver solución
Solo B es dinámica: cambia con N (2,0 frente a −2,0). A devuelve 3 en ambos casos: sin memoria.
Ejercicio 2: calcular el equilibrio
Con entrada 4 y k = 0,25, ¿cuál es N*? ¿Y la tasa en N = 10 y en N = 20?
def equilibrio(entrada, k):
return entrada / k
def tasa(estado, entrada, k):
return entrada - k * estado["N"]
print("N* =", equilibrio(4, 0.25))
print("tasa en 10:", tasa({"N": 10.0}, 4, 0.25))
print("tasa en 20:", tasa({"N": 20.0}, 4, 0.25))
Ver solución
N* = 16. En 10 la tasa es +1,5 (sube) y en 20 es −1,0 (baja): el equilibrio atrae desde ambos lados.
Ejercicio 3: simular la convergencia
Integrá con Euler fino desde N₀ = 2 hasta T = 30 con dt = 0,5. ¿A qué valor llega?
Ver una posible respuesta
def simular(entrada, k, n0, t_final, dt=0.5):
n, t = n0, 0.0
while t < t_final - 1e-9:
n = n + (entrada - k * n) * dt
t += dt
return round(n, 2)
print(simular(3, 0.2, 2, 30))
Llega a ≈ 14,97, casi el equilibrio 15. Con realimentación negativa, Euler fino converge sin oscilar.
09 · Síntesis
Ideas para recordar
- Dinámico = la tasa usa el estado: hay memoria y la historia importa.
- Realimentación negativa estabiliza hacia un equilibrio; positiva amplifica lejos de él.
- El equilibrio anula la tasa con flujos activos: N* = entrada/k en el tanque lineal.
- En Python: tasa(estado, …) separada de paso(estado, …); el equilibrio se calcula sin simular.
- Con desagüe proporcional, todo N₀ converge al mismo N*: el pasado se olvida.
En el próximo tema estudiaremos la evolución temporal: cómo leer y comparar trayectorias completas.