30. Funciones cuadráticas

Una función cuadrática incluye una variable elevada al cuadrado. Su gráfico es una parábola y permite modelar trayectorias, áreas, máximos, mínimos y problemas donde el cambio no es constante.

30.1 Introducción

Las funciones lineales tienen cambio constante y se representan con rectas. Las funciones cuadráticas tienen un término con y se representan con parábolas.

En programación aparecen al simular trayectorias, calcular movimientos con aceleración, optimizar áreas, generar curvas y resolver ecuaciones de segundo grado.

La forma general de una función cuadrática es f(x) = ax² + bx + c, donde a no puede ser cero.

30.2 Forma general

Una función cuadrática se escribe de esta manera:

f(x) = ax² + bx + c

Los valores a, b y c son coeficientes. El coeficiente a determina la apertura y orientación de la parábola.

function cuadratica(x, a, b, c) {
  return a * x ** 2 + b * x + c;
}

console.log(cuadratica(2, 1, 3, 1));

30.3 El papel del coeficiente a

Si a es positivo, la parábola abre hacia arriba. Si a es negativo, abre hacia abajo.

function f1(x) {
  return x ** 2;
}

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

console.log(f1(-2), f1(0), f1(2));
console.log(f2(-2), f2(0), f2(2));

La primera función tiene un mínimo. La segunda tiene un máximo.

30.4 Tabla de valores

Una tabla de valores ayuda a observar la forma de la parábola.

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

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

La salida es simétrica: f(-2) y f(2) tienen el mismo valor.

30.5 Parábola

El gráfico de una función cuadrática es una parábola. Puede abrir hacia arriba o hacia abajo según el signo de a.

Valor de a Forma Tipo de extremo
a > 0 Abre hacia arriba Mínimo
a < 0 Abre hacia abajo Máximo

30.6 Vértice

El vértice es el punto más bajo o más alto de la parábola. Para f(x) = ax² + bx + c, la coordenada x del vértice es:

xV = -b / (2a)

Luego evaluamos la función en xV para obtener yV.

function cuadratica(x, a, b, c) {
  return a * x ** 2 + b * x + c;
}

function vertice(a, b, c) {
  const x = -b / (2 * a);
  const y = cuadratica(x, a, b, c);
  return { x: x, y: y };
}

console.log(vertice(1, -4, 3));

30.7 Raíces o ceros de la función

Las raíces son los valores de x para los cuales f(x) = 0. En el gráfico, son los puntos donde la parábola corta el eje x.

ax² + bx + c = 0

Para encontrarlas usamos la fórmula cuadrática.

x = (-b ± √(b² - 4ac)) / (2a)

30.8 Discriminante

El discriminante es la parte dentro de la raíz en la fórmula cuadrática.

discriminante = b² - 4ac

El discriminante indica cuántas raíces reales tiene la función.

Discriminante Raíces reales
Mayor que 0 Dos raíces reales
Igual a 0 Una raíz real doble
Menor que 0 No hay raíces reales
function discriminante(a, b, c) {
  return b ** 2 - 4 * a * c;
}

console.log(discriminante(1, -5, 6));
console.log(discriminante(1, 2, 1));
console.log(discriminante(1, 0, 4));

30.9 Calcular raíces reales

Podemos escribir una función que calcule las raíces reales y maneje los distintos casos del discriminante.

function raices(a, b, c) {
  const d = b ** 2 - 4 * a * c;

  if (d < 0) {
    return "No hay raíces reales";
  }

  if (d === 0) {
    return [ -b / (2 * a) ];
  }

  return [
    (-b + Math.sqrt(d)) / (2 * a),
    (-b - Math.sqrt(d)) / (2 * a)
  ];
}

console.log(raices(1, -5, 6));
console.log(raices(1, 2, 1));
console.log(raices(1, 0, 4));

30.10 Validar que sea cuadrática

Para que una función sea cuadrática, el coeficiente a debe ser distinto de cero. Si a = 0, la función deja de ser cuadrática y pasa a ser lineal.

function esCuadratica(a) {
  return a !== 0;
}

console.log(esCuadratica(1));
console.log(esCuadratica(0));

30.11 Aplicación: trayectoria vertical simple

Una trayectoria con aceleración constante puede modelarse con una expresión cuadrática. Por ejemplo, una altura que cambia con el tiempo:

altura = alturaInicial + velocidadInicial × tiempo - 0.5 × gravedad × tiempo²
function altura(tiempo) {
  const alturaInicial = 0;
  const velocidadInicial = 20;
  const gravedad = 9.8;

  return alturaInicial + velocidadInicial * tiempo - 0.5 * gravedad * tiempo ** 2;
}

console.log(altura(0));
console.log(altura(1));
console.log(altura(2));
console.log(altura(3));

La altura sube al principio y luego baja por el efecto de la gravedad.

30.12 Aplicación: área con perímetro fijo

Algunos problemas de optimización producen funciones cuadráticas. Por ejemplo, el área de un rectángulo con perímetro fijo depende de una variable de forma cuadrática.

function areaRectanguloConPerimetro(perimetro, ancho) {
  const alto = perimetro / 2 - ancho;
  return ancho * alto;
}

console.log(areaRectanguloConPerimetro(20, 2));
console.log(areaRectanguloConPerimetro(20, 5));
console.log(areaRectanguloConPerimetro(20, 8));

El área crece hasta cierto punto y luego decrece.

30.13 Comparación con una función lineal

En una función lineal el cambio es constante. En una cuadrática, el cambio entre salidas consecutivas no es constante.

function lineal(x) {
  return 2 * x + 1;
}

function cuadratica(x) {
  return x ** 2;
}

for (let x = 0; x <= 4; x++) {
  console.log({
    x: x,
    lineal: lineal(x),
    cuadratica: cuadratica(x)
  });
}

30.14 Errores comunes

  • Olvidar que a no puede ser cero en una función cuadrática.
  • Confundir x * 2 con x ** 2.
  • Omitir paréntesis en la fórmula cuadrática.
  • Intentar calcular raíces reales cuando el discriminante es negativo.
  • Confundir el vértice con una raíz.
  • Asumir que el cambio en una función cuadrática es constante.
const x = 5;

console.log(x * 2);
console.log(x ** 2);

30.15 Qué debes recordar de este tema

  • Una función cuadrática tiene la forma f(x) = ax² + bx + c.
  • El coeficiente a debe ser distinto de cero.
  • El gráfico de una función cuadrática es una parábola.
  • Si a es positivo, la parábola abre hacia arriba; si es negativo, abre hacia abajo.
  • El vértice se calcula usando xV = -b / (2a).
  • Las raíces se obtienen resolviendo ax² + bx + c = 0.
  • El discriminante indica cuántas raíces reales existen.

30.16 Conclusión

Las funciones cuadráticas permiten modelar relaciones donde el cambio no es constante. Son importantes para entender curvas, trayectorias, máximos, mínimos y problemas de optimización.

En el próximo tema compararemos crecimiento lineal y crecimiento exponencial, dos formas distintas de evolución de valores.