Módulo 3 · Cálculo aplicado

11. Ecuaciones diferenciales

¿Qué tan rápido cambia la planta antes del evento?

Mate MathPlay · Flotación Cu · Archivo de trabajo: flotacion_cobre.xlsx

Flotación CuExcelPythonML básico

Ecuaciones diferenciales

Usamos tasas de cambio para capturar dinámica de nivel, recuperación y riesgo antes de la sobre-espumación.

1. Pregunta de planta

Una ecuación diferencial describe cómo cambia una variable con el tiempo. En flotación, sirve para hablar de dinámica: nivel, recuperación, riesgo o espuma.

Idea central: no solo preguntamos cuál es el nivel de celda, sino qué tan rápido está subiendo o bajando.

2. Matemática simple

Una derivada temporal mide velocidad de cambio:

dNivel/dt = cambio del nivel por unidad de tiempo dRiesgo/dt = cambio del score de riesgo por unidad de tiempo

En datos discretos, se aproxima con diferencias:

dNivel/dt aproximado = Nivel_actual - Nivel_anterior
Si el nivel sube rápido y al mismo tiempo el espumante está alto, puede aparecer una condición de alerta antes del evento.

3. Aplicaciones al caso

Variable dinámicaPreguntaAlerta temprana
d_nivel¿El nivel está subiendo rápido?Riesgo de desborde o espuma inestable.
d_score_riesgo¿El riesgo se acelera?Condición anormal emergente.
d_recuperacion¿La recuperación está cayendo?Pérdida metalúrgica en curso.

4. Excel: ejercicio guiado

Cambio horario de nivel

=J3-J2

Cambio horario de recuperación

=F3-F2

Cambio horario de score de riesgo

=P3-P2

Alerta simple

=SI(Y(J3-J2>5,L3>40),"Alerta nivel + espumante","Normal")

5. Python: velocidades de cambio

import pandas as pd

archivo = "flotacion_cobre.xlsx"
df = pd.read_excel(archivo)

df["d_nivel"] = df["nivel_celda"].diff()
df["d_recuperacion"] = df["recuperacion_cu"].diff()
df["d_score_riesgo"] = df["score_riesgo"].diff()

alertas = df[
    (df["d_nivel"] > 5) &
    (df["dosificacion_espumante"] > df["dosificacion_espumante"].quantile(0.75))
]

alertas[["nivel_celda", "d_nivel", "dosificacion_espumante", "evento_sobre_espumacion"]].head()

6. Puente hacia Machine Learning

Las tasas de cambio son muy valiosas para modelos de alerta, porque capturan dinámica.

features = [
    "flujo_aire", "nivel_celda", "ph", "dosificacion_espumante",
    "score_riesgo", "d_nivel", "d_score_riesgo", "d_recuperacion"
]

X = df[features].dropna()
y = df.loc[X.index, "evento_sobre_espumacion"]

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

modelo = LogisticRegression(max_iter=1000)
modelo.fit(X_train, y_train)

pred = modelo.predict(X_test)
print(classification_report(y_test, pred))
Importante: en datos reales hay que cuidar el orden temporal. No conviene mezclar futuro con pasado al validar modelos de proceso.

7. Cierre conceptual

Mensaje final: las ecuaciones diferenciales enseñan a pensar en dinámica. Para planta, no basta saber dónde estamos; también importa hacia dónde y qué tan rápido nos estamos moviendo.

← Lección anteriorDescargar datosSiguiente lección →