01 · Punto de partida
Lo que define la situación en cada instante
Si congelamos el tiempo en t = 4,37 min, ¿qué números bastan para describir por completo al sistema? El nivel del tanque, la temperatura de la taza, la cantidad de bacterias, los tres grupos S, I, R de una epidemia. Esos números son las variables de estado: la memoria del sistema.
Con el estado presente y las reglas de cambio podemos predecir el futuro sin mirar el pasado. Esa es la propiedad central: el estado resume la historia relevante.
- ¿Qué niveles necesito conocer para continuar la simulación?
- ¿Qué es memoria del sistema y qué es solo configuración?
- ¿Cuántos estados bastan y cuántos sobran?
- ¿Qué valores iniciales les doy?
02 · Definición
¿Qué es una variable de estado continua?
Toda variable continua del modelo cae en una de tres familias. Solo una de ellas es estado:
Estado x(t)
Acumula y tiene memoria: nivel, temperatura, población. Su derivada la define la dinámica. Ejemplo: N(t) litros.
Parámetro
Configura sin acumular: caudal nominal, tasa r, capacidad K. Cambia solo entre escenarios. Ejemplo: r = 0,3/min.
Entrada u(t)
Estímulo externo impuesto: lluvia, dosis, temperatura ambiente. El sistema no la decide. Ejemplo: T_amb(t).
La prueba es simple: si congelo el tiempo, ¿este número sigue teniendo sentido como «situación»? Si sí, es estado. Si solo sirve para calcular, es parámetro o entrada.
| Variable | Ejemplo | Familia |
|---|---|---|
| Nivel del tanque N(t) | 12,4 litros en t = 3 | Estado: se integra. |
| Caudal de entrada | 3 L/min fijos | Parámetro: configura. |
| Lluvia u(t) | 5 mm/h entre t = 2 y 4 | Entrada: se impone. |
| Infectados I(t) | 42 personas | Estado: evoluciona con S y R. |
03 · Anatomía
Elegir bien los estados
Un buen conjunto de estados es completo (basta para seguir), mínimo (sin redundancias) y medible (se puede inicializar y calibrar):
- Vector de estado
- El paquete completo: x(t) = [S(t), I(t), R(t)]. Se integra todo junto.
- Espacio de estados
- Todos los valores posibles: N ≥ 0, 0 ≤ T, S + I + R = N. Define lo permitido.
- Condición inicial
- El punto de partida x(0): sin ella la ecuación tiene infinitas curvas.
- Trayectoria
- La curva x(t) desde x(0) siguiendo dx/dt: el objeto que simulamos.
Buena elección
S, I, R por separado
Tres estados con suma constante: cada flujo mueve masa de uno a otro y la cuenta cierra.
Mala elección
Solo «enfermos acumulados»
Sin susceptibles ni recuperados no se puede calcular la tasa de contagio: falta memoria.
04 · Estados en modelos clásicos
El mismo patrón en cada dominio
Cada modelo continuo elige sus estados con el mismo criterio: ¿qué niveles necesito para calcular las tasas del próximo instante?
- 1Tanque.
Estado: N(t). Tasa: entrada − salida. Un solo nivel, una sola tasa.
- 2Temperatura.
Estado: T(t). Tasa: −k·(T − T_amb). El ambiente es entrada, no estado.
- 3Población.
Estado: P(t). Tasa: r·P (luego r·P·(1 − P/K)). r y K son parámetros.
- 4Epidemia SIR.
Estados: S(t), I(t), R(t). Tasas acopladas que se pasan población.
- 5Movimiento.
Estados: posición x(t) y velocidad v(t). Tasas: dx/dt = v, dv/dt = a.
05 · Representación en Python
El estado es un vector que se deriva
En Python, el estado continuo suele ser un diccionario o lista y la dinámica una función de tasas f(estado, t) que devuelve las derivadas. Integrar es aplicar esas tasas con un dt fino.
Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Cambiá r o el estado inicial y observá cómo cambia la tasa sin cambiar la regla.
def tasa_crecimiento(estado, r):
# estado: {"P": poblacion}. r: parámetro (1/min).
return {"dP_dt": r * estado["P"]}
estado = {"P": 10.0}
print(tasa_crecimiento(estado, 0.3))
print(tasa_crecimiento({"P": 20.0}, 0.3))
Duplicar el estado duplica la tasa: la regla es la misma, el número cambia porque depende del nivel.
Integrar el vector paso a paso
Con la función de tasas, un paso de Euler es una línea: estado += tasa * dt. Así integraremos sistemas de cualquier tamaño en los Temas 30 y 36:
def paso_euler(estado, r, dt):
tasa = r * estado["P"]
return {"P": estado["P"] + tasa * dt}
x = {"P": 10.0}
for _ in range(3):
x = paso_euler(x, 0.3, dt=1.0)
print(round(x["P"], 2))
06 · Exploración
Laboratorio: el estado y su tasa crecen juntos
Modelo exponencial dP/dt = r·P: la curva dorada es la población P(t) y la curva teal es su tasa dP/dt en cada instante. Movete los controles y observá que la tasa no es un parámetro fijo: es un segundo trazo que vive del estado.
Población y tasa acopladas
dP/dt = r · P
Con r 0,3 y P₀ 10, la tasa final es 109,79 por minuto.
La curva dorada es el estado P(t); la curva teal es su derivada en cada instante. Ambas crecen juntas porque la tasa depende del nivel.
Preguntas para explorar
- Con r = 0, ¿qué forma tienen P(t) y su tasa? ¿Qué estado es?
- Duplicá P₀ con el mismo r. ¿Se duplica solo el final o toda la curva?
- ¿Por qué la tasa teal no puede dibujarse sin conocer primero el estado?
Ver respuestas sugeridas
- P(t) horizontal y tasa en cero: es un equilibrio (cualquier P₀ se queda quieto).
- Toda la curva se duplica: la solución es P₀·e^(r·t) y P₀ factoriza. El parámetro r define la forma; P₀, la escala.
- Porque dP/dt = r·P se calcula desde P: sin estado no hay tasa. La derivada no es memoria, es consecuencia.
07 · Comprensión
Confusiones frecuentes
«Todo lo que varía es estado»
No: la tasa varía pero se calcula; el tiempo varía pero no se integra. Estado es solo lo que acumula memoria y necesita condición inicial.
«Los parámetros también se integran»
Los parámetros se fijan por escenario y solo cambian entre corridas. Integrarlos como estados inventa dinámica donde no la hay.
«Más estados siempre es mejor»
Cada estado pide una condición inicial, una tasa y datos para calibrar. Un estado de más es una deuda de datos y de error.
«El vector de estado es solo código»
Es una decisión de modelado: qué recordamos del sistema. El código solo la implementa con un dict o una lista.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: clasificar variables
Sin ejecutar primero: de N, entrada, r y dN_dt, ¿cuál es estado? Después comprobalo con el diccionario.
rol = {"N": "estado", "entrada": "parametro", "r": "parametro", "dN_dt": "calculada"}
for nombre, familia in rol.items():
print(nombre, "→", familia)
Ver solución
Solo N es estado: necesita valor inicial y se integra. dN_dt se calcula en cada instante y no se guarda como memoria.
Ejercicio 2: tasa desde el estado
Si P = 50 y r = 0,2, ¿cuánto vale dP/dt? ¿Y si P se duplica? Comprobalo con código.
def tasa(estado, r):
return r * estado["P"]
print(tasa({"P": 50.0}, 0.2))
print(tasa({"P": 100.0}, 0.2))
Ver solución
Da 10,0 y 20,0: la tasa es proporcional al estado. Por eso la curva se empina sola.
Ejercicio 3: vector SIR mínimo
Armá el vector de estado SIR y una función que devuelva sus tres tasas con contagio beta e recuperación gamma. Probala con S=90, I=10, R=0.
Ver una posible respuesta
def tasas_sir(estado, beta, gamma, N):
S, I = estado["S"], estado["I"]
contagio = beta * S * I / N
return {"dS_dt": -contagio, "dI_dt": contagio - gamma * I, "dR_dt": gamma * I}
print(tasas_sir({"S": 90.0, "I": 10.0, "R": 0.0}, 0.3, 0.1, 100))
Da dS=-2,7, dI=+1,7, dR=+1,0: lo que sale de S entra a I y de I a R. La suma de tasas es cero porque la población total se conserva.
09 · Síntesis
Ideas para recordar
- El estado x(t) es la memoria continua: con x(0) y dx/dt = f(x, …) queda definida la trayectoria.
- Estado se integra, parámetro configura, entrada se impone, derivada se calcula: no los mezcles.
- Un buen vector de estados es completo, mínimo y medible; cada estado extra cuesta datos.
- En Python: estado en dict/lista + función f(estado, t) + integración por dt fino.
- Cuando la tasa depende del estado, estado y tasa crecen juntos y la curva se curva sola.
En el próximo tema estudiaremos los modelos dinámicos: cuando el presente depende del pasado a través de estas tasas.