Modelos Continuos · Tema 03

Variables de estado continuas

Niveles que varían en cada instante: qué guardan, cómo se derivan y cómo distinguirlas de parámetros y entradas.

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.

Clasificar antes de programar evita errores de modelo.
VariableEjemploFamilia
Nivel del tanque N(t)12,4 litros en t = 3Estado: se integra.
Caudal de entrada3 L/min fijosParámetro: configura.
Lluvia u(t)5 mm/h entre t = 2 y 4Entrada: se impone.
Infectados I(t)42 personasEstado: 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?

Estados x(t)→Tasas f(x)→Trayectoria
  1. 1
    Tanque.

    Estado: N(t). Tasa: entrada − salida. Un solo nivel, una sola tasa.

  2. 2
    Temperatura.

    Estado: T(t). Tasa: −k·(T − T_amb). El ambiente es entrada, no estado.

  3. 3
    Población.

    Estado: P(t). Tasa: r·P (luego r·P·(1 − P/K)). r y K son parámetros.

  4. 4
    Epidemia SIR.

    Estados: S(t), I(t), R(t). Tasas acopladas que se pasan población.

  5. 5
    Movimiento.

    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.

EXPERIMENTO 03

Población y tasa acopladas

dP/dt = r · P

Los resultados numéricos aparecen debajo.
P final365,98
Tasa final dP/dt109,79
P a mitad (T/2)60,50
LecturaCrece acelerado

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

  1. Con r = 0, ¿qué forma tienen P(t) y su tasa? ¿Qué estado es?
  2. Duplicá P₀ con el mismo r. ¿Se duplica solo el final o toda la curva?
  3. ¿Por qué la tasa teal no puede dibujarse sin conocer primero el estado?
Ver respuestas sugeridas
  1. P(t) horizontal y tasa en cero: es un equilibrio (cualquier P₀ se queda quieto).
  2. 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.
  3. 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.