El crecimiento exponencial ocurre cuando una cantidad se multiplica por un factor mayor que 1 en cada paso. Al principio puede parecer lento, pero luego crece muy rápido.
El crecimiento exponencial aparece cuando el aumento depende del valor actual. En lugar de sumar siempre la misma cantidad, multiplicamos por un factor constante.
Este comportamiento aparece en interés compuesto, crecimiento de poblaciones, expansión de usuarios, progresión de dificultad y cualquier proceso que crece por porcentaje.
Una forma común de escribir crecimiento exponencial es:
Si el factor es mayor que 1, la función crece.
Si una cantidad crece un porcentaje fijo en cada período, el factor se calcula como:
Por ejemplo, un crecimiento del 20% tiene factor 1.2.
| Porcentaje | Factor | Interpretación |
|---|---|---|
| 5% | 1.05 | Se conserva el 100% y se agrega 5% |
| 20% | 1.20 | Se conserva el 100% y se agrega 20% |
| 100% | 2.00 | El valor se duplica |
Si empezamos con 100 y crecemos un 20% por período:
| t | f(t) |
|---|---|
| 0 | 100 |
| 1 | 120 |
| 2 | 144 |
| 3 | 172.8 |
El aumento absoluto crece: primero aumenta 20, luego 24, luego 28.8.
Podemos implementar la fórmula directamente.
function crecimiento(valorInicial, porcentaje, periodos) {
const factor = 1 + porcentaje;
return valorInicial * factor ** periodos;
}
console.log(crecimiento(100, 0.2, 0));
console.log(crecimiento(100, 0.2, 1));
console.log(crecimiento(100, 0.2, 3));
Para observar el crecimiento período por período podemos generar una tabla.
function tablaCrecimiento(valorInicial, porcentaje, periodos) {
const factor = 1 + porcentaje;
const tabla = [];
for (let t = 0; t <= periodos; t++) {
tabla.push({
periodo: t,
valor: valorInicial * factor ** t
});
}
return tabla;
}
console.log(tablaCrecimiento(100, 0.2, 5));
El crecimiento lineal suma una cantidad constante. El crecimiento exponencial multiplica por un factor constante.
function comparar(periodos) {
const filas = [];
for (let t = 0; t <= periodos; t++) {
filas.push({
periodo: t,
lineal: 100 + 20 * t,
exponencial: 100 * 1.2 ** t
});
}
return filas;
}
console.log(comparar(8));
Al comienzo los valores pueden parecer cercanos, pero con el tiempo la diferencia aumenta.
Cuando el factor es 2, el valor se duplica en cada período.
Esto genera crecimiento muy rápido.
function duplicacion(valorInicial, periodos) {
return valorInicial * 2 ** periodos;
}
for (let t = 0; t <= 10; t++) {
console.log(t, duplicacion(1, t));
}
Si una cantidad crece a una tasa porcentual constante, podemos estimar cuántos períodos necesita para duplicarse.
Esta regla usa el porcentaje escrito como número entero. Por ejemplo, para 10%, el tiempo de duplicación aproximado es 70 / 10 = 7 períodos.
function tiempoDuplicacionAproximado(porcentajeEntero) {
return 70 / porcentajeEntero;
}
console.log(tiempoDuplicacionAproximado(10));
console.log(tiempoDuplicacionAproximado(5));
El interés compuesto es crecimiento exponencial porque cada período se calcula sobre el monto acumulado.
function montoCompuesto(capital, tasa, anios) {
return capital * (1 + tasa) ** anios;
}
console.log(montoCompuesto(1000, 0.08, 1));
console.log(montoCompuesto(1000, 0.08, 10));
Una aplicación puede crecer por porcentaje mensual. Aunque el porcentaje sea constante, el aumento absoluto se vuelve cada vez mayor.
function usuariosEstimados(iniciales, crecimientoMensual, meses) {
return Math.round(iniciales * (1 + crecimientoMensual) ** meses);
}
console.log(usuariosEstimados(1000, 0.15, 1));
console.log(usuariosEstimados(1000, 0.15, 6));
console.log(usuariosEstimados(1000, 0.15, 12));
En videojuegos, el crecimiento exponencial puede usarse con cuidado para aumentar recompensas, costos o dificultad.
function costoMejora(nivel) {
const costoBase = 100;
const factor = 1.25;
return Math.round(costoBase * factor ** (nivel - 1));
}
for (let nivel = 1; nivel <= 8; nivel++) {
console.log(nivel, costoMejora(nivel));
}
Factores demasiado grandes pueden volver el sistema difícil de equilibrar.
En software, a veces conviene limitar un crecimiento exponencial para evitar valores demasiado grandes.
function crecimientoLimitado(valorInicial, factor, periodos, maximo) {
const valor = valorInicial * factor ** periodos;
return Math.min(valor, maximo);
}
console.log(crecimientoLimitado(100, 1.5, 5, 1000));
console.log(crecimientoLimitado(100, 1.5, 10, 1000));
| Señal | Interpretación |
|---|---|
| El aumento es porcentual | Conviene pensar en factor multiplicativo |
| El valor se duplica cada cierto tiempo | Es un patrón exponencial |
| El aumento absoluto crece | El ritmo no es lineal |
| El valor actual afecta el aumento siguiente | El crecimiento depende del acumulado |
El crecimiento exponencial describe procesos donde el valor se multiplica por un factor constante. Es poderoso, pero también puede producir valores enormes en pocos pasos.
En el próximo tema veremos el caso contrario: decaimiento exponencial, donde la cantidad se reduce por un factor constante.