58. Intervalos de crecimiento

Un intervalo de crecimiento indica una zona del dominio donde la función aumenta al avanzar la entrada.

58.1 Introducción

Una función puede no ser creciente en todo su dominio, pero sí en ciertos intervalos. Identificar esos intervalos ayuda a describir su comportamiento con precisión.

En programación, detectar intervalos de crecimiento sirve para encontrar tendencias positivas, fases de mejora, subidas en datos y tramos ascendentes de una animación o simulación.

58.2 Qué es un intervalo de crecimiento

Un intervalo de crecimiento es una parte del dominio donde, al aumentar x, también aumenta el valor de la función.

Si x₁ < x₂ dentro del intervalo, entonces f(x₁) ≤ f(x₂)

Si siempre se cumple f(x₁) < f(x₂), se habla de crecimiento estricto.

58.3 Notación de intervalos

Los intervalos suelen escribirse usando paréntesis o corchetes.

Notación Significado
(a, b) Entre a y b, sin incluir extremos
[a, b] Entre a y b, incluyendo extremos
(a, ∞) Desde a hacia valores mayores
(-∞, b) Desde valores muy negativos hasta b

58.4 Ejemplo con función cuadrática

La función f(x) = x² decrece antes de x = 0 y crece después de x = 0.

f(x) = x² crece en (0, ∞)
function f(x) {
  return x * x;
}

for (let x = 0; x <= 5; x++) {
  console.log({ x, y: f(x) });
}

58.5 Ejemplo con una cuadrática desplazada

La función f(x) = (x - 2)² tiene su mínimo en x = 2. A partir de ese punto crece.

f(x) = (x - 2)² crece en (2, ∞)
function f(x) {
  return (x - 2) * (x - 2);
}

for (let x = 2; x <= 6; x++) {
  console.log({ x, y: f(x) });
}

58.6 Detectar crecimiento por diferencias

Con puntos muestreados, un tramo es creciente si el valor de salida aumenta entre un punto y el siguiente.

function detectarCrecimiento(puntos) {
  const tramos = [];

  for (let i = 1; i < puntos.length; i++) {
    const anterior = puntos[i - 1];
    const actual = puntos[i];

    if (actual.y > anterior.y) {
      tramos.push({ desde: anterior.x, hasta: actual.x });
    }
  }

  return tramos;
}

const puntos = [
  { x: 0, y: 4 },
  { x: 1, y: 1 },
  { x: 2, y: 0 },
  { x: 3, y: 1 },
  { x: 4, y: 4 }
];

console.log(detectarCrecimiento(puntos));

58.7 Generar puntos de una función

Para analizar una función con código, primero podemos generar puntos en un intervalo.

function generarPuntos(funcion, desde, hasta, paso) {
  const puntos = [];

  for (let x = desde; x <= hasta; x += paso) {
    puntos.push({ x, y: funcion(x) });
  }

  return puntos;
}

function f(x) {
  return (x - 2) * (x - 2);
}

console.log(generarPuntos(f, -1, 5, 1));

58.8 Unir tramos consecutivos

Si varios tramos crecientes aparecen uno detrás de otro, conviene unirlos para obtener un intervalo más claro.

function unirTramos(tramos) {
  if (tramos.length === 0) return [];

  const unidos = [tramos[0]];

  for (let i = 1; i < tramos.length; i++) {
    const ultimo = unidos[unidos.length - 1];
    const actual = tramos[i];

    if (actual.desde === ultimo.hasta) {
      ultimo.hasta = actual.hasta;
    } else {
      unidos.push(actual);
    }
  }

  return unidos;
}

const tramos = [
  { desde: 2, hasta: 3 },
  { desde: 3, hasta: 4 },
  { desde: 4, hasta: 5 }
];

console.log(unirTramos(tramos));

58.9 Detectar intervalos crecientes

Combinando detección y unión, podemos aproximar intervalos crecientes a partir de muestras.

function intervalosCrecientes(puntos) {
  const tramos = [];

  for (let i = 1; i < puntos.length; i++) {
    const anterior = puntos[i - 1];
    const actual = puntos[i];

    if (actual.y > anterior.y) {
      const ultimo = tramos[tramos.length - 1];

      if (ultimo && ultimo.hasta === anterior.x) {
        ultimo.hasta = actual.x;
      } else {
        tramos.push({ desde: anterior.x, hasta: actual.x });
      }
    }
  }

  return tramos;
}

const puntos = [
  { x: -1, y: 9 },
  { x: 0, y: 4 },
  { x: 1, y: 1 },
  { x: 2, y: 0 },
  { x: 3, y: 1 },
  { x: 4, y: 4 },
  { x: 5, y: 9 }
];

console.log(intervalosCrecientes(puntos));

58.10 Crecimiento estricto y no estricto

Si se permite que la función se mantenga igual, el crecimiento puede ser no estricto. Si se exige que suba siempre, es estricto.

Tipo Condición entre dos puntos
Creciente f(x₂) ≥ f(x₁)
Estrictamente creciente f(x₂) > f(x₁)

58.11 Detectar crecimiento no estricto

En una serie con valores repetidos, el crecimiento no estricto permite tramos constantes.

function esCrecienteNoEstricto(valores) {
  for (let i = 1; i < valores.length; i++) {
    if (valores[i] < valores[i - 1]) {
      return false;
    }
  }

  return true;
}

console.log(esCrecienteNoEstricto([1, 2, 2, 3]));
console.log(esCrecienteNoEstricto([1, 2, 1, 3]));

58.12 Intervalos y puntos críticos

Muchas funciones cambian de decreciente a creciente en un mínimo. El punto donde ocurre el cambio ayuda a separar intervalos.

Para f(x) = (x - 2)²: decrece antes de 2 crece después de 2

El punto x = 2 funciona como frontera entre intervalos.

58.13 Relación con la pendiente

Si la pendiente promedio entre puntos consecutivos es positiva, el tramo analizado es creciente.

function pendiente(p1, p2) {
  return (p2.y - p1.y) / (p2.x - p1.x);
}

const p1 = { x: 2, y: 0 };
const p2 = { x: 4, y: 4 };

const m = pendiente(p1, p2);

console.log(m);
console.log(m > 0 ? "tramo creciente" : "no creciente");

58.14 Intervalos en datos

Los mismos criterios pueden aplicarse a datos, por ejemplo ventas por semana.

const ventas = [
  { semana: 1, valor: 100 },
  { semana: 2, valor: 120 },
  { semana: 3, valor: 140 },
  { semana: 4, valor: 130 },
  { semana: 5, valor: 160 }
];

for (let i = 1; i < ventas.length; i++) {
  if (ventas[i].valor > ventas[i - 1].valor) {
    console.log(`Crece de semana ${ventas[i - 1].semana} a ${ventas[i].semana}`);
  }
}

58.15 Crecimiento y ruido

En datos reales puede haber pequeñas variaciones que no representan una tendencia real. Una tolerancia ayuda a ignorar cambios mínimos.

function clasificarCambio(anterior, actual, tolerancia) {
  const cambio = actual - anterior;

  if (cambio > tolerancia) return "crece";
  if (cambio < -tolerancia) return "decrece";
  return "estable";
}

console.log(clasificarCambio(100, 101, 2));
console.log(clasificarCambio(100, 105, 2));

58.16 Aplicación: detectar mejora

Si una métrica debe aumentar, los intervalos de crecimiento indican períodos de mejora.

function periodosDeMejora(metricas) {
  const periodos = [];

  for (let i = 1; i < metricas.length; i++) {
    if (metricas[i] > metricas[i - 1]) {
      periodos.push({ desde: i - 1, hasta: i });
    }
  }

  return periodos;
}

console.log(periodosDeMejora([50, 55, 60, 58, 62]));

58.17 Limitaciones del muestreo

Detectar intervalos por muestras es una aproximación. Si el paso es grande, pueden perderse cambios entre dos puntos.

Menor paso → más detalle Mayor paso → menos costo de cálculo

La elección depende del nivel de precisión que necesita el programa.

58.18 Aplicaciones en programación

  • Identificar tramos de mejora en métricas.
  • Detectar subidas en precios, ventas o tráfico.
  • Analizar fases ascendentes de una animación.
  • Encontrar intervalos donde una función se vuelve favorable.
  • Preparar gráficos resaltando zonas crecientes.

58.19 Errores comunes

  • Confundir un tramo creciente con crecimiento en todo el dominio.
  • Usar muestras demasiado separadas.
  • No ordenar los puntos por x antes de comparar.
  • Ignorar valores constantes cuando se trabaja con crecimiento no estricto.
  • No usar tolerancia cuando los datos tienen ruido.

58.20 Qué debes recordar de este tema

  • Un intervalo de crecimiento es una zona donde la función aumenta al avanzar x.
  • Los intervalos pueden detectarse comparando valores consecutivos.
  • Los puntos críticos suelen separar intervalos de comportamiento distinto.
  • El muestreo permite aproximar intervalos, pero depende del paso elegido.
  • En programación, estos intervalos ayudan a detectar tendencias positivas.

58.21 Conclusión

Los intervalos de crecimiento permiten describir con precisión dónde una función mejora, sube o avanza en sentido positivo. Esta idea es útil tanto para analizar gráficos matemáticos como para interpretar datos reales en programas.