36. Decaimiento exponencial

El decaimiento exponencial ocurre cuando una cantidad se multiplica por un factor entre 0 y 1 en cada paso. La cantidad disminuye rápido al comienzo y luego cada vez más lentamente.

36.1 Introducción

El decaimiento exponencial es el caso contrario al crecimiento exponencial. En lugar de multiplicar por un factor mayor que 1, multiplicamos por un factor entre 0 y 1.

Este modelo aparece cuando una cantidad pierde siempre el mismo porcentaje: energía que se reduce, temperatura que se aproxima al ambiente, usuarios que abandonan una aplicación o intensidad que se atenúa.

36.2 Fórmula general

Una forma común de escribir decaimiento exponencial es:

f(t) = valorInicial · factorᵗ

Para que sea decaimiento, el factor debe cumplir:

0 < factor < 1

36.3 Pérdida porcentual

Si una cantidad pierde un porcentaje fijo en cada período, el factor se calcula como:

factor = 1 - porcentajeDePérdida
Pérdida Factor Interpretación
10% 0.90 Se conserva el 90%
25% 0.75 Se conserva el 75%
50% 0.50 Se conserva la mitad

36.4 Ejemplo básico

Si empezamos con 100 y conservamos el 80% en cada período:

f(t) = 100 · 0.8ᵗ
t f(t)
0 100
1 80
2 64
3 51.2
4 40.96

36.5 Decaimiento en JavaScript

Podemos implementar la fórmula usando el operador de potencia.

function decaimiento(valorInicial, factor, periodos) {
  return valorInicial * factor ** periodos;
}

console.log(decaimiento(100, 0.8, 0));
console.log(decaimiento(100, 0.8, 1));
console.log(decaimiento(100, 0.8, 4));

36.6 Generar tabla de decaimiento

Una tabla permite observar cómo la cantidad disminuye período por período.

function tablaDecaimiento(valorInicial, factor, periodos) {
  const tabla = [];

  for (let t = 0; t <= periodos; t++) {
    tabla.push({
      periodo: t,
      valor: valorInicial * factor ** t
    });
  }

  return tabla;
}

console.log(tablaDecaimiento(100, 0.8, 6));

36.7 Vida media

La vida media es el tiempo necesario para que una cantidad se reduzca a la mitad.

f(t) = valorInicial · 0.5ᵗ

Si el factor por período es 0.5, la cantidad se reduce a la mitad en cada período.

function vidaMedia(valorInicial, periodos) {
  return valorInicial * 0.5 ** periodos;
}

for (let t = 0; t <= 5; t++) {
  console.log(t, vidaMedia(100, t));
}

36.8 Retención de usuarios

Si una aplicación conserva un porcentaje fijo de usuarios cada mes, podemos modelar la retención con decaimiento exponencial.

function usuariosRetenidos(iniciales, retencionMensual, meses) {
  return Math.round(iniciales * retencionMensual ** meses);
}

console.log(usuariosRetenidos(10000, 0.9, 1));
console.log(usuariosRetenidos(10000, 0.9, 6));
console.log(usuariosRetenidos(10000, 0.9, 12));

36.9 Pérdida de energía

En una simulación, un objeto puede conservar solo una parte de su energía después de cada rebote o paso.

function energiaDespuesDeRebotes(energiaInicial, retencion, rebotes) {
  return energiaInicial * retencion ** rebotes;
}

console.log(energiaDespuesDeRebotes(100, 0.7, 1));
console.log(energiaDespuesDeRebotes(100, 0.7, 5));

36.10 Aproximación a cero

En el decaimiento exponencial, la cantidad se acerca cada vez más a cero, pero en el modelo ideal nunca llega exactamente a cero.

100 · 0.8ᵗ se acerca a 0 cuando t crece

En programación, muchas veces se define un umbral para considerar que el valor ya es suficientemente pequeño.

36.11 Usar un umbral

Podemos detener una simulación cuando el valor cae por debajo de cierto límite.

function periodosHastaUmbral(valorInicial, factor, umbral) {
  let valor = valorInicial;
  let periodos = 0;

  while (valor > umbral) {
    valor *= factor;
    periodos++;
  }

  return periodos;
}

console.log(periodosHastaUmbral(100, 0.8, 10));

36.12 Suavizado exponencial

Un uso frecuente en programación es mover un valor hacia un objetivo reduciendo la diferencia en cada paso.

nuevoValor = valorActual + (objetivo - valorActual) · factor
function acercar(valorActual, objetivo, factor) {
  return valorActual + (objetivo - valorActual) * factor;
}

let posicion = 0;

for (let paso = 1; paso <= 5; paso++) {
  posicion = acercar(posicion, 100, 0.25);
  console.log(paso, posicion);
}

La distancia al objetivo se reduce de forma exponencial.

36.13 Comparación con resta lineal

Una resta lineal reduce siempre la misma cantidad. El decaimiento exponencial reduce un porcentaje del valor actual.

Paso Resta lineal: -10 Decaimiento: ×0.8
0 100 100
1 90 80
2 80 64
3 70 51.2

36.14 Señales de decaimiento exponencial

Señal Interpretación
Se pierde un porcentaje fijo El factor está entre 0 y 1
La cantidad se reduce a la mitad cada cierto tiempo Hay vida media
La reducción absoluta se vuelve menor El ritmo disminuye con el tiempo
El valor se acerca a cero sin cruzarlo Modelo típico de decaimiento

36.15 Aplicaciones en programación

  • Retención de usuarios.
  • Pérdida de energía en simulaciones.
  • Suavizado de movimientos o cámaras.
  • Disminución de intensidad, volumen o brillo.
  • Modelos de enfriamiento o desgaste.

36.16 Errores comunes

  • Usar una resta fija cuando el problema pierde un porcentaje.
  • Confundir pérdida del 20% con factor 0.2; si se conserva el 80%, el factor es 0.8.
  • Esperar que el valor llegue exactamente a cero en el modelo ideal.
  • No usar un umbral en simulaciones numéricas.
  • Usar factores fuera del intervalo 0 < factor < 1.

36.17 Qué debes recordar de este tema

  • El decaimiento exponencial multiplica por un factor entre 0 y 1.
  • Una pérdida del p% usa el factor 1 - p, con p en forma decimal.
  • La cantidad disminuye rápido al comienzo y luego más lentamente.
  • La vida media indica cuánto tarda en reducirse a la mitad.
  • En simulaciones conviene usar umbrales para detener cálculos.
  • El suavizado exponencial reduce la distancia a un objetivo por porcentaje.

36.18 Conclusión

El decaimiento exponencial permite modelar procesos donde una cantidad pierde una proporción constante. Es muy útil en simulaciones, análisis de usuarios, energía, suavizado y sistemas que se aproximan gradualmente a un valor.

En el próximo tema veremos aplicaciones del crecimiento exponencial en distintos contextos de programación.