53. Obtención de la función inversa

Obtener una función inversa consiste en despejar la entrada original a partir de la salida y verificar que el camino de vuelta funciona.

53.1 Introducción

En el tema anterior vimos que una función inversa deshace el efecto de una función original. Ahora veremos cómo obtenerla paso a paso.

El procedimiento combina una idea algebraica, despejar la variable, con una idea computacional: verificar que la transformación puede recorrerse en ambos sentidos.

53.2 Procedimiento general

Para obtener una función inversa a partir de una expresión, se puede seguir este proceso.

1. Escribir y = f(x) 2. Intercambiar x e y 3. Despejar y 4. Escribir f⁻¹(x) 5. Verificar con composición

53.3 Ejemplo lineal simple

Tomemos la función:

f(x) = 2x + 6

Primero escribimos y = 2x + 6. Luego intercambiamos las variables:

x = 2y + 6

53.4 Despejar la variable

Ahora se despeja y.

x = 2y + 6 x - 6 = 2y (x - 6) / 2 = y

Entonces la inversa es:

f⁻¹(x) = (x - 6) / 2

53.5 Implementación en JavaScript

La función original y su inversa pueden implementarse directamente.

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

function inversa(y) {
  return (y - 6) / 2;
}

const salida = f(10);
const entrada = inversa(salida);

console.log(salida);
console.log(entrada);

53.6 Verificación por composición

Una inversa correcta debe recuperar el valor inicial cuando se compone con la función original.

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

function inversa(x) {
  return (x - 6) / 2;
}

console.log(inversa(f(0)));
console.log(inversa(f(5)));
console.log(f(inversa(20)));

53.7 Otro ejemplo lineal

Para la función:

f(x) = 5x - 4

El despeje queda así:

y = 5x - 4 x = 5y - 4 x + 4 = 5y y = (x + 4) / 5

53.8 Código del segundo ejemplo

function f(x) {
  return 5 * x - 4;
}

function inversa(x) {
  return (x + 4) / 5;
}

for (let valor = 0; valor <= 3; valor++) {
  console.log({
    valor,
    salida: f(valor),
    recuperado: inversa(f(valor))
  });
}

53.9 Funciones con varias operaciones

Cuando una función tiene varias operaciones, la inversa las deshace en orden contrario.

f(x) = (x - 3) / 4

La función original primero resta 3 y luego divide por 4. La inversa primero multiplica por 4 y luego suma 3.

f⁻¹(x) = 4x + 3

53.10 Invertir operaciones en código

function original(x) {
  return (x - 3) / 4;
}

function inversa(y) {
  return y * 4 + 3;
}

const salida = original(19);

console.log(salida);
console.log(inversa(salida));

53.11 Tabla de operaciones inversas

Operación original Operación inversa Ejemplo
Sumar k Restar k x + 5 → x - 5
Restar k Sumar k x - 5 → x + 5
Multiplicar por k Dividir por k 3x → x / 3
Dividir por k Multiplicar por k x / 3 → 3x
Elevar al cuadrado Raíz cuadrada con restricción x² → √x

53.12 Inversa de una función cuadrática restringida

La función f(x) = x² no tiene inversa global en todos los reales. Pero si restringimos el dominio a x ≥ 0, su inversa es la raíz cuadrada.

f(x) = x², x ≥ 0 f⁻¹(x) = √x

53.13 Código con restricción

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

  return x * x;
}

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

  return Math.sqrt(y);
}

console.log(cuadraticaRestringida(6));
console.log(inversaCuadratica(36));

53.14 Inversa de una función cúbica

La función cúbica f(x) = x³ sí conserva el signo y es uno a uno en todos los reales.

f(x) = x³ f⁻¹(x) = ∛x

En JavaScript se puede usar Math.cbrt para calcular la raíz cúbica.

53.15 Código con raíz cúbica

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

function inversaCubica(y) {
  return Math.cbrt(y);
}

console.log(cubica(3));
console.log(inversaCubica(27));
console.log(inversaCubica(-8));

53.16 Inversa de una función exponencial

La inversa de una función exponencial es una función logarítmica.

f(x) = 2ˣ f⁻¹(x) = log₂(x)

Como JavaScript tiene logaritmo natural, se puede usar cambio de base.

53.17 Código con exponencial y logaritmo

function exponencialBase2(x) {
  return Math.pow(2, x);
}

function logBase2(y) {
  return Math.log(y) / Math.log(2);
}

const salida = exponencialBase2(5);

console.log(salida);
console.log(logBase2(salida));

53.18 Verificar con tolerancia

Al trabajar con decimales, puede haber pequeñas diferencias por precisión numérica. Conviene comparar con una tolerancia.

function casiIguales(a, b, tolerancia) {
  return Math.abs(a - b) < tolerancia;
}

function f(x) {
  return Math.pow(2, x);
}

function inversa(y) {
  return Math.log(y) / Math.log(2);
}

const original = 7;
const recuperado = inversa(f(original));

console.log(recuperado);
console.log(casiIguales(original, recuperado, 0.000001));

53.19 Obtener inversas para conversiones

En conversiones de unidades, el mismo método de deshacer operaciones permite escribir la función inversa.

function metrosAPixeles(metros) {
  return metros * 40 + 100;
}

function pixelesAMetros(pixeles) {
  return (pixeles - 100) / 40;
}

const pixel = metrosAPixeles(3);

console.log(pixel);
console.log(pixelesAMetros(pixel));

53.20 Checklist para obtener una inversa

  • Verificar si la función es uno a uno o si necesita restricción de dominio.
  • Escribir la función como y = f(x).
  • Intercambiar x e y.
  • Despejar y.
  • Escribir la expresión como f⁻¹(x).
  • Comprobar que la composición recupera el valor original.

53.21 Aplicaciones en programación

  • Crear conversiones reversibles entre unidades.
  • Traducir coordenadas de mundo a pantalla y de pantalla a mundo.
  • Deshacer transformaciones de datos.
  • Verificar funciones de codificación y decodificación.
  • Construir herramientas interactivas donde el usuario modifica el resultado y se recupera la entrada.

53.22 Errores comunes

  • No intercambiar las variables antes de despejar.
  • Deshacer las operaciones en el mismo orden en vez de hacerlo en orden inverso.
  • Olvidar restricciones de dominio en funciones como x².
  • No verificar la inversa mediante composición.
  • Comparar decimales con igualdad exacta cuando hay logaritmos o raíces.

53.23 Qué debes recordar de este tema

  • Obtener una inversa consiste en despejar la entrada original desde la salida.
  • El procedimiento típico intercambia x e y y luego despeja y.
  • Las operaciones se deshacen en orden inverso.
  • Algunas funciones requieren restringir el dominio para tener inversa.
  • La composición permite verificar si la inversa es correcta.

53.24 Conclusión

Obtener una función inversa es una herramienta clave para trabajar con transformaciones reversibles. En programación, el mismo razonamiento permite diseñar conversiones confiables, recuperar valores originales y comprobar que los cálculos no pierden información innecesariamente.