Páginas

sábado, 25 de octubre de 2025

Matemáticas, tecnología y las inundaciones: cuando los números salvan vidas

Matemáticas, tecnología y las inundaciones: el poder de los números ante un desafío natural



Las inundaciones son fenómenos naturales complejos que cada año afectan a millones de personas en todo el mundo. Más allá de su fuerza destructiva, en ellas intervienen variables que las matemáticas y la tecnología pueden comprender, modelar y, en muchos casos, predecir.

En este artículo exploraremos cómo los modelos matemáticos, la simulación computacional y la inteligencia artificial se combinan para anticipar el comportamiento del agua y diseñar estrategias de mitigación más efectivas. Además, veremos ejemplos prácticos usando R, un lenguaje poderoso para el análisis científico y la modelación ambiental.


1. Matemáticas detrás del flujo del agua

Cuando llueve, parte del agua se infiltra en el suelo, otra parte se evapora, y el resto fluye hacia ríos y quebradas. Ese movimiento puede describirse mediante ecuaciones diferenciales parciales conocidas como ecuaciones de Saint-Venant o de aguas someras, que modelan la conservación de la masa y del momento del flujo:

∂h/∂t + ∂(uh)/∂x = 0
∂(uh)/∂t + ∂/∂x (uh² + ½gh²) = -gh ∂z/∂x - τ

donde:
h(x,t): altura del agua,
u(x,t): velocidad del flujo,
z(x): elevación del terreno,
g: gravedad,
τ: fricción con el lecho.


2. Simulación 1: Crecida simple en un valle

A modo de ejemplo, simularemos cómo el nivel del agua aumenta en una zona de valle tras una lluvia intensa. Usaremos un modelo en Lenguaje R muy simplificado de balance hídrico, donde el nivel del agua depende del volumen acumulado por lluvia y del caudal de salida.


# Simulación del nivel de agua con drenaje proporcional
tiempo <- seq(0, 10, by = 0.1)
nivel <- numeric(length(tiempo))

# Parámetros
lluvia <- ifelse(tiempo <= 1, 100, 0)   # 100 mm/h durante 1 hora
k <- 0.3                                # constante de drenaje (1/h)

# Simulación paso a paso (Euler)
for (i in 2:length(tiempo)) {
  dt <- tiempo[i] - tiempo[i-1]
  nivel[i] <- nivel[i-1] + (lluvia[i-1] - k * nivel[i-1]) * dt
  if (nivel[i] < 0) nivel[i] <- 0
}

# Gráfico
plot(tiempo, nivel, type="l", col="blue", lwd=2,
     main="Simulación del nivel del agua con drenaje proporcional",
     xlab="Tiempo (horas)", ylab="Nivel del agua (mm)")
grid()



El gráfico obtenido muestra cómo el nivel del agua sube rápidamente durante la lluvia (hora 0–1) y luego desciende gradualmente a medida que el drenaje evacúa el exceso. Este tipo de simulación, aunque básica, ayuda a comprender el comportamiento temporal de una crecida.


3. Simulación 2: Modelo de terreno e inundación en 2D

En escenarios reales, el agua no se mueve solo en una dimensión. Podemos generar un modelo digital del terreno (MDT) y simular cómo se acumula el agua según la topografía.

Simulación de acumulación de agua en terreno (R)

Este código genera un modelo de terreno y simula cómo el agua se acumula siguiendo la topografía.


library(ggplot2)
library(reshape2)
library(viridis)

# Crear grid del terreno
x <- seq(-50, 50, by=1)
y <- seq(-50, 50, by=1)
grid <- expand.grid(x=x, y=y)
set.seed(123)

# Altura del terreno con ruido
grid$z <- 10 - 0.005*(grid$x^2 + grid$y^2) + rnorm(nrow(grid), 0, 0.1)

# Convertir a matriz para operaciones vecinas
nx <- length(x)
ny <- length(y)
z_mat <- matrix(grid$z, nrow=nx, ncol=ny)

# Inicializar agua
lluvia <- 0.5
agua <- matrix(lluvia, nrow=nx, ncol=ny)

# Simulación simple de acumulación de agua
# Cada celda cede agua a vecinos más bajos
for (t in 1:50) {  # número de iteraciones de flujo
  for (i in 2:(nx-1)) {
    for (j in 2:(ny-1)) {
      vecinos <- z_mat[(i-1):(i+1),(j-1):(j+1)] + agua[(i-1):(i+1),(j-1):(j+1)]
      diff <- agua[i,j] + z_mat[i,j] - min(vecinos)
      if (diff > 0) {
        agua[i,j] <- agua[i,j] - diff*0.25
        # repartir a vecinos más bajos
        mask <- vecinos == min(vecinos)
        agua[(i-1):(i+1),(j-1):(j+1)][mask] <- agua[(i-1):(i+1),(j-1):(j+1)][mask] + diff*0.25 / sum(mask)
      }
    }
  }
}

# Convertir a dataframe para ggplot
grid$agua <- as.vector(agua)

# Graficar
ggplot(grid, aes(x=x, y=y, fill=agua)) +
  geom_raster() +
  scale_fill_viridis_c(option="C") +
  coord_fixed() +
  labs(title="Simulación de acumulación de agua en terreno",
       x="x (m)", y="y (m)", fill="Nivel de agua (m)")



El mapa resultante muestra las zonas donde el agua se acumula más intensamente (en tonos claros). Este tipo de visualización permite identificar zonas de riesgo en función de la topografía, y es análogo a los modelos hidrológicos avanzados como HEC-RAS o SWMM.


4. Tecnología que potencia las simulaciones

La unión de estos elementos da lugar a los llamados gemelos digitales del territorio, que reproducen virtualmente la dinámica del agua y permiten probar decisiones antes de ejecutarlas en el mundo real.


5. Inteligencia artificial e inundaciones

La IA amplía el alcance de las matemáticas tradicionales. Con modelos de machine learning, los sistemas pueden aprender patrones históricos y predecir la probabilidad de inundación en función de variables como lluvia, pendiente, vegetación y densidad urbana.

En R, esto puede implementarse fácilmente con bibliotecas como caret o randomForest, entrenando un modelo que clasifique áreas en “bajo”, “medio” o “alto riesgo” de inundación según datos topográficos y climáticos.


6. Conclusión

Las matemáticas no solo están en los libros: fluyen con el agua. A través de ecuaciones, simulaciones y tecnología, los números se convierten en instrumentos de prevención y salvavidas digitales. La unión entre modelos matemáticos, datos satelitales y aprendizaje automático nos acerca cada vez más a un futuro donde la naturaleza será comprendida antes de causar daño.

Cada ecuación bien aplicada puede significar una vida salvada.

No hay comentarios:

Publicar un comentario