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.
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.
Una forma común de escribir decaimiento exponencial es:
Para que sea decaimiento, el factor debe cumplir:
Si una cantidad pierde un porcentaje fijo en cada período, el factor se calcula como:
| 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 |
Si empezamos con 100 y conservamos el 80% en cada período:
| t | f(t) |
|---|---|
| 0 | 100 |
| 1 | 80 |
| 2 | 64 |
| 3 | 51.2 |
| 4 | 40.96 |
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));
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));
La vida media es el tiempo necesario para que una cantidad se reduzca a la mitad.
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));
}
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));
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));
En el decaimiento exponencial, la cantidad se acerca cada vez más a cero, pero en el modelo ideal nunca llega exactamente a cero.
En programación, muchas veces se define un umbral para considerar que el valor ya es suficientemente pequeño.
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));
Un uso frecuente en programación es mover un valor hacia un objetivo reduciendo la diferencia en cada paso.
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.
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 |
| 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 |
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.