52. Funciones inversas

Una función inversa deshace el efecto de otra función: recupera la entrada original a partir de la salida.

52.1 Introducción

Una función inversa permite volver hacia atrás. Si una función transforma un valor de entrada en un valor de salida, su inversa intenta recuperar la entrada original.

En programación, esta idea aparece al deshacer cálculos, convertir unidades en ambos sentidos, mapear coordenadas, decodificar datos y revertir transformaciones.

52.2 Idea principal

Si una función f transforma x en y, su inversa transforma y nuevamente en x.

f(x) = y f⁻¹(y) = x

La notación f⁻¹ se lee “f inversa”. No significa elevar f a -1.

52.3 Ejemplo cotidiano

Si una función suma 10, su inversa resta 10. Una operación deshace a la otra.

function sumarDiez(x) {
  return x + 10;
}

function restarDiez(y) {
  return y - 10;
}

const salida = sumarDiez(25);
const original = restarDiez(salida);

console.log(salida);
console.log(original);

52.4 Verificación mediante composición

Una función y su inversa deben devolver el valor original cuando se componen.

f⁻¹(f(x)) = x f(f⁻¹(x)) = x

Esta propiedad conecta directamente el tema de funciones inversas con la composición de funciones.

52.5 Comprobar una inversa con código

Este ejemplo verifica que sumar 10 y luego restar 10 recupera el valor inicial.

function sumarDiez(x) {
  return x + 10;
}

function restarDiez(x) {
  return x - 10;
}

function comprobar(valor) {
  return restarDiez(sumarDiez(valor));
}

console.log(comprobar(5));
console.log(comprobar(100));

52.6 Inversa de una función lineal

Una función lineal simple puede invertirse deshaciendo las operaciones en orden inverso.

f(x) = 2x + 3 f⁻¹(x) = (x - 3) / 2

Primero se resta 3 y luego se divide por 2, porque esas operaciones deshacen sumar 3 y multiplicar por 2.

52.7 Función lineal e inversa en JavaScript

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

function inversaLineal(y) {
  return (y - 3) / 2;
}

const salida = lineal(7);
const entradaRecuperada = inversaLineal(salida);

console.log(salida);
console.log(entradaRecuperada);

52.8 El orden de las operaciones se invierte

Para construir una inversa, se deshacen las operaciones desde la última hacia la primera.

Función original Operaciones Inversa
2x + 3 Multiplicar por 2, sumar 3 Restar 3, dividir por 2
(x - 5) / 4 Restar 5, dividir por 4 Multiplicar por 4, sumar 5

52.9 No todas las funciones tienen inversa global

Para que una función tenga inversa como función, cada salida debe provenir de una sola entrada. Si dos entradas distintas producen la misma salida, no se puede recuperar una única entrada original.

f(x) = x² f(2) = 4 y f(-2) = 4

Si conocemos solo la salida 4, no sabemos si la entrada fue 2 o -2.

52.10 Ejemplo de ambigüedad

La función cuadrática pierde información sobre el signo de la entrada.

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

console.log(cuadratica(2));
console.log(cuadratica(-2));

const salida = 4;
console.log(Math.sqrt(salida));

La raíz cuadrada devuelve la raíz principal positiva, pero no recupera automáticamente todas las entradas posibles.

52.11 Funciones uno a uno

Una función es uno a uno cuando entradas diferentes producen salidas diferentes. Esa condición permite construir una inversa sin ambigüedad.

Función ¿Es uno a uno en todos los reales? Comentario
f(x) = 2x + 3 Cada salida corresponde a una sola entrada
f(x) = x² No x y -x producen la misma salida
f(x) = x³ Conserva el signo y el orden

52.12 Restringir el dominio

A veces una función que no tiene inversa global puede tener inversa si se limita su dominio.

f(x) = x² con dominio x ≥ 0 tiene inversa f⁻¹(x) = √x

Al limitar el dominio a valores no negativos, desaparece la ambigüedad entre x y -x.

52.13 Inversa con dominio restringido

Podemos controlar que la entrada pertenezca al dominio elegido.

function cuadraticaNoNegativa(x) {
  if (x < 0) {
    return "Fuera del dominio";
  }

  return x * x;
}

function inversaCuadraticaNoNegativa(y) {
  if (y < 0) {
    return "Fuera del dominio";
  }

  return Math.sqrt(y);
}

console.log(cuadraticaNoNegativa(5));
console.log(inversaCuadraticaNoNegativa(25));

52.14 Inversas en conversión de unidades

Las conversiones entre unidades suelen formar pares de funciones inversas.

function celsiusAFahrenheit(celsius) {
  return celsius * 9 / 5 + 32;
}

function fahrenheitACelsius(fahrenheit) {
  return (fahrenheit - 32) * 5 / 9;
}

const fahrenheit = celsiusAFahrenheit(25);
const celsius = fahrenheitACelsius(fahrenheit);

console.log(fahrenheit);
console.log(celsius);

52.15 Inversas al mapear rangos

Si convertimos un valor de un rango a otro, también podemos construir la conversión inversa.

function mapear(valor, entradaMin, entradaMax, salidaMin, salidaMax) {
  const proporcion = (valor - entradaMin) / (entradaMax - entradaMin);
  return salidaMin + proporcion * (salidaMax - salidaMin);
}

const pixel = mapear(50, 0, 100, 0, 400);
const valor = mapear(pixel, 0, 400, 0, 100);

console.log(pixel);
console.log(valor);

52.16 Inversas para coordenadas de pantalla

Cuando un programa dibuja coordenadas matemáticas en pantalla, a veces necesita hacer el camino inverso: convertir píxeles en coordenadas matemáticas.

function aPantalla(punto, origen, escala) {
  return {
    x: origen.x + punto.x * escala,
    y: origen.y - punto.y * escala
  };
}

function aMatematica(punto, origen, escala) {
  return {
    x: (punto.x - origen.x) / escala,
    y: (origen.y - punto.y) / escala
  };
}

const pantalla = aPantalla({ x: 2, y: 3 }, { x: 100, y: 100 }, 20);
console.log(pantalla);
console.log(aMatematica(pantalla, { x: 100, y: 100 }, 20));

52.17 Inversas y pérdida de información

Una transformación solo puede invertirse si no destruye información necesaria. Redondear, recortar o limitar valores puede impedir recuperar el dato original exacto.

function redondear(valor) {
  return Math.round(valor);
}

console.log(redondear(4.2));
console.log(redondear(4.4));
console.log(redondear(4.49));

Distintas entradas pueden producir la misma salida redondeada. Por eso el redondeo no tiene una inversa exacta.

52.18 Aplicaciones en programación

  • Convertir unidades en ambos sentidos.
  • Transformar coordenadas de pantalla a coordenadas matemáticas.
  • Deshacer operaciones aplicadas a datos.
  • Codificar y decodificar valores.
  • Construir controles donde el usuario modifica un valor transformado.
  • Verificar transformaciones mediante composición.

52.19 Errores comunes

  • Confundir f⁻¹ con dividir por f.
  • Suponer que toda función tiene inversa.
  • Olvidar que una función con salidas repetidas no permite recuperar una única entrada.
  • No considerar restricciones de dominio.
  • Intentar invertir transformaciones que perdieron información, como redondeos o recortes.

52.20 Qué debes recordar de este tema

  • Una función inversa deshace el efecto de una función original.
  • Si f(x) = y, entonces f⁻¹(y) = x.
  • Una función y su inversa se verifican mediante composición.
  • No todas las funciones tienen inversa global.
  • En programación, las inversas son útiles para conversiones, coordenadas y transformaciones reversibles.

52.21 Conclusión

Las funciones inversas permiten razonar sobre transformaciones reversibles. Entender cuándo se puede recuperar la entrada original es fundamental tanto en matemática como en programación, especialmente al trabajar con datos, gráficos y conversiones.