Modelos Continuos · Tema 23

Tanques y flujos

Niveles, entradas y salidas continuas: el arquetipo que explica inventarios, colas y baterías.

01 · Punto de partida

El patrón que aparece en todas partes

Agua en un tanque, stock en un depósito, carga en una batería, espera en una cola: todos son niveles que acumulan la diferencia entre entrar y salir. La ecuación madre es dN/dt = q_in(t) − q_out(N), con entradas que el entorno impone y salidas que el nivel decide.

Dominar el tanque es dominar el 80 % de los modelos continuos aplicados: cambia el líquido, no la cuenta.

  • ¿Qué entra (q_in) y quién lo decide?
  • ¿Qué sale (q_out) y depende de N o es fijo?
  • ¿Hay piso (0) y techo (capacidad)?
  • ¿La entrada es fija, pulsante o con ritmo?

02 · Definición

¿Qué es un modelo de tanque?

Un nivel con sus dos canillas:

⇥

Entrada q_in(t)

Lo que llega: fija, pulsante o sinusoidal. La impone el entorno o el escenario. Ejemplo: 3 + 2·sin.

⇤

Salida q_out(N)

Lo que se va: fija (bomba) o proporcional k·N (desagüe libre). La decide el nivel.

▣

Nivel N(t) con límites

Lo que queda entre piso 0 y techo C: si se vacía, se queda; si rebalsa, vierte.

Sin límites es la EDO ideal; con límites es el modelo útil: el piso y el techo son condiciones de contorno físicas.

Cuatro tanques, una sola cuenta.
SistemaEntradaSalida
AguaCanilla q fijaDesagüe k·N libre.
StockCompras q(t) por mesVentas proporcionales.
BateríaCarga P fijaConsumo según uso.
Cola fluidaLlegadas q(t) con picoAtención k·N (más cola, más salida).

03 · Anatomía

Fija, pulsante y con ritmo

La entrada manda la forma de la respuesta:

Entrada fija
q constante: el nivel converge a q/k y se queda. Régimen plano.
Entrada pulsante
Escalones (abro/cierro): el nivel persigue cada escalón con retardo 1/k.
Entrada con ritmo
q₀ + A·sin(2πt/Tp): el nivel oscila atenuado y desfasado alrededor de q₀/k.
Límites 0 y C
Piso que recorta vaciados, techo que vierte excedentes: la EDO se pausa en los bordes.

Salida fija (bomba)

Recta hasta el borde

dN/dt = q − b: sube o baja sin freno hasta 0 o C. Sin realimentación, sin piedad.

Salida libre (k·N)

Curva que se regula

dN/dt = q − k·N: converge a q/k venga de donde venga. El desagüe cuida solo.

04 · Tanques en el curso

El arquetipo con cinco líquidos

Cada acumulación con entradas y salidas es un tanque:

q_in − q_out→Nivel N→Piso / techo
  1. 1
    Agua.

    El original: canilla, desagüe, rebalse. Referencia de todo.

  2. 2
    Inventario.

    Compras menos ventas con capacidad de galpón.

  3. 3
    Batería.

    Carga menos consumo entre 0 y 100 %.

  4. 4
    Cola.

    Llegadas menos atenciones: espera acumulada.

  5. 5
    Contaminante.

    Vertido menos degradación k·N en un lago.

05 · Representación en Python

Entradas que dependen de t, salidas de N

En Python, la entrada es función del tiempo y la salida función del nivel. Euler con recorte respeta piso y techo.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Subí la amplitud y observá que el nivel oscila sin pasarse del techo.

import math


def entrada(t, q0=3.0, amp=2.0, periodo=10.0):
    return q0 + amp * math.sin(2 * math.pi * t / periodo)


def paso(nivel, t, dt=0.1, k=0.2, techo=30.0):
    d = entrada(t) - k * nivel
    nuevo = nivel + d * dt
    return max(0.0, min(techo, nuevo))


print(round(entrada(0), 2), round(entrada(2.5), 2))

3,0 en t = 0 y 5,0 en t = 2,5: la canilla respira con período 10.

Simular con ritmo y límites

El bucle integra la EDO no autónoma con recorte físico:

def simular(n0=15.0, t_final=40.0, dt=0.1, k=0.2, techo=30.0):
    n, t = n0, 0.0
    historia = [(t, n)]
    while t < t_final - 1e-9:
        n = paso(n, t, dt, k, techo)
        t += dt
        historia.append((round(t, 1), round(n, 2)))
    return historia


hist = simular()
print(hist[0], "…", hist[-1])

06 · Exploración

Laboratorio: la canilla que respira

Tanque con desagüe k y entrada rítmica q₀ + A·sin(2πt/10) desde N₀ = q₀/k. La teal punteada es la entrada (eje propio); la dorada es el nivel que la sigue atenuado y con retardo. Subí A y observá que el nivel oscila sin desbocarse: el desagüe lo cuida.

EXPERIMENTO 23

Nivel que sigue el ritmo

q(t) = q₀ + A·sin · dN/dt = q − k·N

Los resultados numéricos aparecen debajo.
Nivel medio15,00
Oscilación ±3,02
Mín – Máx11,98 – 18,02
LecturaSigue con retardo

Con A 2 el nivel oscila ±3,02 alrededor de 15: atenuado por k.

La entrada oscila ±2 pero el nivel solo ±3,02 alrededor de 15 con retardo: el tanque filtra el ritmo (pasa-bajos).

Preguntas para explorar

  1. Con A = 0, ¿qué dibuja el nivel? ¿Cuál es su valor?
  2. Duplicá k con la misma A. ¿La oscilación del nivel crece o se achica?
  3. Si A > q₀ (entra negativo a ratos), ¿qué significa y qué hace el piso 0?
Ver respuestas sugeridas
  1. Horizontal en q₀/k = 15: sin ritmo no hay historia, solo equilibrio.
  2. Se achica: más desagüe filtra más. El tanque con k grande copia menos el ritmo.
  3. La canilla «chupa»: el modelo lo permite en la EDO ideal, pero el piso 0 recorta el vaciado físico.

07 · Comprensión

Confusiones frecuentes

«El nivel copia la entrada»

La sigue atenuada y con retardo 1/k: el tanque es un filtro pasa-bajos, no un espejo.

«Recortar en 0 es trampa numérica»

Es física: el tanque vacío no entrega. La EDO ideal no sabe de pisos; el modelo sí.

«Con entrada variable no hay equilibrio»

Hay régimen periódico: oscila alrededor de q₀/k con la misma frecuencia. Equilibrio dinámico con ritmo.

«Más capacidad cambia la forma»

Solo si se toca el techo: mientras N < C, la capacidad no existe para la EDO.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: medio que manda

Con q₀ = 4, A = 1 y k = 0,2, ¿alrededor de qué nivel oscila? Comprobalo con el promedio.

print(4 / 0.2)
Ver solución

20,0: la base q₀ fija el medio; la amplitud A solo pone el vaivén. Medios y vaivenes se deciden por separado.

Ejercicio 2: atenuación

La oscilación del nivel es A/√(k² + ω²) con ω = 2π/10. Calculala con A = 2 y k = 0,2. ¿Cierra con ±3,02?

import math


def oscilacion(a=2.0, k=0.2, periodo=10.0):
    w = 2 * math.pi / periodo
    return a / math.sqrt(k ** 2 + w ** 2)


print(round(oscilacion(), 2))
Ver solución

3,03: la cuenta cerrada confirma al simulador. Más k o más frecuencia, menos vaivén.

Ejercicio 3: con piso y techo

Agregá piso 0 y techo 18 al simulador con q₀ = 3, A = 3 y k = 0,2. ¿El techo recorta?

Ver una posible respuesta
import math


def simular(q0=3.0, amp=3.0, k=0.2, techo=18.0, t_final=40.0, dt=0.1):
    n, t, mx = q0 / k, 0.0, 0.0
    while t < t_final - 1e-9:
        q = q0 + amp * math.sin(2 * math.pi * t / 10)
        n = max(0.0, min(techo, n + (q - k * n) * dt))
        mx = max(mx, n)
        t += dt
    return round(mx, 2)


print(simular())

El máximo da 18,0: el techo recorta el pico (sin techo llegaría a ≈ 19,5). El rebalse existe.

09 · Síntesis

Ideas para recordar

  • dN/dt = q_in(t) − q_out(N): entradas del escenario, salidas del nivel, nivel que integra.
  • Salida libre k·N regula sola hacia q₀/k; salida fija va recta al borde.
  • Entrada rítmica → régimen periódico atenuado A/√(k² + ω²) con retardo 1/k.
  • En Python: entrada(t) + salida(n) + paso con max(0, min(C, …)).
  • Piso y techo son física: la EDO ideal se recorta en los bordes.

En el próximo tema generalizaremos la máquina: sistemas dinámicos y su comportamiento global.