38. Funciones logarítmicas

Una función logarítmica responde a la pregunta: ¿a qué exponente hay que elevar una base para obtener cierto valor?

38.1 Introducción

Las funciones logarítmicas están directamente relacionadas con las funciones exponenciales. Si una exponencial calcula el resultado de elevar una base a un exponente, un logaritmo permite recuperar ese exponente.

En programación se usan para escalas, análisis de crecimiento, compresión de rangos, medición de complejidad y cálculo de cuántos pasos multiplicativos hacen falta para alcanzar un valor.

38.2 Definición

El logaritmo en base b de un número x se escribe:

log_b(x)

Y responde a esta pregunta:

bʸ = x entonces log_b(x) = y

38.3 Ejemplos básicos

Expresión Porque... Resultado
log₂(8) 2³ = 8 3
log₁₀(1000) 10³ = 1000 3
log₃(81) 3⁴ = 81 4

38.4 Relación con exponenciales

La función logarítmica es la inversa de la función exponencial con la misma base.

si y = bˣ entonces x = log_b(y)

Esto permite resolver problemas donde la incógnita está en el exponente.

38.5 Dominio de una función logarítmica

En los números reales, el logaritmo solo está definido para entradas positivas.

f(x) = log_b(x) dominio: x > 0

No existe logaritmo real de cero ni de números negativos.

38.6 Logaritmos en JavaScript

JavaScript incluye varias funciones para calcular logaritmos.

Función Base Uso
Math.log(x) e Logaritmo natural
Math.log10(x) 10 Logaritmo decimal
Math.log2(x) 2 Logaritmo binario

38.7 Ejemplos en JavaScript

console.log(Math.log10(1000));
console.log(Math.log2(8));
console.log(Math.log(Math.E));

38.8 Evaluación segura

Antes de calcular un logaritmo, conviene validar que la entrada sea positiva.

function log10Seguro(x) {
  if (x <= 0) {
    return null;
  }

  return Math.log10(x);
}

console.log(log10Seguro(100));
console.log(log10Seguro(0));
console.log(log10Seguro(-5));

38.9 Cambio de base

Si JavaScript no tiene directamente la base que necesitamos, podemos usar la fórmula de cambio de base.

log_b(x) = log(x) / log(b)
function logBase(x, base) {
  if (x <= 0 || base <= 0 || base === 1) {
    return null;
  }

  return Math.log(x) / Math.log(base);
}

console.log(logBase(81, 3));
console.log(logBase(32, 2));
console.log(logBase(1000, 10));

38.10 Encontrar cantidad de duplicaciones

Si un valor se duplica en cada paso, podemos usar logaritmo base 2 para saber cuántas duplicaciones hacen falta.

pasos = log₂(valorFinal / valorInicial)
function duplicacionesNecesarias(inicial, final) {
  return Math.log2(final / inicial);
}

console.log(duplicacionesNecesarias(1, 8));
console.log(duplicacionesNecesarias(100, 800));

38.11 Encontrar períodos de crecimiento

Si una cantidad crece por un factor fijo, el logaritmo permite calcular cuántos períodos se necesitan para alcanzar una meta.

períodos = log(meta / inicial) / log(factor)
function periodosParaMeta(inicial, factor, meta) {
  if (inicial <= 0 || factor <= 1 || meta <= inicial) {
    return 0;
  }

  return Math.ceil(Math.log(meta / inicial) / Math.log(factor));
}

console.log(periodosParaMeta(1000, 1.15, 5000));

38.12 Escalas logarítmicas

Los logaritmos ayudan a representar valores que varían en rangos muy grandes. En lugar de mostrar el valor directamente, mostramos su logaritmo.

x log₁₀(x)
10 1
100 2
1000 3
1000000 6

38.13 Comprimir rangos con logaritmos

Si un valor puede variar desde unidades hasta millones, el logaritmo permite llevarlo a una escala más manejable.

function escalaLogaritmica(valor) {
  if (valor <= 0) {
    return null;
  }

  return Math.log10(valor);
}

console.log(escalaLogaritmica(10));
console.log(escalaLogaritmica(1000));
console.log(escalaLogaritmica(1000000));

38.14 Forma del gráfico

La función logarítmica crece cada vez más lento. Aumenta mucho al comienzo, pero luego necesita entradas cada vez mayores para seguir aumentando.

log₁₀(10) = 1 log₁₀(100) = 2 log₁₀(1000) = 3

Multiplicar la entrada por 10 aumenta el logaritmo decimal en 1.

38.15 Aplicaciones en programación

  • Calcular cuántos pasos multiplicativos hacen falta para alcanzar una meta.
  • Comprimir rangos muy grandes de valores.
  • Trabajar con escalas como decibeles o magnitudes.
  • Analizar complejidad algorítmica, como O(log n).
  • Transformar datos con crecimiento exponencial para analizarlos mejor.

38.16 Errores comunes

  • Intentar calcular logaritmos reales de cero o números negativos.
  • Confundir Math.log con logaritmo decimal; en JavaScript es logaritmo natural.
  • Olvidar validar la base al usar cambio de base.
  • Usar base 1, que no define una función logarítmica válida.
  • Olvidar que el logaritmo responde a una pregunta sobre exponentes.

38.17 Qué debes recordar de este tema

  • Un logaritmo pregunta a qué exponente hay que elevar una base.
  • La función logarítmica es inversa de la función exponencial.
  • El dominio real de log_b(x) es x > 0.
  • En JavaScript, Math.log usa base e.
  • Math.log10 usa base 10 y Math.log2 usa base 2.
  • El cambio de base permite calcular logaritmos en cualquier base válida.

38.18 Conclusión

Las funciones logarítmicas permiten analizar procesos exponenciales desde el punto de vista inverso: en lugar de calcular el resultado de una potencia, calculan el exponente necesario.

En el próximo tema veremos propiedades de los logaritmos, que permiten simplificar expresiones y transformar productos, cocientes y potencias.