curriculum.yaml, content/ y los motores ejecutablesEste manual es un artefacto generado. Se reconstruye con python scripts/build_manual.py a partir de tres fuentes: el currículo (curriculum.yaml), el contenido pedagógico (content/) y los 18 motores ejecutables, cuyas demostraciones se ejecutan durante la generación para extraer sus salidas reales.
Cada clase incluye su concepto, sus fórmulas, sus fundamentos, un ejemplo numérico trabajado, las salidas que devuelve su laboratorio, los errores conceptuales frecuentes y sus referencias. Los apartados que no aparecen en una clase concreta son los que todavía no están redactados: el manual no rellena huecos con texto genérico.
Estado del contenido pedagógico: 360 de 360 clases redactadas (100.0 %), 18 de 18 partes con resumen extendido y 489 términos de glosario.
Límites declarados. Un manual educativo no sustituye una carrera ni supervisión académica. Las derivaciones se orientan a comprensión computacional; la profundidad formal completa exige los textos citados en cada parte. Los motores son legibles, no rápidos, y no deben usarse en producción.
Reconstruye la aritmética y el lenguaje matemático básico con el rigor que exige escribir código: cada número tiene dominio, unidad y representación.
Esta parte no enseña «matemática básica»: reconstruye la aritmética con el nivel de precisión que exige escribir código que otra persona ejecutará. La diferencia es real. En la escuela, 1/3 = 0.33 es una respuesta aceptable; en un programa, esa igualdad es falsa y su error se propaga a todo lo que venga después.
El hilo conductor son tres preguntas que se repetirán en las 360 clases del programa:
1. ¿Qué es este número? Un natural, un entero, un racional exacto o una aproximación decimal no son el mismo objeto, aunque se escriban parecido y la calculadora los mezcle sin avisar. 2. ¿En qué unidad y en qué escala vive? Un 15 sin unidad no es una cantidad: es una cadena de dígitos. Casi todo error de modelado empieza aquí. 3. ¿Cómo sé que el resultado es correcto? Un cálculo sin verificación independiente es una conjetura con formato de respuesta.
La proporcionalidad es el eje del bloque central (clases 006 a 007). Es la primera función lineal que aprendemos sin llamarla así, y reaparece literalmente en cada capa densa de una red neuronal: y = kx es el caso unidimensional de y = Wx. Quien no distingue una proporcionalidad directa de una inversa tampoco distinguirá después una relación lineal de una recíproca en un modelo.
El bloque de potencias, raíces y notación científica (008 a 011) construye el vocabulario para hablar de órdenes de magnitud. En IA esa competencia es cotidiana: un modelo de 7·10⁹ parámetros y otro de 7·10¹¹ no se diferencian en «tamaño», se diferencian en dos órdenes de magnitud, y esa es la unidad en la que se razona sobre coste, memoria y tiempo de entrenamiento.
El cierre (013 a 019) instala los hábitos que separan un cálculo de una afirmación: redondear como decisión declarada, estimar antes de calcular, traducir un enunciado a ecuaciones y —sobre todo— buscar el contraejemplo antes que la confirmación. La clase 019 demuestra una conjetura que resiste 40 verificaciones consecutivas y cae en la cuadragésima primera: es la lección más importante de toda la parte.
Nada de esto requiere talento matemático previo. Requiere aceptar que la precisión no es pedantería: es la única forma de que un resultado siga siendo cierto cuando lo ejecuta otra máquina, otro día, con otros datos.
Toda métrica de un modelo (accuracy, loss, learning rate) es una razón, un porcentaje o una escala. Interpretarlas mal es el primer error de un practicante de IA.
| Término | Definición | Clase |
|---|---|---|
| Cifra significativa | Dígito que aporta información sobre la precisión de una medida. Los ceros a la izquierda no cuentan. | 013 |
| Contraejemplo | Caso concreto que satisface la hipótesis y viola la conclusión. Un solo contraejemplo refuta una afirmación universal. | 019 |
| Desarrollo periódico | Decimal que repite indefinidamente un bloque de dígitos. Señala que la fracción no tiene forma decimal finita. | 004 |
| Estimación de Fermi | Aproximación por órdenes de magnitud usando descomposición en factores estimables. Sirve para detectar resultados absurdos. | 014 |
| Exponente | Número de veces que la base se multiplica por sí misma. Extendido a enteros negativos y fracciones por continuidad de las leyes. | 008 |
| Factor unitario | Cociente igual a 1 entre dos expresiones de la misma cantidad en unidades distintas. Multiplicar por él convierte sin alterar el valor. | 012 |
| Incógnita | Símbolo que representa un valor concreto pero desconocido, determinado por las restricciones del problema. | 015 |
| Número natural | Entero no negativo usado para contar objetos discretos. No admite división exacta general. | 001 |
| Número racional | Cociente exacto de dos enteros con denominador no nulo. Su desarrollo decimal es finito o periódico. | 003 |
| Orden de magnitud | Exponente de la potencia de 10 más cercana. Permite comparar cantidades que difieren en varios factores de 10. | 011 |
| Parámetro | Símbolo que representa un valor fijo pero no especificado. Distinto de la incógnita: no se despeja, se elige. | 016 |
| Precedencia | Orden en que se aplican las operaciones de una expresión. La potenciación asocia por la derecha. | 010 |
| Progresión aritmética | Sucesión con diferencia constante entre términos consecutivos. | 017 |
| Progresión geométrica | Sucesión con razón constante entre términos consecutivos. Modela crecimiento exponencial discreto. | 017 |
| Proporcionalidad directa | Relación en la que el cociente y/x permanece constante. Su gráfica es una recta que pasa por el origen. | 007 |
| Proporcionalidad inversa | Relación en la que el producto x·y permanece constante. Su gráfica es una hipérbola. | 007 |
| Punto porcentual | Diferencia absoluta entre dos porcentajes. Pasar del 10 % al 12 % son 2 puntos porcentuales, no un 2 % de aumento. | 005 |
| Radical | Raíz n-ésima, equivalente al exponente fraccionario 1/n. Su dominio real depende de la paridad del índice. | 009 |
| Razón | Cociente entre dos cantidades. Si las unidades difieren, la razón es una tasa y conserva unidad (km/h). | 006 |
| Redondeo bancario | Regla que redondea el caso 0.5 al par más cercano, para que el sesgo acumulado tienda a cero. | 013 |
| Valor absoluto | Distancia de un número al cero. Siempre no negativo y simétrico: |a−b| = |b−a|. | 002 |
Contar es establecer una biyección entre un conjunto y un tramo inicial de los naturales.
1 + 2 + ... + n = n(n+1)/2
|{1, 2, ..., n}| = nContar parece trivial hasta que se intenta programar. Cuando decimos que un conjunto tiene 7 elementos, estamos afirmando que existe una correspondencia uno a uno entre ese conjunto y {1,2,3,4,5,6,7}. Esa definición —debida a la construcción de los naturales que formalizaron Peano y Dedekind a finales del siglo XIX— es la que permite contar cosas que no se pueden señalar con el dedo: las combinaciones posibles de una contraseña, los caminos en un grafo, los estados de un programa.
La suma de los primeros n naturales ilustra la diferencia entre contar y calcular. Sumar uno a uno cuesta n operaciones; la fórmula cerrada cuesta tres, independientemente de n. El argumento clásico —atribuido a Gauss siendo niño, aunque la anécdota es probablemente apócrifa— consiste en emparejar el primer término con el último, el segundo con el penúltimo, y observar que cada pareja suma n+1 y que hay n/2 parejas.
Esta distinción reaparece durante todo el programa. En la parte 04 se llamará «complejidad algorítmica»; en la parte 11, «coste de un método numérico». Aquí es simplemente la observación de que dos procedimientos correctos pueden diferir en cuántas operaciones necesitan, y que esa diferencia importa cuando n es grande.
Un detalle que el laboratorio comprueba: la fórmula cerrada y la suma iterativa dan exactamente el mismo entero. Con enteros de Python esto es cierto siempre. En la parte 01 veremos que con números en punto flotante la coincidencia deja de estar garantizada, y por qué.
Sumar los enteros de 1 a 100.
Iterativo: 1 + 2 + 3 + ... + 100 → 100 sumas
Emparejado: (1+100) + (2+99) + ... → 50 parejas de 101
50 · 101 = 5050
Cerrado: n(n+1)/2 = 100·101/2 = 5050 → 3 operacionesVerificación cruzada: ambos caminos deben dar 5050. Si no coinciden, uno de los dos está mal implementado. Esa comprobación —dos caminos independientes al mismo resultado— es el patrón de verificación que se usará en todo el programa.
Conteo, suma de Gauss y verificación cerrada frente a iterativa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | n, suma_iterativa, suma_formula_cerrada, operaciones_iterativas, operaciones_formula |
| Comprobaciones (1) | coinciden |
compmath run 001Toda estimación de coste computacional empieza por un conteo. El número de comparaciones de un algoritmo de ordenación, el número de parejas en un producto cartesiano y el número de operaciones de una multiplicación de matrices son sumas de este tipo. En la parte 04 el conteo se vuelve combinatoria; en la 09, probabilidad.
9780387967875 verificado en International ISBN Agency (2026-08-20).9788131708415 verificado en International ISBN Agency (2026-08-19).El signo indica dirección en la recta numérica; el valor absoluto indica distancia.
|x| = x si x ≥ 0, −x si x < 0
d(a, b) = |a − b| = |b − a|Los enteros negativos tardaron siglos en aceptarse. Hasta el siglo XVII se los llamaba «números absurdos» porque no se podía tener −3 ovejas. La aceptación llegó cuando se dejó de exigir que un número representara una cantidad y se admitió que podía representar una posición relativa a un origen: temperatura respecto al punto de congelación, saldo respecto a cero, desplazamiento respecto a un punto de partida.
Esa lectura resuelve de golpe la regla de los signos, que de otro modo hay que memorizar. Multiplicar por −1 es «dar media vuelta» en la recta. Dar media vuelta dos veces deja el sentido original: (−1)·(−1) = +1. No es una convención arbitraria: es la única definición que mantiene válida la propiedad distributiva.
El valor absoluto separa dos preguntas que el signo mezcla: cuánto y hacia dónde. La distancia |a − b| es simétrica por construcción, y esa simetría es lo que la convierte en una distancia en el sentido matemático. En la parte 05 esa misma idea se generaliza a vectores como la norma, y en la parte 03 aparece como distancia euclídea. El valor absoluto es la norma de dimensión 1.
Conviene notar desde ya una asimetría que la parte 01 explotará: en un entero de ancho fijo con complemento a dos, hay un negativo más que positivos, y por eso abs(-128) desborda en un int8. El valor absoluto no siempre es representable.
Distancia entre las posiciones −7 y 4 en la recta.
a = −7, b = 4
a − b = −11 → dirección: de b hacia a se retrocede
|a − b| = 11 → distancia
b − a = 11
|b − a| = 11 → misma distancia, simetría verificadaCon signos: el producto de los signos de a y b es (−1)·(+1) = −1, lo que indica que están en semirrectas opuestas respecto al origen. Esa lectura —el signo del producto como indicador de posición relativa— es la que se usará en la clase 222 (bisección) para decidir en qué mitad del intervalo está la raíz.
Signo, valor absoluto y distancia en la recta numérica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | a, b, distancia_|a-b|, distancia_|b-a|, producto_de_signos, opuesto_de_a |
| Comprobaciones (1) | simetrica |
compmath run 002El error absoluto de la parte 01, la norma L1 de la parte 05, la pérdida MAE de la parte 15 y el criterio de cambio de signo de la bisección (clase 222) son todos el mismo objeto. Cualquier función de pérdida robusta a valores atípicos se construye sobre valor absoluto en lugar de sobre cuadrados.
10.1007/978-1-4612-0335-5, pendiente de resolver.9780387967875 verificado en International ISBN Agency (2026-08-20).Un racional es un cociente exacto de enteros; un decimal es casi siempre una aproximación suya.
a/b + c/d = (ad + bc)/(bd)
a/b = c/d ⟺ ad = bcLos racionales existen porque los enteros no están cerrados bajo división: 1 dividido entre 3 no es un entero. La construcción formal define un racional como una clase de equivalencia de pares de enteros (a, b) con b ≠ 0, donde (a,b) ~ (c,d) si ad = bc. Por eso 2/4 y 1/2 son el mismo número escrito de dos formas.
La consecuencia práctica es la que importa aquí: la fracción es el objeto exacto y el decimal es su sombra. Fraction(1,3) guarda dos enteros y responde con exactitud a cualquier operación; 0.3333 guarda una aproximación y arrastra un error que se acumula. Python distingue las dos cosas: fractions.Fraction implementa la aritmética exacta, y float la aproximada.
El laboratorio de esta clase muestra el caso mínimo donde la diferencia se ve: 1/3 + 1/6 es exactamente 1/2 en aritmética racional, y en punto flotante da un número que parece 0.5 pero cuya igualdad con 0.5 depende de detalles de representación. Aquí conviene resistir la tentación de concluir «los floats están rotos»: no lo están; simplemente no son racionales exactos, y la parte 01 explica por qué.
Un criterio útil para decidir qué usar: si el resultado se va a comparar con ==, o si representa dinero, o si va a alimentar cientos de miles de operaciones encadenadas, la aritmética exacta paga su coste. Si el resultado se va a graficar o alimentar un modelo estadístico, el float es suficiente y mucho más rápido.
Sumar un tercio y un sexto por los dos caminos.
Exacto: 1/3 + 1/6 = 2/6 + 1/6 = 3/6 = 1/2
denominador reducido: 2
¿es igual a 1/2? Sí, por construcción.
Flotante: 0.3333333333333333 + 0.16666666666666666
= 0.5 (aparentemente)
¿es igual a 0.5? depende del redondeo de cada sumandoLa lección no es que un camino sea correcto y el otro incorrecto: es que responden preguntas distintas. El exacto responde «¿cuál es el número?»; el flotante responde «¿cuál es el número representable más cercano?».
Un tercio exacto frente a un tercio en punto flotante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | 1/3 + 1/6 float, error_absoluto, denominador_reducido |
| Comprobaciones (2) | es_igual_a_1/2_exacto, es_igual_a_0.5_float |
compmath run 003Cualquier cálculo con dinero, con probabilidades exactas o con proporciones de inventario. En la parte 01 (clase 038) la aritmética racional exacta se usa para medir cuánto error acumula la aritmética flotante: la fracción actúa como patrón de referencia contra el que se mide.
fractions — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).10.1007/978-1-4612-0335-5, pendiente de resolver.El desarrollo decimal de una fracción es finito o periódico, y qué caso ocurre depende solo del denominador.
a/b tiene desarrollo finito ⟺ b (reducido) solo tiene factores 2 y 5
0.abcabc... = abc/999Toda fracción tiene desarrollo decimal finito o periódico; nunca uno infinito sin patrón. La razón es de conteo puro: al dividir por b, los restos posibles son 0, 1, ..., b−1. Si aparece el resto 0, el desarrollo termina. Si no, en a lo sumo b pasos algún resto se repite —hay más pasos que restos posibles— y desde ahí el desarrollo se repite. Es el principio del palomar (clase 090) aplicado antes de haberlo enunciado.
Cuál de los dos casos ocurre depende únicamente de los factores primos del denominador reducido. Nuestro sistema decimal es base 10 = 2·5, así que solo las fracciones cuyo denominador se factoriza en potencias de 2 y 5 tienen desarrollo finito: 3/8 sí (8 = 2³), 1/7 no (7 no divide ninguna potencia de 10).
Esta observación es la clave para entender la parte 01. En base 2, los denominadores «buenos» son solo las potencias de 2. Y 1/10 —que en decimal es finito y trivial— no lo es en binario. De ahí que 0.1 no sea representable exactamente en un float, que es exactamente el asunto de la clase 029. La rareza no está en la máquina: está en que cambiar de base cambia qué fracciones son «redondas».
El camino inverso —de periódico a fracción— usa una identidad limpia: el periodo de longitud k se escribe sobre k nueves. 0.142857142857... = 142857/999999, que simplificado es exactamente 1/7.
Clasificar dos fracciones y reconstruir una desde su periodo.
3/8: 8 = 2³ → solo factores 2 → finito
3/8 = 0.375
1/7: 7 primo ≠ 2, 5 → periódico
1/7 = 0.142857 142857 142857...
periodo = "142857", longitud 6
Reconstrucción: 142857/999999
= 142857/999999 (dividir num. y den. por 142857)
= 1/7 ✓La longitud del periodo de 1/7 es 6 = 7−1. No es casualidad: está relacionada con el orden multiplicativo de 10 módulo 7, tema de la clase 098.
Fracciones con desarrollo decimal finito y periódico.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | 3/8 |
| Comprobaciones (2) | 3/8_es_finito, coincide_con_1/7 |
compmath run 004Explica por qué los sistemas financieros trabajan en centavos enteros o con Decimal, y por qué un total de factura calculado en float puede diferir en un céntimo del calculado a mano. Es el prerrequisito directo de las clases 029 y 037.
decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780199219865 verificado en International ISBN Agency (2026-08-19).Un porcentaje es una razón con denominador 100; los cambios porcentuales se componen multiplicando, no sumando.
x % de A = A · x/100
aumento de p % seguido de descuento de p %: A · (1+p)(1−p) = A(1 − p²)El error más caro con porcentajes no es de cálculo, es de composición. Un aumento del 20 % seguido de un descuento del 20 % no devuelve el precio original: devuelve el 96 % de él. La razón es que los dos porcentajes se aplican a bases distintas —el segundo se aplica sobre el precio ya aumentado— y por eso los cambios relativos se componen multiplicando factores, no sumando tasas.
El factor es la herramienta correcta: aumentar un 20 % es multiplicar por 1.20; descontar un 20 % es multiplicar por 0.80. Encadenar cambios es multiplicar factores, y el orden no altera el resultado porque la multiplicación es conmutativa. Lo que sí cambia es cuál es el descuento que revierte exactamente un aumento: para deshacer un ×1.20 hace falta un ×1/1.20, es decir un descuento del 16.67 %, no del 20 %.
La segunda confusión frecuente es entre punto porcentual y porcentaje. Si una tasa de conversión pasa del 10 % al 12 %, ha subido 2 puntos porcentuales, que es un aumento relativo del 20 %. Ambas cifras son correctas y describen cosas distintas; publicar una sin decir cuál es se usa habitualmente para exagerar resultados. La clase 219 (A/B testing) retoma exactamente esta distinción.
Para dinero, esta clase usa Decimal deliberadamente. Los porcentajes producen divisiones por 100 que en binario no son exactas, y el descuadre por redondeo al repartir un total es un fenómeno real que el capstone de la parte hace visible.
Un producto de 1000 sube un 20 % y luego baja un 20 %.
Precio inicial 1000
Tras +20 %: 1000 × 1.20 = 1200
Tras −20 %: 1200 × 0.80 = 960
Variación neta: 960/1000 − 1 = −4 % (= −p² con p = 0.20)
¿Qué descuento revierte exactamente el +20 %?
1 − 1/1.20 = 0.1667 → 16.67 %
1200 × (1 − 0.1667) = 1000 ✓Aumento y descuento sucesivos: el orden no cambia, la reversión sí.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | precio_inicial, tras_+20%, tras_-20%, variacion_neta_%, descuento_que_revierte_+20% |
| Comprobaciones (1) | vuelve_al_inicial |
compmath run 005Interés compuesto (parte 07), tasas de conversión y lift en experimentos (clase 219), y cualquier métrica relativa de un modelo. Un «20 % de mejora» sin base declarada es una afirmación incompleta.
decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780387967875 verificado en International ISBN Agency (2026-08-20).Una razón compara dos cantidades por cociente; si las unidades difieren, es una tasa y conserva unidad.
razón = a/b (adimensional si a y b comparten unidad)
tasa = cantidad/unidad de referencia (km/h, €/kg, tokens/s)La distinción entre razón y tasa parece terminológica y es operativa. Una razón entre dos cantidades de la misma unidad —tres manzanas por cada dos peras— es adimensional: su valor no cambia si se mide en docenas en lugar de en unidades. Una tasa relaciona unidades distintas y conserva la unidad en el resultado: 80 km/h no es «80», es 80 kilómetros por cada hora.
Arrastrar la unidad no es formalismo escolar: es el mecanismo de verificación más barato que existe. Si un cálculo produce «kilómetros por hora al cuadrado» donde se esperaba una velocidad, hay un error de modelado, y se detecta sin comprobar ni un solo número. La clase 012 sistematiza esta idea como análisis dimensional.
Las tasas se componen por multiplicación de factores unitarios, y esa composición es la que permite responder preguntas sin fórmulas memorizadas. Si una tarea consume 3 GB por hora y hay 5 tareas, el consumo es 15 GB/h; el tiempo hasta llenar 120 GB es 120 GB ÷ 15 GB/h = 8 h, donde los GB se cancelan y queda la unidad correcta.
En IA las tasas están por todas partes y casi nunca se declaran con unidad completa: «tokens por segundo», «muestras por época», «FLOPs por parámetro», «coste por millón de tokens». Comparar dos modelos por una tasa cuyo denominador difiere es el error de benchmarking más común.
Un vehículo recorre 240 km en 3 horas.
Tasa: 240 km / 3 h = 80 km/h (unidad: km/h, no adimensional)
¿Cuánto tarda en recorrer 400 km a esa tasa?
400 km ÷ 80 km/h = 5 h
↑ los km se cancelan, queda h ✓
Razón (misma unidad): 240 km / 400 km = 0.6 → adimensionalComprobación por unidades: si el resultado hubiera salido en km²/h, sabríamos que multiplicamos donde había que dividir, sin necesidad de revisar la aritmética.
Razón, tasa y proporción con unidades explícitas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | distancia_km, tiempo_h, razon_km_por_h, tiempo_para_400km_h |
| Comprobaciones (1) | razon_es_adimensional |
compmath run 006Throughput y latencia de un sistema, coste por inferencia, tasa de aprendizaje (que es una tasa: cuánto se mueve el parámetro por unidad de gradiente) y cualquier métrica normalizada de la parte 10.
En la proporcionalidad directa el cociente es constante; en la inversa lo es el producto.
directa: y/x = k ⟹ y = kx
inversa: x·y = k ⟹ y = k/x
producto cruzado: a/b = c/d ⟺ ad = bcLa «regla de tres» se enseña como una receta y por eso se aplica mal: se usa la directa donde corresponde la inversa. El criterio para decidir no es el enunciado sino la pregunta ¿qué permanece constante?. Si al duplicar x se duplica y, lo constante es el cociente y hay proporcionalidad directa. Si al duplicar x se reduce y a la mitad, lo constante es el producto y la proporcionalidad es inversa.
Casos típicos de cada una: el precio total frente a la cantidad comprada es directo (más unidades, proporcionalmente más precio). El tiempo de una obra frente al número de trabajadores es inverso (más trabajadores, proporcionalmente menos tiempo), bajo el supuesto —rara vez cierto en la práctica— de que los trabajadores no se estorban. Declarar ese supuesto es parte del modelado.
La proporcionalidad directa es la primera función lineal del programa. y = kx es una recta por el origen, y su generalización a varias variables, y = Wx, es exactamente lo que hace una capa densa de una red neuronal (clase 110). Quien internaliza aquí que «k es cuánto cambia y por cada unidad de x» ya tiene la intuición correcta de lo que es un peso en un modelo lineal.
Una advertencia que el programa repetirá: la proporcionalidad es un modelo, no una ley. Casi ninguna relación real es proporcional en todo su rango. El precio por unidad baja con el volumen, el rendimiento por trabajador cae con el tamaño del equipo, y el error de un modelo no baja proporcionalmente con los datos. Usar la regla de tres fuera de su rango de validez es el error de modelado más frecuente.
Si 4 unidades cuestan 10, ¿cuánto cuestan 6?
Directa (precio ∝ cantidad):
10/4 = x/6 → x = 10·6/4 = 15
comprobación cruzada: 4·15 = 60 = 10·6 ✓
Si en cambio el problema fuera: 4 trabajadores tardan 10 días,
¿cuánto tardan 6?
Inversa (tiempo ∝ 1/trabajadores):
4·10 = 6·x → x = 40/6 = 6.67 días
comprobación: el producto se conserva, 40 = 40 ✓El mismo par de números da 15 o 6.67 según el tipo de proporcionalidad. Elegir mal no produce un error pequeño: produce una respuesta sin relación con la pregunta.
Proporcionalidad directa e inversa comparadas sobre el mismo dato.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | proporcion_directa, proporcion_inversa |
| Comprobaciones (2) | producto_cruzado_directa, producto_constante_inversa |
compmath run 007Escalado de recursos, conversión de unidades, ajuste de recetas y presupuestos. En IA es el modelo mental correcto para el learning rate y para leer una ley de escala, cuya forma es una proporcionalidad en escala logarítmica (clase 359).
9780691164076 verificado en International ISBN Agency (2026-08-19).Las leyes de exponentes se derivan de contar factores, y su extensión a exponentes negativos y cero es la única que las conserva.
aᵐ · aⁿ = aᵐ⁺ⁿ
(aᵐ)ⁿ = aᵐⁿ
a⁰ = 1 (a ≠ 0), a⁻ⁿ = 1/aⁿCon exponentes naturales, las leyes son literalmente contar: a³·a² es (a·a·a)·(a·a), cinco factores, luego a⁵. Nada que memorizar. Lo interesante ocurre al extender la definición fuera de los naturales, porque ahí ya no hay «número de factores» que contar.
La extensión no es arbitraria: se elige la única que mantiene las leyes válidas. Si queremos que aᵐ·aⁿ = aᵐ⁺ⁿ siga siendo cierto con n = 0, entonces aᵐ·a⁰ = aᵐ, y por tanto a⁰ debe ser 1. Con el mismo argumento, aⁿ·a⁻ⁿ = a⁰ = 1 obliga a definir a⁻ⁿ = 1/aⁿ. Este patrón —extender una definición preservando las propiedades estructurales— es cómo funciona buena parte de la matemática, y reaparecerá en la clase 009 con los exponentes fraccionarios.
El caso 0⁰ queda genuinamente indefinido: los dos argumentos naturales (a⁰ = 1 y 0ⁿ = 0) apuntan a valores distintos. En análisis se toma convencionalmente 0⁰ = 1 porque hace que las series de potencias funcionen sin caso especial, y Python devuelve 1; conviene saber que es un convenio, no un teorema.
La ley que más se confunde es la de la potencia iterada. (aᵐ)ⁿ = aᵐⁿ pero a^(mⁿ) es otra cosa completamente distinta, y la potenciación asocia por la derecha: 232 es 2(32) = 2⁹ = 512, no (2³)² = 64. La clase 010 vuelve sobre esto.
Verificar las leyes con a = 2, m = 5, n = 3.
Producto: 2⁵ · 2³ = 32 · 8 = 256
2⁵⁺³ = 2⁸ = 256 ✓
Potencia: (2⁵)³ = 32³ = 32768
2⁵ˑ³ = 2¹⁵ = 32768 ✓
Extensión: 2⁰ = 1
2⁻³ = 1/8 = 0.125
2³ · 2⁻³ = 8 · 0.125 = 1 = 2⁰ ✓Cada igualdad es una comprobación independiente. Si alguna fallara, la implementación —no la matemática— tendría un error.
Leyes de exponentes verificadas numéricamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | a^m * a^n, a^(m+n), (a^m)^n, a^(m*n), a^0, a^-n |
| Comprobaciones (2) | ley_producto_ok, ley_potencia_ok |
compmath run 008Complejidad exponencial (parte 04), crecimiento compuesto (parte 02), tamaño del espacio de búsqueda de una contraseña (clase 087) y el conteo de parámetros de un modelo. La escala logarítmica de la clase 011 es la inversa de esta.
10.1007/978-1-4612-0335-5, pendiente de resolver.10.48550/arxiv.math/9205211 verificado en DataCite (2026-08-19).La raíz n-ésima es el exponente 1/n, y su dominio real depende de la paridad del índice.
ⁿ√a = a^(1/n)
(ⁿ√a)ⁿ = a para a ≥ 0
√(a²) = |a|, no aDefinir la raíz como exponente fraccionario es la extensión natural de la clase 008: si (a^(1/n))ⁿ = a^(n/n) = a, entonces a^(1/n) es precisamente el número que elevado a n devuelve a. La notación de radical y la de exponente describen el mismo objeto, y la segunda es la que se generaliza sin esfuerzo a exponentes reales.
El dominio depende de la paridad del índice, y esta es la fuente de confusión más común. Con índice impar, todo real tiene raíz real única: la raíz cúbica de −8 es −2. Con índice par, los negativos no tienen raíz real, porque ningún real elevado a una potencia par da negativo. Ahí es donde aparecen los números complejos, que el programa usa desde la parte 13 (transformada de Fourier).
La identidad √(x²) = |x| sorprende hasta que se piensa en el dominio: la raíz cuadrada devuelve por convenio la rama no negativa, así que √((−3)²) = √9 = 3, no −3. Olvidarlo produce errores de signo silenciosos al despejar en una ecuación cuadrática, tema de la clase 048.
Numéricamente hay un detalle que la parte 01 explota: √2 no es representable en punto flotante, así que (√2)² no devuelve exactamente 2. El error es minúsculo pero real, y comprobarlo aquí prepara el terreno para el concepto de error de redondeo.
Ida y vuelta con la raíz cuadrada de 2.
√2 = 1.4142135623730951 (float64, no exacto)
2**0.5 = 1.4142135623730951 (misma cosa)
(√2)² = 2.0000000000000004
error = 4.44e-16 ≈ 2 ulp
Raíz cúbica de −8: índice impar → −2 en los reales
Raíz cuadrada de −8: índice par → no existe en ℝEl error de 4.44·10⁻¹⁶ no es un fallo: es el tamaño del hueco entre floats cerca de 2. La clase 031 le pondrá nombre (ULP).
Raíces como exponentes fraccionarios y su dominio real.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | sqrt(2), 2**0.5, cuadrado_de_la_raiz, error_del_roundtrip, raiz_cubica_de_-8 |
| Comprobaciones (1) | coinciden |
compmath run 009La norma euclídea (clase 104) es una raíz cuadrada; la desviación estándar (clase 190) también; el factor 1/√d de la atención escalada (clase 325) es una raíz cuya justificación es de varianza.
math.isqrt y aritmética de raíces — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780387967875 verificado en International ISBN Agency (2026-08-20).La precedencia y la asociatividad determinan qué expresión representa una cadena de símbolos.
orden: paréntesis → potencias → producto/división → suma/resta
la potenciación asocia por la derecha: a**b**c = a**(b**c)
−a**n = −(aⁿ)Una expresión escrita en una línea es una notación comprimida de un árbol. 2+3*4 no es ambiguo para una máquina porque las reglas de precedencia determinan un único árbol: la multiplicación se agrupa antes que la suma. La ambigüedad está solo en la cabeza de quien lee sin conocer las reglas.
Dos reglas concentran casi todos los errores. La primera es la asociatividad de la potenciación por la derecha: 232 es 2(32) = 2⁹ = 512. Es la convención matemática estándar y la que implementan Python, R y las calculadoras científicas; algunas hojas de cálculo hacen lo contrario, lo que produce discrepancias reales entre un cuaderno y un script.
La segunda es que el signo menos unario tiene menor precedencia que la potenciación: −3**2 es −(3²) = −9, no (−3)² = 9. Este error aparece constantemente al trasladar una fórmula de un paper a código, y no produce una excepción: produce un número con el signo equivocado.
La conclusión práctica no es memorizar la tabla completa, sino adoptar un hábito: poner paréntesis donde la lectura no sea inmediata. Los paréntesis redundantes no cuestan nada en tiempo de ejecución y eliminan una clase entera de errores. En una fórmula que otra persona va a auditar, la claridad vale más que la brevedad.
Cuatro expresiones que se leen mal con frecuencia.
2 + 3 * 4 = 2 + 12 = 14 (no 20)
(2 + 3) * 4 = 5 * 4 = 20
2 ** 3 ** 2 = 2 ** 9 = 512 (asocia por la derecha)
(2 ** 3) ** 2 = 8 ** 2 = 64
-3 ** 2 = -(3²) = -9 (el menos va después)
(-3) ** 2 = 9Escribir (2 3) 2 cuando se quiere decir eso no es redundancia: es documentación ejecutable.
Precedencia y asociatividad: dos lecturas de la misma cadena.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | 2+3*4, (2+3)*4, 2**3**2 (asocia derecha), (2**3)**2, -3**2, (-3)**2 |
| Comprobaciones (0) | — |
compmath run 010Trasladar fórmulas de un paper a código sin cambiar su significado. Es la causa número uno de discrepancias al reproducir un resultado publicado.
10.48550/arxiv.math/9205211 verificado en DataCite (2026-08-19).La notación científica separa la magnitud (exponente) de la precisión (mantisa).
x = m · 10ᵉ con 1 ≤ |m| < 10
orden de magnitud = ⌊log₁₀|x|⌋La notación científica no es una forma abreviada de escribir números grandes: es una descomposición que separa dos informaciones independientes. La mantisa dice qué dígitos conocemos —es decir, cuánta precisión tenemos— y el exponente dice en qué escala estamos. Esa separación es exactamente la que usa el formato IEEE 754 en base 2, tema central de la clase 028.
Razonar por órdenes de magnitud es una habilidad, no un atajo. Decir que un modelo tiene «siete mil millones de parámetros» y otro «setecientos mil millones» invita a compararlos como si la diferencia fuera de grado; decir 7·10⁹ frente a 7·10¹¹ deja claro que hay un factor 100 de diferencia, con el coste de memoria y cómputo que eso implica.
Dos números del mismo orden de magnitud son comparables; dos que difieren en tres órdenes casi nunca lo son en la práctica, porque el factor 1000 suele cambiar qué solución es viable. Este criterio es el que se usa en la clase 014 para validar una estimación: si la estimación y el cálculo exacto comparten orden de magnitud, la estimación cumplió su función.
Al escribir código, conviene usar la notación de Python (1.2e-9) en lugar de contar ceros. 0.0000000012 y 0.000000012 son visualmente casi idénticos y difieren en un factor 10; 1.2e-9 y 1.2e-8 no se confunden.
Descomponer 0.00000012345.
valor = 1.2345e-7
exponente = ⌊log₁₀(1.2345e-7)⌋ = −7
mantisa = 1.2345e-7 / 10⁻⁷ = 1.2345
condición 1 ≤ 1.2345 < 10 ✓
reconstruido = 1.2345 × 10⁻⁷ = 0.00000012345 ✓
Orden de magnitud: −7Comparación por órdenes: 7·10⁹ frente a 7·10¹¹ → dos órdenes de diferencia, factor 100. No es «un poco más grande»: es otra categoría de problema.
Mantisa, exponente y orden de magnitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | valor, mantisa, exponente, reconstruido, orden_de_magnitud |
| Comprobaciones (0) | — |
compmath run 011Presupuestos de cómputo, tamaños de modelo, tolerancias numéricas y cualquier comparación entre cantidades de escalas distintas. Es la base de la representación en punto flotante (clase 028).
10.1145/103162.103163 verificado en Crossref (2026-08-19).Convertir unidades es multiplicar por factores iguales a 1; las unidades se cancelan como factores algebraicos.
1 = 1000 m / 1 km = 1 h / 3600 s
[velocidad] = L·T⁻¹El análisis dimensional trata las unidades como objetos algebraicos que se multiplican y se cancelan. Un factor unitario es un cociente entre dos expresiones de la misma cantidad —1000 m / 1 km— cuyo valor es exactamente 1, de modo que multiplicar por él cambia la unidad sin cambiar la cantidad. Encadenar factores unitarios convierte cualquier unidad en cualquier otra sin memorizar fórmulas.
La verdadera potencia del método no es convertir, es verificar. Antes de comprobar un solo número, el análisis dimensional detecta si una fórmula es imposible: una ecuación que iguala metros con segundos está mal, y eso se ve sin calculadora. En física esta comprobación es rutina; en modelado de datos se omite casi siempre, y de ahí salen features que mezclan escalas incompatibles.
El desastre más citado —la pérdida del Mars Climate Orbiter en 1999, donde un sistema trabajaba en libras-fuerza·segundo y otro en newton·segundo— es el ejemplo canónico de que declarar la unidad no es una formalidad. Ningún número estaba mal calculado; la interfaz entre dos sistemas no declaraba unidad.
En machine learning aparece disfrazado: estandarizar features es, en el fondo, convertirlas todas a una unidad común (desviaciones estándar) para que una distancia euclídea tenga sentido. La clase 288 muestra cómo cambia una predicción de k-NN si una variable se mide en una escala 100 veces mayor.
Convertir 90 km/h a m/s encadenando factores unitarios.
90 km 1000 m 1 h 90 · 1000
----- × ------ × ------ = ----------- m/s = 25 m/s
1 h 1 km 3600 s 3600
Cancelaciones: km/km = 1, h/h = 1 → quedan m/s ✓
Vuelta: 25 m/s × 3600 s/h × 1 km/1000 m = 90 km/h ✓
Atajo verificado: dividir entre 3.6Si el resultado hubiera salido en km²/h², el error estaría en la estructura del cálculo, no en la aritmética.
Conversión de unidades como multiplicación por factores unitarios.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | velocidad_km/h, velocidad_m/s, vuelta_a_km/h |
| Comprobaciones (1) | consistente |
compmath run 012Interfaces entre sistemas, física computacional, y el preprocesado de datos: la estandarización de la parte 14 es análisis dimensional aplicado a estadística.
Redondear es una decisión de modelado con regla declarada, no un accidente de la calculadora.
half-even (bancario): 0.5 → 0, 1.5 → 2, 2.5 → 2
half-up (aritmético): 0.5 → 1, 1.5 → 2, 2.5 → 3Cuando el valor a redondear cae exactamente en la mitad, hay que elegir hacia dónde va, y las dos elecciones habituales tienen consecuencias estadísticas distintas. El redondeo aritmético (half-up) siempre sube, y por tanto introduce un sesgo positivo que se acumula al sumar muchos valores. El redondeo bancario (half-even) manda al par más cercano, con lo que los casos intermedios se reparten y el sesgo tiende a cero.
Por eso el estándar IEEE 754 fija half-even como modo por defecto, y por eso la función round de Python hace lo mismo: round(0.5) devuelve 0, no 1. Quien espera el comportamiento escolar lo interpreta como un bug; es la elección correcta para cadenas largas de cálculos.
Las cifras significativas son el otro lado de la misma moneda: dicen cuánta información contiene el número, no cuántos dígitos se imprimen. Un valor medido como 2.50 comunica precisión de centésimas; escrito como 2.5 comunica precisión de décimas; escrito como 2.500000 comunica una precisión que probablemente no se tiene. Reportar más dígitos de los que la medida soporta es una forma de exagerar la certeza.
La regla práctica del programa: redondear al final, nunca en pasos intermedios, y declarar siempre la regla usada. Redondear intermedio destruye información que ya no se recupera, y es una causa habitual de que dos implementaciones «iguales» devuelvan totales distintos.
Redondear los cuatro casos intermedios y medir el sesgo.
valores 0.5 1.5 2.5 3.5 suma original = 8.0
half-even 0 2 2 4 suma = 8 → sesgo 0.0
half-up 1 2 3 4 suma = 10 → sesgo +2.0
round() Python 0 2 2 4 (half-even)Con cuatro valores el sesgo de half-up ya es de 2 unidades. Sobre un millón de importes, el descuadre es sistemático y siempre en la misma dirección.
Redondeo bancario frente a redondeo aritmético.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | sesgo_half_even, sesgo_half_up |
| Comprobaciones (0) | — |
compmath run 013Contabilidad, reparto de totales, informes de métricas y cualquier agregación de muchos valores redondeados. Es prerrequisito directo del capstone de esta parte y de la clase 034 (propagación de errores)."
decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Estimar por órdenes de magnitud detecta resultados absurdos antes de invertir esfuerzo en calcularlos.
error relativo = |estimado − exacto| / |exacto|
mismo orden de magnitud ⟺ ⌊log₁₀ a⌋ = ⌊log₁₀ b⌋La estimación no compite con el cálculo exacto: lo protege. Antes de ejecutar una operación cara —o de aceptar el número que devuelve— conviene tener una expectativa del orden de magnitud del resultado. Si el cálculo devuelve algo tres órdenes por encima de la expectativa, hay un error en alguna parte y se busca antes de seguir.
El método de Fermi consiste en descomponer una cantidad difícil en factores que sí se pueden estimar, aceptando que cada factor tendrá error. La clave es que los errores tienden a compensarse: si algunos factores se sobreestiman y otros se subestiman, el producto queda cerca. Enrico Fermi es célebre por haber estimado la potencia de la primera prueba nuclear soltando papelitos y midiendo su desplazamiento.
Redondear a la potencia de 10 más cercana antes de multiplicar convierte cualquier producto en una suma de exponentes, que se hace mentalmente. 4873 × 297 es aproximadamente 5·10³ × 3·10²= 15·10⁵ = 1.5·10⁶, y el valor exacto es 1447281: mismo orden de magnitud, error relativo del 3.6 %. Para decidir si un enfoque es viable, esa precisión sobra.
En la práctica profesional esta habilidad se usa para descartar rápido: si un cálculo de coste de entrenamiento da tres órdenes de magnitud por encima del presupuesto, no hace falta refinarlo. La estimación no responde «cuánto», responde «¿es siquiera posible?».
Estimar 4873 × 297 antes de calcularlo.
Estimación: 4873 ≈ 5000 = 5·10³
297 ≈ 300 = 3·10²
producto ≈ 15·10⁵ = 1.5·10⁶
Exacto: 4873 × 297 = 1 447 281 ≈ 1.45·10⁶
Error relativo = |1.5e6 − 1.447e6| / 1.447e6 = 3.6 %
Mismo orden de magnitud (10⁶) ✓Si el cálculo hubiera devuelto 1.4·10⁵ o 1.4·10⁷, la estimación habría detectado el error de inmediato.
Estimación por orden de magnitud contra el cálculo exacto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | exacto, estimado, error_relativo_% |
| Comprobaciones (1) | mismo_orden_de_magnitud |
compmath run 014Dimensionar infraestructura, validar la salida de un modelo, revisar un presupuesto y detectar errores de unidad. En entrevistas técnicas es una competencia evaluada explícitamente."
9780691129495 verificado en International ISBN Agency (2026-08-19).9780691164076 verificado en International ISBN Agency (2026-08-19).Una incógnita es un valor concreto pero desconocido; las restricciones del problema lo determinan.
ax + b = c ⟹ x = (c − b)/a, a ≠ 0
residuo = a·x + b − c (debe ser 0)Introducir una letra para lo que no se conoce es el paso que convierte un acertijo en un problema resoluble. Antes de al-Juarismi —cuyo tratado del siglo IX da nombre al álgebra y al algoritmo— los problemas se resolvían con recetas verbales específicas para cada caso. La letra permite escribir la relación antes de conocer el valor, y luego manipularla mecánicamente.
Conviene distinguir tres papeles que juegan las letras, porque se confunden a menudo: la incógnita tiene un valor concreto que hay que despejar; el parámetro es fijo pero no especificado (la a de ax + b); y la variable recorre un conjunto de valores (la x de una función). Un mismo símbolo puede cambiar de papel según el contexto, y no darse cuenta produce confusiones reales en la parte 02.
Despejar es aplicar operaciones inversas manteniendo la igualdad. Cada paso es legítimo mientras la operación sea reversible: sumar y restar siempre lo son; dividir lo es solo si el divisor no es cero. Ese detalle —a ≠ 0— no es un tecnicismo: si a es cero, la ecuación 0·x = 0 tiene infinitas soluciones y 0·x = 5 no tiene ninguna. Declarar el caso degenerado es parte de resolver.
La verificación es obligatoria y barata: sustituir la solución en la ecuación original y comprobar que el residuo es cero. Es el mismo hábito que en la parte 05 se llamará «comprobar el residuo del sistema lineal» y en la 11, «criterio de parada».
Resolver 3x + 7 = 25 y verificar.
3x + 7 = 25
3x = 25 − 7 = 18 (restar 7 a ambos lados)
x = 18/3 = 6 (dividir por 3, válido porque 3 ≠ 0)
Verificación: 3·6 + 7 = 18 + 7 = 25 ✓
Residuo: 3·6 + 7 − 25 = 0 ✓
Casos degenerados:
0·x = 0 → infinitas soluciones
0·x = 5 → ninguna soluciónUna incógnita convierte una pregunta en una ecuación resoluble.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | x, verificacion, residuo |
| Comprobaciones (1) | resuelta |
compmath run 015Toda resolución de sistemas (parte 05), todo despeje en una derivación (parte 07) y la condición de primer orden ∇f = 0 de la optimización (parte 12) son despejes con más variables."
10.1007/978-1-4612-0335-5, pendiente de resolver.Una fórmula es una relación entre cantidades con dominio y unidades declarados.
A = πr² (r > 0, A en unidad²)
P = 2πr ⟹ A/P = r/2Evaluar una fórmula es fácil; usarla bien exige tres cosas que rara vez se escriben: su dominio de validez, las unidades de cada símbolo y los supuestos bajo los que se dedujo. Una fórmula sin esas tres declaraciones es una máquina de producir números plausibles fuera de contexto.
El área del círculo, A = πr², ilustra los tres. Dominio: r > 0, porque un radio negativo no tiene interpretación. Unidades: si r está en metros, A está en metros cuadrados, y esa elevación al cuadrado es lo que hace que duplicar el radio cuadruplique el área —un hecho que sorprende a mucha gente y que se deduce sin calcular nada, solo mirando el exponente.
La relación entre área y perímetro, A/P = r/2, muestra otra habilidad: combinar fórmulas para obtener relaciones que ninguna de las dos expresa por separado. Que el cociente dependa solo de r —y linealmente— dice algo estructural sobre el círculo, no sobre un círculo concreto.
Este es el hábito que la parte 07 formaliza como análisis de sensibilidad: preguntar «¿qué le pasa a la salida si esta entrada cambia un poco?» antes de meter números. El exponente de cada variable responde esa pregunta de forma inmediata: en A = πr², un error del 1 % en r produce aproximadamente un 2 % de error en A.
Círculo de radio 2.5 m.
A = π · 2.5² = π · 6.25 ≈ 19.635 m²
P = 2π · 2.5 ≈ 15.708 m
A/P = 19.635 / 15.708 = 1.25 m
r/2 = 2.5/2 = 1.25 m ✓ (relación estructural)
Sensibilidad: si r sube un 1 % (2.525 m),
A = π·2.525² ≈ 20.030 m² → +2.01 %
el exponente 2 predice el factor de amplificaciónUna fórmula evaluada con dominio y unidades declaradas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | radio_m, area_m2, perimetro_m, razon_area_perimetro, razon_teorica_r/2 |
| Comprobaciones (1) | dominio_valido |
compmath run 016Cualquier modelo es una fórmula con dominio. El análisis de sensibilidad por exponentes es la versión elemental del gradiente (parte 08) y del número de condición (clase 035)."
Detectar una regla en una secuencia es una conjetura; extrapolarla sin justificación es un salto injustificado.
aritmética: aₙ = a₁ + (n−1)d
geométrica: aₙ = a₁·rⁿ⁻¹
Fibonacci: Fₙ = Fₙ₋₁ + Fₙ₋₂, Fₙ₊₁/Fₙ → φ = (1+√5)/2Ver un patrón es barato; demostrarlo no. Dada la secuencia 3, 7, 11, 15, la regla «suma 4» es la más simple, pero infinitas fórmulas producen esos cuatro términos y luego divergen. La matemática distingue entre conjeturar una regla y demostrarla, y esa distinción es el puente entre esta clase y la 091 (inducción).
Las dos familias fundamentales se distinguen por qué operación es constante. En la aritmética lo constante es la diferencia entre términos consecutivos; su crecimiento es lineal. En la geométrica lo constante es la razón; su crecimiento es exponencial. Confundirlas al modelar produce predicciones que fallan por órdenes de magnitud, no por un poco.
Fibonacci añade un tercer tipo: la recurrencia, donde cada término depende de varios anteriores. Su comportamiento asintótico es sorprendente y demostrable: el cociente entre términos consecutivos converge a la razón áurea φ ≈ 1.618, que es la raíz positiva de x² = x + 1. Que una recurrencia de enteros converja a un irracional es un buen ejemplo de que el comportamiento asintótico no se lee en los primeros términos.
El hábito que instala esta clase: al proponer una regla, indicar qué operación permanece constante y hasta dónde se ha verificado. «Suma 4, verificado en 4 términos» es una afirmación honesta; «la regla es sumar 4» no lo es.
Tres secuencias y su regla.
Aritmética: 3, 7, 11, 15, 19 diferencia constante = 4
a₆ = 3 + 5·4 = 23
Geométrica: 2, 6, 18, 54, 162 razón constante = 3
a₆ = 2·3⁵ = 486
Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
55/34 = 1.6176...
φ = 1.6180... converge, no coincide aúnLa secuencia aritmética crece 4 por paso; la geométrica multiplica por 3 por paso. En diez pasos la primera llega a 39 y la segunda a 39366.
Detectar la regla de una secuencia y extrapolarla con cuidado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | diferencia_comun, siguiente_aritmetica, razon_comun, razon_fib_final, razon_aurea |
| Comprobaciones (0) | — |
compmath run 017Análisis de complejidad (parte 04), crecimiento compuesto (parte 02), series temporales (parte 13) y la lectura de curvas de aprendizaje: distinguir si un error baja linealmente o exponencialmente cambia por completo la decisión."
9788131708415 verificado en International ISBN Agency (2026-08-19).Modelar es traducir un enunciado a ecuaciones declarando qué representa cada símbolo.
sistema 2×2: x + y = T, p₁x + p₂y = M
solución: y = (M − p₁T)/(p₂ − p₁), x = T − yLa dificultad de un problema verbal casi nunca está en el álgebra: está en la traducción. El procedimiento fiable tiene cuatro pasos y conviene seguirlos en orden: (1) nombrar las incógnitas con su unidad, (2) escribir una ecuación por cada restricción del enunciado, (3) resolver el sistema, (4) comprobar que la solución tiene sentido en el problema original, no solo en las ecuaciones.
El paso 4 es el que más se omite y el que más errores atrapa. Un sistema puede tener solución matemática y ninguna solución real: si el reparto da −3 unidades de un producto, el modelo es correcto y el enunciado es imposible. Distinguir «no hay solución» de «el modelo está mal» exige volver al enunciado.
Contar restricciones es el control de sanidad previo. Dos incógnitas necesitan dos ecuaciones independientes; con una sola hay infinitas soluciones, y con tres es probable que el sistema sea incompatible. Esta cuenta reaparece en la parte 05 como la relación entre rango, número de incógnitas y existencia de solución.
Polya, en How to Solve It (1945), sistematizó este método en cuatro fases: comprender el problema, concebir un plan, ejecutarlo y examinar la solución. Sigue siendo la mejor descripción del proceso, y su última fase —examinar— es exactamente el paso que la prisa elimina.
«Se venden 30 unidades entre dos productos, uno a 1500 y otro a 2500, recaudando 61 000. ¿Cuántas de cada uno?»
Paso 1 — incógnitas con unidad
x = unidades del producto A
y = unidades del producto B
Paso 2 — una ecuación por restricción
x + y = 30 (total de unidades)
1500x + 2500y = 61000 (recaudación)
Paso 3 — resolver
y = (61000 − 1500·30)/(2500 − 1500) = 16000/1000 = 16
x = 30 − 16 = 14
Paso 4 — comprobar contra el enunciado
14 + 16 = 30 ✓
1500·14 + 2500·16 = 21000 + 40000 = 61000 ✓
ambas cantidades ≥ 0 → solución factible ✓Traducir un enunciado a ecuaciones y resolverlo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | unidades_producto_a, unidades_producto_b, verificacion_unidades, verificacion_dinero |
| Comprobaciones (1) | solucion_valida |
compmath run 018Es la habilidad central del modelado: formular un problema real como un objeto matemático. Reaparece en cada capstone del programa, y en la parte 12 como la construcción de la función objetivo y sus restricciones."
9780691164076 verificado en International ISBN Agency (2026-08-19).9780126288704 verificado en International ISBN Agency (2026-08-19).Un contraejemplo refuta una afirmación universal; ninguna cantidad de confirmaciones la demuestra.
¬(∀x P(x)) ⟺ ∃x ¬P(x)
n² + n + 41 es primo para n = 0..39, compuesto para n = 40La asimetría entre verificar y demostrar es el contenido de esta clase, y es la lección más transferible de toda la parte. Una afirmación universal —«para todo n se cumple P(n)»— no queda demostrada por muchos casos favorables, pero queda refutada por uno solo desfavorable. Verificar y demostrar son operaciones de coste y de valor radicalmente distintos.
El polinomio de Euler n² + n + 41 es el ejemplo canónico. Produce números primos para n = 0, 1, 2, ..., 39: cuarenta confirmaciones consecutivas, más de las que cualquiera revisaría antes de convencerse. Y falla en n = 40, donde vale 40² + 40 + 41 = 1681 = 41². La razón es visible en retrospectiva: al sustituir n = 41 (o 40) aparece el factor 41 explícitamente.
Trasladado al software, esto es exactamente la relación entre pruebas y corrección: «los tests pasan» significa que no se encontró contraejemplo en los casos probados, no que el código sea correcto. Dijkstra lo formuló en 1970 con una frase que resume la clase: las pruebas pueden mostrar la presencia de errores, nunca su ausencia.
La estrategia práctica que se deriva es contraintuitiva y muy eficaz: al evaluar una afirmación propia, buscar activamente el caso que la rompa en lugar de acumular casos que la confirmen. Los casos límite —cero, negativos, vacío, uno, el máximo representable— son donde viven los contraejemplos.
La conjetura de Euler y su caída.
n: 0 1 2 3 ... 38 39 | 40
n²+n+41: 41 43 47 53 ... 1523 1601 | 1681
n = 0..39 → los 40 valores son primos
n = 40 → 1681 = 41 × 41 ✗ COMPUESTO
Regla: 40 confirmaciones no demuestran
1 contraejemplo refutaNótese que el contraejemplo no requiere teoría avanzada: requiere seguir probando cuando ya «parecía» cierto.
Una conjetura plausible destruida por un único contraejemplo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | casos_favorables_consecutivos, primer_contraejemplo_n, valor_en_el_contraejemplo, factor |
| Comprobaciones (0) | — |
compmath run 019Diseño de pruebas, validación de modelos y evaluación de resultados publicados. En la parte 10 reaparece como la lógica de las pruebas de hipótesis: no se demuestra H₁, se rechaza H₀."
Modelar un presupuesto integra dinero exacto, porcentajes, redondeo y verificación en un solo problema.
Σ pᵢ = 1 (los porcentajes deben sumar la unidad)
descuadre = ingreso − Σ redondeo(ingreso · pᵢ)El capstone reúne todo lo de la parte en un problema con consecuencias reales: repartir un ingreso en categorías según porcentajes. Parece trivial y contiene tres trampas que las clases anteriores anticiparon.
La primera: los porcentajes deben sumar exactamente 1. Comprobarlo con Decimal es trivial; comprobarlo con float no lo es, porque 0.35 + 0.20 + 0.10 + 0.20 + 0.15 puede no dar exactamente 1.0 en binario. Esta es la primera vez en el programa que la representación numérica cambia el resultado de una comprobación lógica.
La segunda: redondear cada categoría a la unidad monetaria hace que la suma de las partes no coincida con el total. El descuadre es pequeño pero sistemático, y cualquier sistema contable real necesita una política explícita para él: asignar el resto a una categoría, distribuirlo, o llevar el redondeo por acumulación. No decidir es también una decisión, y produce descuadres impredecibles.
La tercera: proyectar hacia el futuro. «¿Cuántos meses para ahorrar 5 millones?» es una división, pero su resultado es un número real y la respuesta es un entero de meses —hay que redondear hacia arriba, porque a mitad de mes no se ha ahorrado la cantidad—. Elegir la dirección del redondeo según el significado del problema, y no según la costumbre, es la competencia que cierra la parte.
Repartir un ingreso de 1 250 000 en cinco categorías.
categoría % importe (Decimal, redondeado a 1)
vivienda 35 % 437 500
alimentación 20 % 250 000
transporte 10 % 125 000
ahorro 20 % 250 000
otros 15 % 187 500
─────────────────────────────────
suma % 100 % ✓
suma importes 1 250 000
descuadre 0 (aquí los porcentajes dan exactos)
Meses para ahorrar 5 000 000 con 250 000/mes:
5 000 000 / 250 000 = 20 meses exactos
(si diera 20.3, la respuesta operativa sería 21)Con porcentajes como 1/3 el descuadre aparece y hay que decidir dónde va el resto.
Capstone: modelar un presupuesto con dinero exacto y proporciones.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | ingreso, total_asignado, descuadre_por_redondeo, meses_para_ahorrar_5M |
| Comprobaciones (1) | porcentajes_suman_1 |
compmath run 020Contabilidad, presupuestos personales y empresariales, reparto de costes entre equipos y prorrateo de recursos en la nube. La política de descuadre es un requisito real en cualquier sistema de facturación."
decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Qué es realmente un número dentro de una máquina: bits, complemento a dos, IEEE 754, error, condicionamiento y estabilidad.
Esta es la parte que más cambia la forma de programar de quien la estudia, y la que casi ningún curso de matemáticas incluye. La pregunta central es incómoda: ¿qué es realmente un número dentro de una máquina? La respuesta —una cadena finita de bits con una interpretación acordada— tiene consecuencias que aparecen en producción a las tres de la mañana.
El recorrido va de lo discreto a lo continuo. Las clases 021 a 026 tratan los enteros: cuántos valores caben en un ancho de palabra, cómo se representan los negativos con complemento a dos y qué ocurre cuando una suma se sale del rango. Python oculta este problema porque sus enteros son de precisión arbitraria, pero NumPy, C, Rust y cualquier base de datos no lo hacen, y el desbordamiento silencioso es un error de seguridad clásico.
Las clases 027 a 033 son el núcleo: IEEE 754. Un float64 no es un número real: es un racional binario con 53 bits de mantisa. De ahí se derivan, con necesidad lógica, los fenómenos que parecen fallos y no lo son: 0.1 + 0.2 != 0.3, la suma que deja de ser asociativa, el epsilon de máquina, los subnormales y el NaN. Goldberg escribió en 1991 el artículo que sigue siendo la referencia; esta parte es su versión ejecutable.
Las clases 034 a 036 introducen la distinción que separa a quien depura numéricamente de quien adivina: condicionamiento es una propiedad del problema, estabilidad es una propiedad del algoritmo. Un problema mal condicionado no tiene algoritmo estable que lo salve; un algoritmo inestable estropea un problema bien condicionado. Confundirlos lleva a buscar el error en el sitio equivocado.
El cierre (037 a 039) da las salidas: Decimal cuando hace falta exactitud decimal, Fraction cuando hace falta exactitud racional, y las condiciones bajo las que un resultado numérico es reproducible entre máquinas. El capstone construye un auditor que mide cuántos dígitos significativos pierde cada forma de escribir una expresión.
En IA esta parte es cotidiana aunque nadie la nombre: float32, bfloat16, la cuantización a int8, los NaN que aparecen en la época 3, el epsilon dentro de cada LayerNorm y el motivo por el que dos entrenamientos con la misma semilla dan resultados distintos en GPU. Todo eso es esta parte.
float32, bfloat16 y la cuantización a int8 son decisiones de representación. Los NaN en un entrenamiento casi siempre nacen aquí, no en la arquitectura.
== en lugar de una tolerancia razonada.| Término | Definición | Clase |
|---|---|---|
| Base posicional | Sistema en el que el valor de un dígito depende de su posición. Cambiar de base no cambia la cantidad, solo su escritura. | 023 |
| Bit | Unidad mínima de información: dos estados posibles. n bits codifican 2ⁿ valores distintos. | 021 |
| Cancelación catastrófica | Pérdida masiva de dígitos significativos al restar dos números casi iguales. No lanza excepción. | 032 |
| Complemento a dos | Codificación de enteros con signo en la que el negativo de x es 2ⁿ − x. Permite sumar positivos y negativos con el mismo circuito. | 025 |
| Epsilon de máquina | Menor ε tal que 1 + ε ≠ 1. En float64 vale 2⁻⁵² ≈ 2.22e−16. | 031 |
| Error absoluto | Diferencia |aproximado − exacto|. Depende de la escala y no es comparable entre magnitudes distintas. | 030 |
| Error relativo | Error absoluto dividido por el valor exacto. Es la magnitud que se propaga y la que define la precisión. | 030 |
| Estabilidad numérica | Propiedad de un algoritmo que no amplifica los errores de redondeo más allá de lo que el problema exige. | 036 |
| Exponente sesgado | Exponente almacenado con un desplazamiento (1023 en float64) para poder representarlo sin signo. | 028 |
| Mantisa | Parte significativa de un número en punto flotante. Determina la precisión relativa, no el rango. | 028 |
| Número de condición | Factor por el que un problema amplifica el error relativo de la entrada. Es propiedad del problema. | 035 |
| Overflow | Resultado que excede el rango representable. En ancho fijo produce wraparound silencioso, no una excepción. | 026 |
| Precisión arbitraria | Aritmética cuya precisión se declara y no está limitada por el hardware, a cambio de velocidad. | 037 |
| Punto fijo | Representación con número fijo de decimales, típicamente enteros de la unidad mínima (centavos). Exacta dentro de su rango. | 027 |
| Reproducibilidad numérica | Propiedad de un cálculo que devuelve bit a bit el mismo resultado. Exige fijar el orden de las operaciones, no solo la semilla. | 039 |
| Subnormal | Número flotante menor que el mínimo normal, representado con mantisa desnormalizada y precisión reducida. | 033 |
| Suma compensada | Técnica (Kahan, o math.fsum) que arrastra el error de redondeo para que la suma de muchos términos conserve precisión. | 034 |
| ULP | Unit in the Last Place: distancia entre un float y su vecino. Depende de la magnitud del número. | 031 |
Con n bits se codifican exactamente 2ⁿ valores distintos; el ancho de palabra fija el rango, no la precisión.
valores representables con n bits = 2ⁿ
bits necesarios para k valores = ⌈log₂ k⌉Un bit distingue dos estados. Dos bits distinguen cuatro, porque cada estado del primero se combina con cada estado del segundo. La regla del producto —que la clase 087 formalizará como combinatoria— da directamente 2ⁿ para n bits, y esa cuenta es la base de todo dimensionamiento en computación.
La relación inversa importa igual: para representar k valores distintos hacen falta ⌈log₂ k⌉ bits. Un millón de valores necesita 20 bits; mil millones, 30. El logaritmo convierte una multiplicación de posibilidades en una suma de bits, y por eso la información se mide en bits (clase 262): es la unidad natural en la que las posibilidades se suman.
Los anchos habituales no son arbitrarios: 8, 16, 32 y 64 bits corresponden a las unidades que el hardware manipula de una vez. Elegir el ancho es elegir un compromiso entre rango y memoria. En deep learning esa elección es un tema activo: pasar de float32 a bfloat16 reduce a la mitad la memoria de activaciones y permite lotes mayores, a costa de precisión.
Conviene separar desde ya dos cosas que el ancho de palabra confunde: cuántos valores distintos caben (rango) y cuán juntos están (precisión). Un int32 y un float32 ocupan lo mismo y representan cosas radicalmente distintas: el entero cubre un rango pequeño con espaciado uniforme de 1; el flotante cubre un rango enorme con espaciado variable.
Cuántos bits hacen falta y cuántos valores caben.
ancho valores representables
1 bit 2
1 byte 256
16 bits 65 536
32 bits 4 294 967 296
64 bits 1.8446744e19
Para 1000 valores: ⌈log₂ 1000⌉ = 10 bits (2¹⁰ = 1024 ≥ 1000)
Para 1 000 000 valores: ⌈log₂ 10⁶⌉ = 20 bits (2²⁰ = 1 048 576)Observa el salto: duplicar los bits no duplica los valores, los eleva al cuadrado. De 32 a 64 bits no hay «el doble de números»: hay 4·10⁹ veces más.
Cuántos valores distintos codifica cada ancho de palabra.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | valores_por_bit, valores_en_1_byte, valores_en_16_bits, valores_en_32_bits, valores_en_64_bits, bits_para_1000_valores, bits_para_1_millon |
| Comprobaciones (0) | — |
compmath run 021Diseño de esquemas de base de datos, formatos binarios, cuantización de modelos y dimensionamiento de índices. La elección float32 frente a bfloat16 en entrenamiento es exactamente esta decisión.
9780128203316 verificado en International ISBN Agency (2026-08-19).Convertir a binario es dividir sucesivamente por 2 y leer los restos en orden inverso.
n = Σ bᵢ·2ⁱ con bᵢ ∈ {0,1}
restos de n/2 leídos de abajo arriba = representación binariaEl algoritmo de divisiones sucesivas no es un truco: es la construcción directa de la representación posicional. Al dividir n entre 2, el resto es el bit menos significativo —dice si n es par o impar— y el cociente es el número «desplazado un bit a la derecha». Repetir hasta llegar a cero produce todos los bits, del menos al más significativo, y por eso se leen al revés.
La representación es única: todo entero positivo tiene exactamente una escritura en base 2. Esa unicidad es la que permite que dos máquinas distintas interpreten los mismos bits como el mismo número, y es la que se pierde en punto flotante, donde varios reales distintos comparten representación.
El mismo algoritmo funciona en cualquier base cambiando el divisor. En base 16 los restos van de 0 a 15 y se escriben con dígitos hexadecimales; en base 8, de 0 a 7. La clase 023 explota que 16 y 8 son potencias de 2 para convertir sin dividir.
Un detalle práctico: Python trae la conversión en format(n, "b") y int(s, 2), pero implementarla a mano una vez deja claro por qué el bit menos significativo es la paridad, hecho que se usará constantemente en la parte 04 (aritmética modular) y en cualquier manipulación de bits.
Convertir 156 a binario por divisiones sucesivas.
156 / 2 = 78 resto 0 ← bit menos significativo
78 / 2 = 39 resto 0
39 / 2 = 19 resto 1
19 / 2 = 9 resto 1
9 / 2 = 4 resto 1
4 / 2 = 2 resto 0
2 / 2 = 1 resto 0
1 / 2 = 0 resto 1 ← bit más significativo
Leídos de abajo arriba: 10011100
Verificación: 128 + 16 + 8 + 4 = 156 ✓
(2⁷ + 2⁴ + 2³ + 2²)Divisiones sucesivas frente a la conversión de la biblioteca.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | decimal, reconstruido |
| Comprobaciones (1) | coinciden |
compmath run 022Máscaras de bits, permisos de sistema de archivos, banderas de configuración, direcciones de red y cualquier serialización binaria. Es el prerrequisito de la representación IEEE 754.
bin, int y format — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Hexadecimal y octal son taquigrafías de binario porque 16 y 8 son potencias de 2.
1 dígito hexadecimal = 4 bits
1 dígito octal = 3 bitsLos programadores usan hexadecimal por una razón puramente práctica: cada dígito hexadecimal corresponde exactamente a 4 bits, así que convertir entre binario y hex se hace por grupos, sin dividir nada. 1101 0110 es D6 porque 1101 es 13 (D) y 0110 es 6. En octal ocurre lo mismo con grupos de 3 bits.
Esta correspondencia solo funciona porque 16 = 2⁴ y 8 = 2³. Con base 10 no hay agrupación posible, y por eso convertir decimal ↔ binario requiere el algoritmo de divisiones de la clase 022 mientras que hex ↔ binario es una tabla de 16 entradas.
El hexadecimal es además compacto: un byte se escribe con dos dígitos en lugar de ocho, y una dirección de 32 bits con ocho en lugar de treinta y dos. Por eso aparece en direcciones de memoria, colores CSS (#7c5cff son tres bytes), UUID, hashes y volcados de memoria.
Al leer código conviene reconocer los prefijos: 0b para binario, 0o para octal, 0x para hexadecimal. Python los acepta todos y int(s, base) convierte desde cualquier base entre 2 y 36. Los permisos de Unix (chmod 755) son octal precisamente porque cada dígito codifica tres bits de permiso: lectura, escritura y ejecución.
El mismo número en cuatro bases.
decimal 3 735 928 559
hexadecimal deadbeef
octal 33653337357
binario 11011110101011011011111011101111
Agrupación hex ← binario (grupos de 4, desde la derecha):
1101 1110 1010 1101 1011 1110 1110 1111
d e a d b e e f ✓
Bits necesarios: 32deadbeef es un valor centinela clásico en depuración: es hexadecimal legible y difícilmente aparece por accidente en memoria.
La misma cantidad en base 2, 8, 10 y 16.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | decimal, digitos_binarios, un_hex_equivale_a_bits, un_octal_equivale_a_bits |
| Comprobaciones (0) | — |
compmath run 023Direcciones de memoria, colores, hashes, UUID, permisos Unix y protocolos binarios. Leer un volcado hexadecimal es una habilidad de depuración básica.
9780128203316 verificado en International ISBN Agency (2026-08-19).La aritmética binaria es la decimal con acarreo en base 2; los desplazamientos multiplican y dividen por potencias de 2.
x << k = x · 2ᵏ
x >> k = ⌊x / 2ᵏ⌋ (para x ≥ 0)
x & (x−1) apaga el bit menos significativo encendidoSumar en binario funciona igual que en decimal: se suma columna a columna y se arrastra el acarreo. La única diferencia es que el acarreo salta cuando la suma llega a 2 en lugar de a 10. Esta simplicidad es la razón por la que el hardware usa base 2: un sumador completo de un bit cabe en unas pocas puertas lógicas.
Los desplazamientos son la operación más barata de un procesador y equivalen a multiplicar o dividir por potencias de 2. x << 3 es x · 8, y x >> 1 es la división entera por 2. Los compiladores hacen esta sustitución automáticamente, pero reconocerla ayuda a leer código de bajo nivel y algoritmos de hashing.
Las operaciones bit a bit —AND, OR, XOR— actúan sobre cada posición de forma independiente, sin acarreo. AND enmascara (deja pasar solo los bits marcados), OR activa, XOR conmuta. XOR tiene una propiedad que se usa constantemente en criptografía: es su propia inversa, (a ^ b) ^ b = a.
Un idiom que conviene conocer: x & (x−1) apaga el bit encendido más a la derecha, porque restar 1 invierte ese bit y todos los ceros a su derecha. Contar cuántas veces se puede aplicar antes de llegar a cero cuenta los bits encendidos (popcount), y esa cuenta aparece en distancias de Hamming y en índices de bases de datos.
Operaciones sobre a = 1011₂ (11) y b = 0110₂ (6).
a = 1011 (11)
b = 0110 (6)
a + b = 10001 (17) acarreo hasta el quinto bit
a & b = 0010 (2) solo donde ambos tienen 1
a | b = 1111 (15) donde alguno tiene 1
a ^ b = 1101 (13) donde difieren
a << 2 = 101100 (44) = 11 · 4 ✓
a >> 1 = 101 (5) = ⌊11/2⌋ ✓
Verificación XOR: (a ^ b) ^ b = 1101 ^ 0110 = 1011 = a ✓Suma y desplazamiento en binario, con acarreo visible.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | a<<2 (multiplica por 4), a>>1 (divide por 2) |
| Comprobaciones (0) | — |
compmath run 024Hashing, compresión, criptografía, banderas de configuración, índices de bitmap y optimización de bucles. La distancia de Hamming entre dos cadenas de bits es el popcount de su XOR.
9780133084993, pendiente de resolver.En complemento a dos, el negativo de x es 2ⁿ − x, y por eso la resta se implementa con el mismo sumador que la suma.
representación de −x en n bits = 2ⁿ − x
rango: [−2ⁿ⁻¹, 2ⁿ⁻¹ − 1]La razón por la que existe el complemento a dos es de ingeniería, no de matemáticas: permite que un único circuito sumador maneje positivos y negativos sin casos especiales. Si −x se representa como 2ⁿ − x, entonces a + (−b) calculado módulo 2ⁿ da exactamente a − b cuando el resultado está en rango. La resta desaparece como operación separada.
Las alternativas históricas —signo-magnitud y complemento a uno— tenían dos representaciones para el cero (+0 y −0), lo que obliga a casos especiales en las comparaciones. El complemento a dos tiene un único cero, y como contrapartida un rango asimétrico: en 8 bits va de −128 a +127, un negativo más que positivos.
Esa asimetría no es una curiosidad. abs(-128) en un int8 no es representable, así que desborda; en NumPy, np.abs(np.int8(-128)) devuelve −128 sin avisar. El mismo fenómeno afecta a -x y a la división x // -1. Es una fuente real de errores en código que procesa datos de sensores o audio en enteros.
El bit más significativo actúa como bit de signo, pero no es «un bit de signo» en el sentido de signo-magnitud: su peso es −2ⁿ⁻¹. Interpretar 11111011 como número requiere −128 + 64 + 32 + 16 + 8 + 2 + 1 = −5, no «signo negativo y magnitud 123».
Representación en 8 bits y suma con signos opuestos.
+5 = 00000101
−5 = 2⁸ − 5 = 251 = 11111011
Suma 5 + (−5):
00000101
+ 11111011
-----------
100000000 → se descarta el noveno bit (módulo 2⁸)
00000000 = 0 ✓
Decodificar 11111011:
−128 + 64 + 32 + 16 + 8 + 0 + 2 + 1 = −5 ✓
Rango: mínimo −128, máximo +127
Asimetría: |−128| = 128 NO es representable en int8Representación de negativos en 8 bits.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | ancho_bits, decodifica_11111011, minimo_representable, maximo_representable |
| Comprobaciones (0) | — |
compmath run 025Todo entero con signo en C, Rust, Java, NumPy y bases de datos. Los errores de desbordamiento por complemento a dos son una categoría reconocida de vulnerabilidad (CWE-190).
9780128203316 verificado en International ISBN Agency (2026-08-19).En ancho fijo, superar el máximo no lanza excepción: el valor da la vuelta al rango.
resultado = (a + b) mod 2ⁿ, reinterpretado con signo
int8: 127 + 1 = −128El desbordamiento en enteros de ancho fijo es silencioso por diseño: el hardware calcula módulo 2ⁿ y descarta los bits que sobran. No hay excepción, no hay aviso, y el programa continúa con un valor que puede tener el signo contrario al esperado. Es una de las pocas situaciones en computación donde un error grave no produce ninguna señal.
Python es la excepción cómoda: sus enteros crecen indefinidamente, limitados solo por la memoria. Esa comodidad esconde el problema hasta que el mismo cálculo pasa a NumPy (donde int32 sí desborda), a una base de datos, a un servicio en otro lenguaje o a un modelo cuantizado. La lección de esta clase es que la ausencia de desbordamiento en Python no es una propiedad del algoritmo: es una propiedad del intérprete.
Los casos históricos abundan. El vuelo inaugural del Ariane 5 en 1996 se destruyó por una conversión de un flotante de 64 bits a un entero con signo de 16 bits cuyo valor no cabía. El «problema del año 2038» es el desbordamiento de un time_t de 32 bits contando segundos desde 1970.
La defensa práctica tiene tres capas: elegir el ancho con margen sobre el rango real, validar los límites en las fronteras del sistema, y usar tipos con detección de desbordamiento donde el lenguaje los ofrezca (checked_add en Rust, -ftrapv en C).
Wraparound en int8 simulado sobre Python.
máximo int8 127
127 + 1 → wraparound −128 (no 128)
127 + 2 → wraparound −127
En Python nativo:
127 + 1 = 128 (int ilimitado)
sys.maxsize = 9223372036854775807 (tamaño del puntero, no un límite del int)
Lección: Python no desborda, C y NumPy sí.
El algoritmo es el mismo; el resultado, no.Wraparound en enteros de ancho fijo simulado sobre Python.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | maximo_int8, maximo+1_con_wraparound, maximo+2_con_wraparound, python_int_es_ilimitado, sys_maxsize |
| Comprobaciones (0) | — |
compmath run 026Contadores, marcas de tiempo, identificadores, acumuladores de métricas y cualquier dato que cruza la frontera entre Python y un sistema de ancho fijo. Es una categoría reconocida de vulnerabilidad de seguridad.
El punto fijo reparte la precisión de forma uniforme; el flotante la reparte proporcionalmente a la magnitud.
punto fijo: valor = entero · 10⁻ᵏ (exacto en su rango)
punto flotante: valor = mantisa · 2^exponente (precisión relativa constante)Las dos representaciones responden a necesidades distintas. En punto fijo se guarda un entero y se acuerda dónde está la coma: el dinero se guarda en centavos, y todas las operaciones son aritmética entera exacta. El espaciado entre valores representables es constante —un centavo— en todo el rango.
En punto flotante se guarda una mantisa y un exponente, y el espaciado crece con la magnitud: cerca de 1 los floats están separados por unos 2⁻⁵², y cerca de 10⁶ por unos 2⁻³². Eso significa precisión relativa constante: siempre unos 16 dígitos significativos, independientemente de la escala. Es la elección correcta para magnitudes físicas que abarcan muchos órdenes de magnitud.
La consecuencia para dinero es directa y conocida: sumar 0.1 diez veces en float no da exactamente 1.0, porque 0.1 no es representable en binario. Sumar 10 veces el entero 10 (centavos) da exactamente 100. Por eso todo sistema contable serio trabaja en punto fijo o con Decimal.
El criterio para elegir: si los valores tienen una unidad mínima natural y las comparaciones exactas importan (dinero, contadores, índices), punto fijo. Si los valores abarcan varios órdenes de magnitud y lo que importa es la precisión relativa (física, estadística, gradientes), punto flotante.
Sumar diez veces una décima por los dos caminos.
Punto flotante:
0.0 + 0.1 repetido 10 veces = 0.9999999999999999
¿es exactamente 1.0? No
error = 1.11e−16
Punto fijo (centavos como enteros):
0 + 10 repetido 10 veces = 100
100 / 100 = 1.0
exacto: sí, porque toda la aritmética fue enteraEl error del flotante es minúsculo. El problema no es su tamaño: es que rompe la comparación total == 1.0, que es exactamente la que hace un sistema de facturación.
Punto fijo (centavos enteros) frente a punto flotante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | suma_float_de_0.1_x10, error, suma_en_centavos_enteros, centavos_a_unidades |
| Comprobaciones (2) | es_exactamente_1.0, punto_fijo_exacto |
compmath run 027Contabilidad, facturación e inventario en punto fijo; física, estadística y deep learning en punto flotante. La cuantización de modelos a int8 es una vuelta al punto fijo por razones de memoria.
10.1145/103162.103163 verificado en Crossref (2026-08-19).decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Un float64 es signo, exponente sesgado de 11 bits y mantisa de 52 bits con un 1 implícito.
valor = (−1)^s · (1 + m/2⁵²) · 2^(e − 1023)
float64: 1 bit de signo + 11 de exponente + 52 de mantisa = 64El estándar IEEE 754, publicado en 1985 y revisado en 2019, unificó lo que antes era un caos de formatos incompatibles entre fabricantes. Su diseño responde a una idea: guardar un número en notación científica binaria, con la mantisa normalizada al intervalo [1, 2) para que el primer bit sea siempre 1 y no haga falta almacenarlo. Ese «bit implícito» regala un bit de precisión gratis.
Los tres campos tienen papeles distintos. El signo es un bit. El exponente se guarda sesgado (sumándole 1023 en float64) para poder representar exponentes negativos sin necesitar un signo propio; con 11 bits cubre de 2⁻¹⁰²² a 2¹⁰²³, es decir de 10⁻³⁰⁸ a 10³⁰⁸ aproximadamente. La mantisa de 52 bits (más el implícito, 53 efectivos) determina la precisión: log₁₀(2⁵³) ≈ 15.95 dígitos decimales.
Los valores extremos del exponente están reservados: todo ceros indica cero o subnormal, todo unos indica infinito o NaN. Por eso existen +inf, -inf y NaN como valores de primera clase en lugar de como errores, lo que permite que un cálculo continúe y el problema se detecte al final.
Reconstruir un float a mano desde sus bits, como hace el laboratorio, deja claro que no hay nada mágico: es notación científica en base 2 con un formato de empaquetado acordado. Y explica de inmediato por qué la precisión es relativa: los 53 bits de mantisa siempre representan los mismos dígitos significativos, sea cual sea el exponente.
Descomponer −6.25 en float64.
−6.25 en binario = −110.01₂ = −1.1001₂ × 2²
signo s = 1 (negativo)
exponente e = 2 + 1023 = 1025 = 10000000001₂
mantisa m = 1001000...0 (el 1 inicial es implícito)
Reconstrucción:
(−1)¹ · (1 + m/2⁵²) · 2^(1025−1023)
= −1 · 1.5625 · 4
= −6.25 ✓
Precisión: 53 bits ⇒ log₁₀(2⁵³) ≈ 15.95 dígitos decimales
Rango: exponente de −1022 a 1023 ⇒ ~1e−308 a ~1e308Signo, exponente y mantisa de un float64.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | valor, exponente_bruto, sesgo, exponente_real, reconstruido |
| Comprobaciones (0) | — |
compmath run 028Es el formato de casi todo cálculo científico. Entenderlo explica float32 (24 bits de mantisa), bfloat16 (8 bits de mantisa pero el mismo rango que float32, por eso se usa en entrenamiento) y float16 (10 bits, rango reducido).
10.1145/103162.103163 verificado en Crossref (2026-08-19).0.1 no es representable en binario, igual que 1/3 no lo es en decimal; la desigualdad no es un fallo sino una consecuencia.
0.1₁₀ = 0.0001100110011...₂ (periódico infinito)
comparación correcta: math.isclose(a, b, rel_tol=...)La clase 004 estableció que una fracción tiene desarrollo finito solo si su denominador reducido se factoriza en los primos de la base. En base 10 los primos son 2 y 5, y por eso 1/10 es finito. En base 2 el único primo es 2, así que 1/10 —cuyo denominador contiene un 5— tiene desarrollo binario periódico infinito.
Como la mantisa tiene 53 bits, ese desarrollo se trunca. El float más cercano a 0.1 es en realidad 0.1000000000000000055511151231257827021181583404541015625. Sumar dos aproximaciones y compararlas con la aproximación de 0.3 no tiene por qué dar igualdad, y de hecho no la da: la diferencia es de unos 5.5·10⁻¹⁷.
La conclusión correcta no es «los floats están rotos». Es que el operador == no es la comparación adecuada para resultados de cálculo en punto flotante. La comparación correcta declara una tolerancia: math.isclose(a, b, rel_tol=1e-12) pregunta si los dos números coinciden dentro de una precisión relativa declarada, que es la pregunta que realmente se quiere responder.
Hay una excepción importante: comparar con == sí es correcto cuando los valores son exactamente representables y no han pasado por operaciones inexactas —enteros pequeños, potencias de 2, resultados de asignaciones directas—. La regla práctica es preguntarse si el valor viene de un cálculo; si viene, hace falta tolerancia.
La desigualdad y su explicación.
0.1 + 0.2 = 0.30000000000000004
0.3 = 0.29999999999999998889776975374843...
¿iguales con ==? No
diferencia 5.55e−17
0.1 con 50 decimales:
0.10000000000000000555111512312578270211815834045410
Comparación correcta:
math.isclose(0.1 + 0.2, 0.3, rel_tol=1e-12) → TrueEl error es de 5.5·10⁻¹⁷ sobre 0.3: precisión relativa de 1.8·10⁻¹⁶, exactamente el epsilon de máquina. El resultado es tan bueno como el formato permite.
0.1 + 0.2 != 0.3 explicado con la fracción binaria real.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | 0.1+0.2, 0.3, diferencia |
| Comprobaciones (2) | iguales, comparacion_correcta |
compmath run 029Cualquier test numérico, criterio de convergencia o comparación de resultados. Los asserts de todo el programa usan tolerancia declarada precisamente por esto.
math.isclose y PEP 485 — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).10.1145/103162.103163 verificado en Crossref (2026-08-19).El error relativo es la magnitud que se propaga; el absoluto solo tiene sentido con la escala declarada.
error absoluto = |aprox − exacto|
error relativo = |aprox − exacto| / |exacto|
dígitos significativos correctos ≈ −log₁₀(error relativo)Un error absoluto sin escala es una cifra sin significado. Diez unidades de error son catastróficas si el valor exacto es 1 e irrelevantes si es un millón. El error relativo normaliza esa comparación y por eso es la magnitud que se usa para hablar de precisión.
La relación con los dígitos significativos es directa y muy útil: un error relativo de 10⁻⁶ significa aproximadamente 6 dígitos correctos. Como el epsilon de máquina de float64 es ≈2.2·10⁻¹⁶, ningún cálculo en doble precisión puede prometer más de unos 16 dígitos, y prometer más es exagerar la certeza.
Los dos errores se comportan de forma distinta al operar. Al multiplicar o dividir, los errores relativos se suman aproximadamente. Al sumar o restar, los errores absolutos se suman. Esa asimetría explica por qué la resta de números parecidos es peligrosa —el error absoluto se mantiene pero el resultado se hace pequeño, así que el relativo explota— y es el contenido de la clase 032.
La consecuencia práctica: al reportar un resultado numérico hay que decir cuál de los dos errores se está acotando y con respecto a qué. Un criterio de parada basado solo en el error absoluto falla si la escala del problema es muy grande o muy pequeña (clase 233).
Dos aproximaciones con errores absolutos muy distintos.
Caso A: exacto = 1.0 aprox = 1.01
error absoluto = 0.01
error relativo = 0.01 → 1 % ~2 dígitos correctos
Caso B: exacto = 1 000 000.0 aprox = 1 000 010.0
error absoluto = 10.0 (1000× mayor que en A)
error relativo = 1e−5 → 0.001 % ~5 dígitos correctos
Conclusión: B es 1000 veces más preciso pese a tener
un error absoluto 1000 veces mayor.El error relativo es el que se propaga; el absoluto engaña con la escala.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 030Criterios de parada (parte 11), tolerancias de test, informes de precisión y comparación de implementaciones. La clase 040 construye un auditor basado en esta métrica.
9780898718027, pendiente de resolver.math.isclose — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).El epsilon de máquina mide la precisión relativa; el ULP mide la distancia absoluta entre floats vecinos.
ε = 2⁻⁵² ≈ 2.22e−16 (float64)
ulp(x) ≈ ε · 2^⌊log₂|x|⌋El epsilon de máquina se define como el menor ε tal que 1 + ε ≠ 1 en la aritmética del formato. En float64 vale exactamente 2⁻⁵², porque la mantisa tiene 52 bits almacenados: sumar algo menor que el último bit de la mantisa no cambia el número. El laboratorio comprueba justamente eso: 1.0 + ε difiere de 1.0, pero 1.0 + ε/2 no.
El ULP —unit in the last place— es el concepto relacionado pero distinto: la distancia entre un float concreto y su vecino inmediato. No es constante: cerca de 1 vale unos 2.2·10⁻¹⁶, cerca de 10⁶ vale unos 1.2·10⁻¹⁰, y cerca de 10⁻⁶ vale unos 2.1·10⁻²². Los floats no están repartidos uniformemente en la recta: se concentran cerca del cero y se espacian al alejarse.
Esta no uniformidad explica un fenómeno cotidiano: sumar un número muy pequeño a uno muy grande no cambia nada. 1e16 + 1.0 devuelve 1e16 porque 1.0 es menor que el ULP en esa escala. No es un redondeo agresivo: es que el resultado exacto no tiene representación y el más cercano es el propio 1e16.
Medir un error en ULP en lugar de en unidades absolutas es la forma correcta de evaluar la calidad de una función numérica. Una implementación de sin «correctamente redondeada» tiene un error menor a 0.5 ULP; una aceptable, menor a 1 ULP. Esa es la unidad en la que las bibliotecas matemáticas declaran su precisión.
Epsilon, ULP y el límite de la suma.
ε = sys.float_info.epsilon = 2.220446049250313e−16 = 2⁻⁵²
1.0 + ε ≠ 1.0 ✓ (por definición de ε)
1.0 + ε/2 == 1.0 ✓ (por debajo del último bit)
ULP según la magnitud:
ulp(1.0) = 2.22e−16
ulp(1e6) = 1.16e−10 500 000 veces mayor
ulp(1e−6) = 2.12e−22
Siguiente float tras 1.0: 1.0000000000000002Los floats no son un retículo uniforme: son casi logarítmicos.
Machine epsilon y la distancia al float siguiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | sys.float_info.epsilon, 2**-52, ulp_en_1.0, ulp_en_1e6, ulp_en_1e-6, siguiente_float_tras_1.0 |
| Comprobaciones (2) | 1.0 + eps != 1.0, 1.0 + eps/2 == 1.0 |
compmath run 031Elegir tolerancias, evaluar la calidad de una biblioteca matemática y entender por qué un acumulador pierde términos pequeños. Es el prerrequisito de las clases 032 y 034.
9783319765266 verificado en International ISBN Agency (2026-08-19).math.ulp y math.nextafter — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Restar dos números casi iguales destruye dígitos significativos sin producir ningún error visible.
forma ingenua: √(x²+1) − x
forma estable: 1 / (√(x²+1) + x)La cancelación catastrófica es el fenómeno más peligroso de la aritmética de punto flotante porque no produce ninguna señal. Al restar dos números que coinciden en sus primeros k dígitos, esos dígitos se anulan y el resultado queda formado por los dígitos de menor peso, que son precisamente los contaminados por el redondeo previo. El error absoluto se mantiene; el resultado se hace pequeño; el error relativo explota.
El caso canónico es √(x²+1) − x para x grande. Con x = 10⁸, ambos términos valen aproximadamente 10⁸ y coinciden en unos 16 dígitos, que son todos los que hay. El resultado de la resta es esencialmente ruido. La forma algebraicamente equivalente 1/(√(x²+1) + x) —obtenida multiplicando y dividiendo por el conjugado— no tiene resta y da el resultado correcto.
El patrón se repite en toda la matemática computacional: exp(x) − 1 para x pequeño (por eso existe expm1), log(1 + x) para x pequeño (log1p), la fórmula cuadrática cuando b² ≫ 4ac (clase 036), y la varianza calculada como E[X²] − E[X]² en lugar de con la fórmula de dos pasos.
La regla práctica es reconocible: cada vez que una fórmula reste dos cantidades que pueden ser casi iguales, hay que buscar una forma alternativa. Casi siempre existe, y obtenerla es álgebra elemental —racionalizar, factorizar, usar una identidad—, no análisis numérico avanzado.
La misma expresión por dos caminos con x = 10⁸.
Ingenua: √(10¹⁶ + 1) − 10⁸
= 100000000.00000001 − 100000000
= 7.45e−09 ← casi todo ruido
Estable: 1 / (√(10¹⁶+1) + 10⁸)
= 1 / 200000000.00000001
= 5.0e−09 ← correcto
Diferencia relativa entre ambas: ~49 %
Dígitos significativos de la ingenua: ~0Las dos expresiones son idénticas en ℝ. En float64 una es útil y la otra no.
Dos fórmulas algebraicamente iguales con precisión muy distinta.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | x, formula_ingenua_sqrt(x^2+1)-x, formula_estable_1/(sqrt(x^2+1)+x), diferencia, error_relativo_de_la_ingenua |
| Comprobaciones (0) | — |
compmath run 032Fórmula cuadrática, cálculo de varianza, diferencias finitas, funciones especiales y cualquier resta de magnitudes cercanas. expm1 y log1p existen exactamente por esto.
9780898718027, pendiente de resolver.math.expm1 y math.log1p — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Los subnormales extienden el rango hacia el cero a costa de precisión; el overflow produce infinito y no error.
float64: max ≈ 1.797e308, min normal ≈ 2.225e−308, min subnormal = 5e−324
inf − inf = NaN, 0/0 = NaN, NaN != NaNEl rango de float64 tiene tres zonas. Los normales van de 2.2·10⁻³⁰⁸ a 1.8·10³⁰⁸ con la precisión completa de 53 bits. Por debajo del mínimo normal están los subnormales, que renuncian al bit implícito para poder acercarse más al cero: llegan hasta 5·10⁻³²⁴ pero con precisión progresivamente menor. Por encima del máximo está el infinito.
Los subnormales existen para que la resta de dos números cercanos nunca dé cero cuando los números son distintos, propiedad conocida como gradual underflow. Sin ellos, a − b == 0 podría ser cierto con a != b, lo que rompe algoritmos que dividen por esa diferencia. La contrapartida es de rendimiento: en muchas CPU las operaciones con subnormales son órdenes de magnitud más lentas, y por eso los frameworks de deep learning ofrecen el modo flush-to-zero.
El desbordamiento no lanza excepción: produce inf, y el cálculo continúa. Esto es deliberado —permite terminar una operación vectorizada y detectar el problema al final— pero exige comprobar los resultados. El NaN aparece en las operaciones indeterminadas (inf − inf, 0/0, √(−1)) y tiene una propiedad que sorprende: no es igual a sí mismo. nan == nan es False, y por eso hay que usar math.isnan.
En entrenamiento de redes, la secuencia típica es: un gradiente crece, produce inf, el inf participa en una resta y produce NaN, y el NaN contamina todos los pesos en una sola actualización. Detectarlo exige comprobar explícitamente; el programa no avisa.
Los tres límites y la propiedad del NaN.
max float64 1.7976931348623157e+308
max × 2 inf ← sin excepción
min normal 2.2250738585072014e−308
min subnormal 5e−324
min subnormal / 2 0.0 ← underflow a cero
inf − inf nan
nan == nan False ← usar math.isnanUn inf en un cálculo no detiene nada. Se propaga en silencio hasta que alguien comprueba.
Límites del float64 y el paso por subnormales.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | max_float, max*2_da_inf, min_normal, min_subnormal, min_subnormal/2 |
| Comprobaciones (2) | underflow_a_cero, inf-inf_es_nan |
compmath run 033Depuración de entrenamientos que producen NaN, control de estabilidad en softmax y logaritmos, y validación de pipelines numéricos. La estabilización de softmax (clase 321) existe para evitar exactamente este overflow.
sys.float_info — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Los errores de redondeo se acumulan al sumar muchos términos; la suma compensada los recupera.
error de la suma ingenua: O(n·ε)
error de la suma compensada (Kahan): O(ε)Cada operación en punto flotante introduce un error de a lo sumo medio ULP. Al sumar n términos, esos errores se acumulan, y en el peor caso el error total crece proporcionalmente a n·ε. Con un millón de sumandos y ε ≈ 2·10⁻¹⁶, el error relativo puede llegar a 2·10⁻¹⁰: se han perdido seis dígitos por el simple hecho de sumar muchas veces.
La suma compensada de Kahan (1965) resuelve el problema arrastrando explícitamente el error de cada paso: guarda en una variable auxiliar lo que se perdió al redondear y lo reinyecta en la siguiente suma. El coste es cuatro operaciones en lugar de una, y el error pasa a ser independiente de n. Python ofrece math.fsum, que usa un algoritmo aún más preciso y devuelve la suma correctamente redondeada.
El orden de la suma también importa. Sumar de menor a mayor magnitud reduce el error, porque evita que los términos pequeños caigan por debajo del ULP del acumulado. Es el motivo por el que algunas bibliotecas ordenan antes de sumar en cálculos críticos.
En deep learning esto aparece al acumular la pérdida sobre un lote grande o al reducir gradientes entre dispositivos. Los frameworks acumulan en float32 aunque el cálculo sea en float16 precisamente para que el acumulador tenga más precisión que los sumandos.
Acumular un millón de veces 0.1.
Suma ingenua de 1e6 términos de 0.1:
resultado 99999.99999808663
exacto 100000.0
error abs 1.91e−03
error rel 1.91e−08 ← se perdieron ~8 dígitos
math.fsum([0.1]*1000) − 100.0 = 0.0
(correctamente redondeada)
Coste: fsum es más lento, pero el error no crece con n.Cómo crece el error al sumar 10^6 veces un valor no representable.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | n_sumas, suma_acumulada, valor_exacto, error_absoluto, error_relativo, suma_compensada_fsum |
| Comprobaciones (0) | — |
compmath run 034Sumas de grandes conjuntos de datos, integración numérica, acumulación de pérdida y reducción de gradientes. math.fsum, numpy.sum con dtype ampliado y la acumulación en float32 responden a este problema.
10.1145/363707.363723 verificado en Crossref (2026-08-19).math.fsum — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).El número de condición mide cuánto amplifica el problema el error de la entrada, con independencia del algoritmo.
κ(f, x) = |x·f′(x) / f(x)|
error relativo de salida ≈ κ · error relativo de entradaEl condicionamiento es una propiedad del problema, no de cómo se resuelva. Formaliza la pregunta: si perturbo la entrada un 0.001 %, ¿cuánto cambia la salida? El número de condición es el factor de amplificación. Si vale 1, el problema conserva la precisión; si vale 10⁸, un error de entrada en el dígito 16 se convierte en un error en el dígito 8 de la salida.
Para una función de una variable, κ = |x·f′(x)/f(x)|. La fórmula dice algo intuitivo: el problema está mal condicionado donde la función es muy sensible en relación a su propio valor, típicamente cerca de sus ceros. f(x) = 1 − x cerca de x = 1 tiene condición enorme: es la versión analítica de la cancelación catastrófica.
La consecuencia práctica es dura y conviene aceptarla pronto: ningún algoritmo puede resolver con precisión un problema mal condicionado. Si la entrada tiene 16 dígitos y la condición es 10⁸, la salida tiene como mucho 8 dígitos correctos, use uno el método que use. Buscar un algoritmo mejor es buscar en el sitio equivocado; hay que reformular el problema.
En álgebra lineal el mismo concepto aparece como el número de condición de una matriz —cociente entre el mayor y el menor valor singular (clase 132)—, y en machine learning como la razón entre el mayor y el menor autovalor del Hessiano, que determina lo lento que converge el descenso de gradiente (clase 244).
Condición de f(x) = 1 − x en tres puntos.
κ(x) = |x · f′(x) / f(x)| = |x / (1 − x)|
x = 0.5 f(x) = 0.5 κ = 1.0 bien condicionado
x = 0.99 f(x) = 0.01 κ = 99 empieza a amplificar
x = 1e−8 f(x) ≈ 1.0 κ = 1e−8 muy bien condicionado
x = 0.9999 f(x) = 1e−4 κ = 9999
un error de entrada de 1e−16 → error de salida de 1e−12La condición no depende de cómo se calcule 1 − x: depende del problema.
Número de condición de una función: sensibilidad del problema.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 035Diagnóstico de sistemas lineales (parte 05), regularización (ridge mejora el condicionamiento, clase 283) y análisis de convergencia de optimizadores. Es la pregunta previa a elegir método.
9780898718027, pendiente de resolver.9780898719574 verificado en International ISBN Agency (2026-08-19).Un algoritmo es estable si no amplifica el error más allá de lo que el condicionamiento del problema exige.
raíz pequeña ingenua: (−b + √(b²−4ac)) / 2a
raíz pequeña estable: 2c / (−b − √(b²−4ac))
invariante: r₁·r₂ = c/aEstabilidad y condicionamiento son propiedades distintas que se confunden constantemente. El condicionamiento dice cuánta precisión permite el problema; la estabilidad dice cuánta precisión conserva el algoritmo. Un algoritmo estable aplicado a un problema mal condicionado dará un resultado impreciso, y eso no es culpa del algoritmo. Un algoritmo inestable aplicado a un problema bien condicionado dará un resultado impreciso, y eso sí lo es.
La fórmula cuadrática es el ejemplo canónico. Cuando b² ≫ 4ac, la raíz cuadrada del discriminante es casi igual a |b|, así que una de las dos raíces se obtiene restando dos números casi iguales: cancelación catastrófica. El problema —encontrar las raíces— está perfectamente bien condicionado; el algoritmo estándar es inestable para una de ellas.
La solución usa una identidad elemental: el producto de las raíces es c/a. Calculada la raíz grande de forma estable (la que no sufre cancelación), la pequeña se obtiene dividiendo. El invariante que se usa para calcularla sirve además como verificación: si r₁·r₂ no da c/a, hay un error.
Este patrón —usar un invariante conocido tanto para calcular como para verificar— es uno de los hábitos más transferibles del programa. Aparece en la ortogonalidad de QR (clase 130), en la conservación de la masa de un plan de transporte (clase 346) y en la suma de probabilidades de una softmax (clase 321).
Raíces de x² + 10⁸x + 1 = 0.
a = 1, b = 1e8, c = 1
√(b² − 4ac) = 99999999.99999999
Raíz grande (estable en ambos métodos):
r₂ = (−b − √Δ)/2a = −1e8
Raíz pequeña:
ingenua: (−b + √Δ)/2a = −7.45e−09 ← cancelación
estable: 2c/(−b − √Δ) = −1.0e−08 ← correcta
Verificación con el invariante r₁·r₂ = c/a = 1:
ingenua: −7.45e−09 × −1e8 = 0.745 ✗
estable: −1.0e−08 × −1e8 = 1.0 ✓Misma raíz cuadrática por dos algoritmos: uno estable, otro no.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | raiz_pequena_ingenua, raiz_pequena_estable, raiz_grande, producto_raices_ingenua, producto_raices_estable, producto_teorico_c/a |
| Comprobaciones (0) | — |
compmath run 036Selección de algoritmos numéricos, implementación de fórmulas cerradas y verificación de resultados. Es la razón por la que se prefiere QR frente a las ecuaciones normales en mínimos cuadrados (clase 234).
9780898718027, pendiente de resolver.Decimal ofrece precisión decimal declarada y exacta a cambio de velocidad.
Decimal('0.1') · 3 == Decimal('0.3') → True
0.1 * 3 == 0.3 → FalseEl módulo decimal implementa aritmética de punto flotante en base 10 con precisión configurable. Su ventaja no es tener más dígitos: es que las fracciones decimales que escribimos —0.1, 0.05, 19.99— son exactamente representables, porque la base coincide con la de nuestra notación.
Eso resuelve de raíz el problema del dinero. Decimal('0.1') 3 da exactamente Decimal('0.3'), mientras que 0.1 3 en float da 0.30000000000000004. Además, Decimal permite declarar la precisión (getcontext().prec) y el modo de redondeo, de modo que el comportamiento queda documentado en el código en lugar de depender del hardware.
El coste es real: Decimal es entre 50 y 100 veces más lento que float porque no se apoya en la FPU. Para un cálculo científico con millones de operaciones es inaceptable; para calcular el total de una factura es irrelevante.
Un detalle que atrapa a muchos: Decimal(0.1) —con un float como argumento— hereda el error del float y da 0.1000000000000000055511151231257827. Hay que construirlo desde cadena: Decimal('0.1'). La firma acepta ambos precisamente para poder inspeccionar qué guarda realmente un float, que es lo que hace el laboratorio de la clase 029.
Exactitud decimal frente a binaria.
getcontext().prec = 50
Decimal(1)/Decimal(3) =
0.33333333333333333333333333333333333333333333333333 (50 dígitos)
1/3 (float) = 0.3333333333333333 (16 dígitos)
Decimal('0.1') * 3 == Decimal('0.3') → True ✓
0.1 * 3 == 0.3 → False ✗
Trampa:
Decimal(0.1) → 0.1000000000000000055511151231257827...
Decimal('0.1') → 0.1 ✓Decimal con precisión declarada frente a float.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | precision_configurada, 1/3_float |
| Comprobaciones (1) | es_exactamente_0.3 |
compmath run 037Contabilidad, facturación, impuestos, cálculo de intereses y cualquier dominio con reglas de redondeo normativas. Es el estándar en sistemas financieros.
decimal — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Fraction guarda dos enteros y da aritmética racional exacta, útil como patrón de referencia.
Fraction(1,3) + Fraction(1,6) == Fraction(1,2) → exacto
H_n = Σ 1/k (número armónico)Fraction representa un racional como un par de enteros de precisión arbitraria en forma reducida. Toda operación —suma, producto, comparación— es exacta, sin excepciones y sin necesidad de declarar precisión. Es la aritmética más fiel que ofrece la biblioteca estándar.
Su papel en este programa no es sustituir al float en cálculo real: es servir de patrón de referencia. Para medir cuánto error comete un cálculo en punto flotante hace falta conocer el valor exacto, y Fraction lo proporciona en cualquier expresión que solo use operaciones racionales. El laboratorio calcula el número armónico H₁₀ por ambos caminos y compara.
El coste es de crecimiento: los denominadores se multiplican y crecen muy rápido. H₁₀ ya tiene denominador 2520, y H₁₀₀ tiene cientos de dígitos. Para cálculos largos, la aritmética exacta deja de ser viable no por lentitud de cada operación sino por el tamaño de los números.
Una utilidad práctica: Fraction(0.1) muestra el racional exacto que guarda un float, y Fraction(x).limit_denominator(n) encuentra la mejor aproximación racional con denominador acotado. Esto último es la base de la aproximación por fracciones continuas y explica por qué 22/7 y 355/113 son buenas aproximaciones de π.
Número armónico H₁₀ exacto frente a flotante.
H₁₀ = 1 + 1/2 + 1/3 + ... + 1/10
Exacto (Fraction): 7381/2520
Como float: 2.9289682539682538
Suma en float: 2.9289682539682538
Diferencia: 0.0 (en este caso coinciden)
Denominador: 2520 = mcm(1..10)
Fraction(0.1) == Fraction(1, 10) → False
porque el float 0.1 no es exactamente 1/10Que coincidan con diez términos no significa que coincidan con un millón: el error crece con n (clase 034).
Fraction mantiene exactitud donde float ya perdió información.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | H_10_float, H_10_exacto_como_float, error, denominador |
| Comprobaciones (1) | float_desde_fraction |
compmath run 038Verificación de implementaciones numéricas, cálculo simbólico ligero, probabilidades exactas en combinatoria y generación de casos de prueba con valor esperado conocido.
fractions — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780199219865 verificado en International ISBN Agency (2026-08-19).La suma en punto flotante no es asociativa; reproducir un resultado exige fijar el orden de las operaciones.
(a + b) + c ≠ a + (b + c) en float64
la suma es conmutativa pero no asociativaEn los reales, la suma es asociativa: agrupar de una forma u otra da el mismo resultado. En punto flotante no lo es, porque cada suma parcial se redondea y el redondeo depende de las magnitudes involucradas. El ejemplo clásico usa 1e16, 1.0 y −1e16: sumando de izquierda a derecha, el 1.0 se pierde por estar bajo el ULP de 1e16; sumando en otro orden, sobrevive.
Esto tiene una consecuencia incómoda para la reproducibilidad: fijar la semilla aleatoria no basta. Dos ejecuciones del mismo código pueden dar resultados distintos si el orden de las sumas cambia, y el orden cambia con el número de hilos, la arquitectura de la GPU, la versión de la biblioteca BLAS o incluso la disponibilidad de instrucciones vectoriales.
Por eso los frameworks de deep learning ofrecen modos deterministas explícitos (torch.use_deterministic_algorithms(True)), que fuerzan implementaciones con orden fijo a costa de rendimiento. Sin ese modo, el mismo entrenamiento con la misma semilla puede divergir tras unos miles de pasos —no porque haya aleatoriedad extra, sino porque las diferencias de redondeo se amplifican.
El programa adopta la consecuencia como norma: todas las demostraciones son deterministas en un solo hilo y con orden de operaciones fijo, y un test comprueba que dos ejecuciones devuelven exactamente el mismo diccionario. Esa comprobación sería imposible de garantizar en cálculo paralelo sin medidas adicionales.
El mismo conjunto de sumandos en dos órdenes.
valores = [1e16, 1.0, −1e16, 1.0]
De izquierda a derecha:
1e16 + 1.0 = 1e16 ← el 1.0 cae bajo el ULP
1e16 − 1e16 = 0.0
0.0 + 1.0 = 1.0 resultado: 1.0
De derecha a izquierda:
1.0 − 1e16 = −1e16
−1e16 + 1.0 = −1e16
−1e16 + 1e16 = 0.0 resultado: 0.0
math.fsum(valores) = 2.0 ← el valor exacto
¿Asociativa en ℝ? Sí
¿Asociativa en float64? NoEl orden de la suma cambia el resultado en punto flotante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | suma_de_izquierda_a_derecha, suma_de_derecha_a_izquierda, suma_compensada |
| Comprobaciones (3) | coinciden, suma_es_asociativa_en_R, suma_es_asociativa_en_float64 |
compmath run 039Reproducibilidad de experimentos, comparación de implementaciones, depuración de divergencias entre entornos y publicación de resultados verificables. Es la razón por la que los papers serios publican semilla, versión y hardware.
10.1145/103162.103163 verificado en Crossref (2026-08-19).Auditar una expresión es medir cuántos dígitos significativos pierde cada forma de escribirla.
dígitos perdidos ≈ −log₁₀(|ingenua − estable| / |estable|)
formas estables: expm1, log1p, conjugadoEl capstone convierte en herramienta todo lo anterior. Un auditor de precisión toma una expresión, la evalúa por su forma directa y por una forma algebraicamente equivalente pero numéricamente estable, y reporta cuántos dígitos significativos separa a ambas. Ese número es la medida honesta de cuánta confianza merece la primera forma.
Las tres expresiones auditadas son las que más aparecen en la práctica. exp(x) − 1 para x pequeño pierde precisión porque exp(x) se acerca a 1 y la resta cancela; expm1 la calcula directamente. log(1 + x) sufre lo mismo cuando 1 + x redondea a 1; log1p lo evita. Y √(x²+1) − x es el caso de la clase 032.
Que estas funciones existan en la biblioteca estándar de todos los lenguajes serios no es casualidad: son la respuesta institucionalizada a problemas de cancelación conocidos desde los años sesenta. Reconocer cuándo usarlas es parte del oficio.
La regla que cierra la parte: toda diferencia de magnitudes cercanas necesita una forma alternativa, y toda implementación numérica publicada debería declarar cuántos dígitos garantiza. El programa aplica esa regla a sí mismo: cada demostración devuelve claves de verificación en lugar de pedir confianza.
Auditoría de tres expresiones.
expresión x ingenua estable dígitos perdidos
exp(x)−1 1e−10 1.000000e−10 1.000000e−10 ~6
log(1+x) 1e−12 1.000089e−12 1.000000e−12 ~4
√(x²+1)−x 1e7 5.000000e−08 5.000000e−08 ~9
Regla operativa:
si la expresión contiene una resta de cantidades que pueden
acercarse, buscar la forma alternativa ANTES de implementarla.Los números concretos dependen del valor de x: el auditor los mide, no los supone.
Capstone: auditoría de precisión de una expresión numérica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | expresiones_auditadas |
| Comprobaciones (0) | — |
compmath run 040Revisión de código numérico, elección de biblioteca, validación de una reimplementación y documentación de precisión en una API científica.
9780898718027, pendiente de resolver.9783319765266 verificado en International ISBN Agency (2026-08-19).Manipulación simbólica con criterio y la función como objeto central: dominio, imagen, composición, inversa y familias lineal, cuadrática, exponencial y logarítmica.
El álgebra tiene mala fama porque se enseña como manipulación de símbolos sin objeto. Esta parte invierte el orden: primero el objeto —la función—, después las reglas para manipularlo. Una función no es una fórmula: es una asignación que a cada elemento de un dominio le hace corresponder exactamente uno de un codominio. La fórmula es solo una de las formas de describirla, y el dominio forma parte de su identidad.
Las clases 041 a 051 construyen la maquinaria simbólica: términos semejantes, propiedades, ecuaciones, sistemas, polinomios, factorización, cuadráticas, exponentes y logaritmos. El énfasis no está en resolver rápido sino en saber qué operación es reversible. Dividir por una expresión que puede anularse pierde soluciones; elevar al cuadrado introduce soluciones falsas. Cada paso de un despeje es un compromiso, y hay que saber cuál.
Las clases 052 a 059 son el corazón de la parte. Dominio y rango, familias lineal, cuadrática, exponencial y logarítmica, composición, inversa y funciones por tramos. Estas cinco familias cubren casi todo el modelado elemental, y saber reconocer cuál describe un conjunto de datos es una competencia directamente evaluable: el capstone 060 lo hace con residuos.
Dos ideas de esta parte reaparecen literalmente en deep learning. La primera es la composición: una red neuronal es f_n(...f_2(f_1(x))), una composición de funciones parametrizadas, y la regla de la cadena de la parte 07 es la derivada de esa composición. La segunda es que el logaritmo convierte productos en sumas, que es exactamente por qué toda función de pérdida probabilística se escribe en escala logarítmica: multiplicar diez mil probabilidades produce underflow, sumar diez mil logaritmos no.
La función por tramos de la clase 059 merece atención especial: ReLU, la activación más usada en deep learning, es literalmente una función por tramos, y su comportamiento —derivada 1 en un lado, 0 en el otro— se entiende aquí antes de que aparezca con nombre técnico.
Al terminar la parte deberías poder mirar una curva y decir qué familia la describe, mirar una fórmula y decir cuál es su dominio, y mirar una composición y decir en qué orden se aplican sus piezas.
Una red neuronal es una composición de funciones parametrizadas. La sigmoide, la softmax y la log-verosimilitud son álgebra de exponenciales y logaritmos.
| Término | Definición | Clase |
|---|---|---|
| Composición | (g∘f)(x) = g(f(x)). No es conmutativa. Es la estructura de una red neuronal. | 057 |
| Desigualdad | Relación de orden entre expresiones. Multiplicar por un negativo invierte su sentido. | 044 |
| Discriminante | b² − 4ac. Su signo determina la naturaleza de las raíces antes de calcularlas. | 049 |
| Dominio | Conjunto de entradas válidas de una función. Forma parte de su definición, no es un detalle. | 052 |
| Ecuación equivalente | Ecuación con el mismo conjunto solución. Se obtiene aplicando operaciones reversibles a ambos lados. | 043 |
| Escala logarítmica | Eje donde distancias iguales representan factores iguales. Convierte exponenciales en rectas. | 056 |
| Factorización | Escritura de un polinomio como producto. Sus raíces se leen directamente de los factores. | 047 |
| Función inversa | Función que deshace a otra. Existe solo si la original es inyectiva. Distinta del recíproco 1/f. | 058 |
| Función por tramos | Función definida por reglas distintas en subconjuntos del dominio. ReLU es el caso más usado en IA. | 059 |
| Grado de un polinomio | Mayor exponente con coeficiente no nulo. El grado del producto es la suma de los grados. | 046 |
| Imagen (rango) | Conjunto de valores que la función realmente alcanza. | 052 |
| Logaritmo | Exponente al que hay que elevar la base para obtener el argumento. Convierte productos en sumas. | 051 |
| Pendiente | Razón de cambio constante de una función lineal: cuánto cambia y por cada unidad de x. | 053 |
| Propiedad distributiva | a(b+c) = ab + ac. Es la propiedad que conecta suma y producto y la que justifica la regla de los signos. | 042 |
| Regla de Horner | Esquema de evaluación de polinomios que usa n multiplicaciones en lugar de n(n+1)/2. | 046 |
| Sistema compatible determinado | Sistema con solución única. En 2×2 equivale a determinante no nulo. | 045 |
| Suma de residuos al cuadrado (SSE) | Σ(observado − predicho)². Criterio para comparar modelos ajustados a los mismos datos. | 060 |
| Tiempo de duplicación | Tiempo que tarda una cantidad con crecimiento exponencial en duplicarse: ln 2 / ln(base). | 055 |
| Término semejante | Términos con la misma parte literal y los mismos exponentes. Solo ellos pueden sumarse entre sí. | 041 |
| Vértice | Punto extremo de una parábola, situado en x = −b/2a. Es el punto medio de las raíces. | 054 |
Solo se suman términos con la misma parte literal; simplificar reduce operaciones sin cambiar el valor.
3x²y + 5x²y = 8x²y
términos semejantes ⟺ misma parte literal con los mismos exponentesUna expresión algebraica es una receta de cálculo escrita con símbolos. Simplificarla no cambia lo que calcula: cambia cuántas operaciones necesita para calcularlo. Esa es la utilidad concreta de reducir términos semejantes, y es la misma idea que la clase 001 introdujo comparando la suma iterativa con la fórmula cerrada.
Dos términos son semejantes si tienen idéntica parte literal: mismas variables con los mismos exponentes. 3x²y y 5x²y lo son; 3x²y y 3xy² no, aunque usen las mismas letras. La razón es la propiedad distributiva: 3x²y + 5x²y = (3+5)x²y solo porque el factor común existe.
La verificación es inmediata y conviene hacerla siempre: evaluar la expresión original y la simplificada en un punto arbitrario y comprobar que coinciden. Si difieren, la simplificación introdujo un error. Un solo punto no demuestra equivalencia —eso lo recuerda la clase 019— pero detecta la mayoría de los errores de manipulación.
El hábito que instala esta clase es de lectura: antes de operar, identificar qué términos pueden combinarse. En expresiones grandes, agrupar por parte literal antes de sumar reduce errores más que cualquier técnica de cálculo.
Reducir una expresión de cuatro términos a dos.
original: 3x²y − 2xy + 5x²y + 7xy
agrupar: (3x²y + 5x²y) + (−2xy + 7xy)
simplificada: 8x²y + 5xy
Verificación con x = 2, y = 3:
original: 3·4·3 − 2·2·3 + 5·4·3 + 7·2·3 = 36 − 12 + 60 + 42 = 126
simplificada: 8·4·3 + 5·2·3 = 96 + 30 = 126 ✓
Operaciones: 4 términos → 2 términosTérminos semejantes y evaluación de una expresión.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | evaluada_original, evaluada_simplificada, terminos_originales, terminos_tras_reducir |
| Comprobaciones (1) | equivalentes |
compmath run 041Simplificar una expresión antes de implementarla reduce operaciones y errores de redondeo. Es la versión manual de lo que hace un compilador al optimizar y de lo que hacen los frameworks al fusionar operaciones en un grafo de cómputo.
10.1007/978-1-4612-0335-5, pendiente de resolver.Conmutativa, asociativa y distributiva son válidas en ℝ, pero la asociatividad falla en punto flotante.
conmutativa: a + b = b + a, ab = ba
asociativa: (a+b)+c = a+(b+c)
distributiva: a(b+c) = ab + acLas tres propiedades definen la estructura de cuerpo de los números reales, y de ellas se deduce todo el álgebra elemental. La distributiva es la más productiva: conecta la suma con el producto y es la que justifica factorizar, desarrollar y —como vio la clase 002— la regla de los signos.
Conviene notar qué no cumplen ciertas operaciones. La resta no es conmutativa ni asociativa. La división tampoco. La potenciación no es conmutativa (2³ ≠ 3²) ni asociativa (asocia por la derecha, clase 010). Y en la parte 05 aparecerá que el producto de matrices es asociativo pero no conmutativo, lo que cambia por completo cómo se manipulan las expresiones.
El hallazgo incómodo de esta clase es que la asociatividad de la suma falla en punto flotante. (1e16 + 1.0) − 1e16 da 0.0, mientras que 1e16 + (1.0 − 1e16) da 1.0. No es un bug: es la consecuencia directa de que cada suma parcial se redondea, tal como explicó la clase 039.
La conclusión práctica es que las identidades algebraicas son ciertas en ℝ y solo aproximadamente ciertas en float. Reordenar una expresión para simplificarla puede cambiar su resultado numérico, y en cálculo sensible ese reordenamiento debe hacerse con criterio, no automáticamente.
Las tres propiedades y su límite en flotante.
a = 2.5, b = −4.0, c = 7.25
conmutativa suma a + b == b + a True
conmutativa producto a·b == b·a True
asociativa en ℝ (a+b)+c == a+(b+c) True
distributiva a(b+c) == ab + ac True (isclose)
resta no conmutativa a − b == b − a False
Asociatividad en float64:
(1e16 + 1.0) − 1e16 = 0.0
1e16 + (1.0 − 1e16) = 1.0
¿iguales? NoConmutativa, asociativa y distributiva: válidas en ℝ, no siempre en float.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (6) | conmutativa_suma, conmutativa_producto, asociativa_suma_en_R, distributiva, asociativa_falla_en_float, resta_no_es_conmutativa |
compmath run 042Justifica toda manipulación algebraica y explica por qué un compilador con optimizaciones agresivas de coma flotante (-ffast-math) puede cambiar resultados.
10.1145/103162.103163 verificado en Crossref (2026-08-19).Resolver una ecuación es aplicar operaciones reversibles hasta aislar la incógnita.
ax + b = c ⟹ x = (c − b)/a, a ≠ 0
residuo = ax + b − c = 0Cada paso de un despeje transforma la ecuación en otra equivalente: con el mismo conjunto solución. Sumar o restar la misma cantidad a ambos lados siempre preserva la equivalencia. Multiplicar o dividir por una cantidad no nula, también. La condición «no nula» es la que hay que vigilar: dividir por una expresión que puede anularse pierde soluciones sin avisar.
Los casos degenerados no son curiosidades de examen. Si a = 0, la ecuación 0·x = 0 tiene infinitas soluciones y 0·x = 5 no tiene ninguna. En una implementación, ambos casos deben detectarse y reportarse; lanzar una división por cero es peor que devolver un diagnóstico. La clase 113 encontrará la versión matricial del mismo fenómeno.
Otras operaciones no son reversibles y hay que declararlo. Elevar al cuadrado ambos lados puede introducir soluciones falsas: de x = 2 se pasa a x² = 4, que además admite x = −2. Por eso, tras elevar al cuadrado, hay que comprobar cada solución candidata en la ecuación original.
La verificación cierra el proceso y es innegociable: sustituir y comprobar que el residuo es cero. Ese hábito —calcular el residuo en lugar de confiar en el procedimiento— es el mismo que se usará para sistemas lineales (clase 113), métodos iterativos (clase 233) y ajuste por mínimos cuadrados (clase 131).
Resolver 7x − 3 = 25 con verificación y casos degenerados.
7x − 3 = 25
7x = 28 (sumar 3, reversible)
x = 4 (dividir por 7 ≠ 0, reversible)
Verificación: 7·4 − 3 = 25 ✓
Residuo: 7·4 − 3 − 25 = 0 ✓
Casos degenerados (a = 0):
0·x = 0 → infinitas soluciones
0·x = 5 → ninguna soluciónResolver ax + b = c y verificar el residuo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | x, residuo |
| Comprobaciones (1) | sin_solucion_si_a_es_0 |
compmath run 043Todo despeje analítico, la condición de primer orden ∇f = 0 en optimización y la resolución de sistemas lineales. El residuo es el criterio de aceptación universal.
10.1007/978-1-4612-0335-5, pendiente de resolver.Multiplicar o dividir una desigualdad por un número negativo invierte su sentido.
a < b y k > 0 ⟹ ka < kb
a < b y k < 0 ⟹ ka > kbUna desigualdad describe un conjunto, no un punto. La solución de −3x + 4 > 10 no es un número: es el intervalo (−∞, −2). Esa diferencia de naturaleza explica por qué el resultado se expresa como intervalo o como condición, y por qué conviene comprobarlo con un valor de prueba dentro y otro fuera.
La regla del signo tiene una justificación geométrica clara. Multiplicar por un negativo refleja la recta numérica respecto al origen, y una reflexión invierte el orden: lo que estaba a la izquierda queda a la derecha. Es la misma «media vuelta» que la clase 002 usó para explicar el producto de signos.
Al resolver, el hábito seguro es despejar sin dividir por negativos: pasar los términos de modo que el coeficiente de la incógnita quede positivo. Si no se puede evitar, hay que invertir el símbolo y marcarlo explícitamente, porque es el error más frecuente y el más silencioso: produce el intervalo complementario, que suele parecer razonable.
Las desigualdades son el lenguaje de las restricciones en optimización. La parte 12 escribe g(x) ≤ 0 para cada restricción, y las condiciones KKT (clase 257) tratan por separado las restricciones activas —donde se cumple la igualdad— de las inactivas.
Resolver −3x + 4 > 10 y comprobar con dos valores.
−3x + 4 > 10
−3x > 6 (restar 4)
x < −2 (dividir por −3: SE INVIERTE)
Frontera: x = −2
Prueba dentro (x = −5): −3(−5) + 4 = 19 > 10 ✓
Prueba fuera (x = 0): −3(0) + 4 = 4 > 10 ✗
Solución: (−∞, −2)Multiplicar por un negativo invierte el sentido de la desigualdad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | frontera |
| Comprobaciones (2) | verifica_x=-5, verifica_x=0 |
compmath run 044Restricciones en optimización (parte 12), rangos de validez de un modelo, umbrales de decisión de un clasificador y condiciones de estabilidad numérica (h < 2/|λ|).
9780511804441 verificado en International ISBN Agency (2026-08-19).Un sistema 2×2 tiene solución única si y solo si su determinante es no nulo.
det = a₁b₂ − a₂b₁
x = (c₁b₂ − c₂b₁)/det, y = (a₁c₂ − a₂c₁)/detUn sistema de dos ecuaciones lineales con dos incógnitas admite tres lecturas geométricas: dos rectas que se cortan en un punto (solución única), dos rectas paralelas (sin solución) o dos rectas coincidentes (infinitas soluciones). El determinante distingue los casos: si es no nulo, las rectas tienen pendientes distintas y se cortan.
La regla de Cramer da las soluciones como cocientes de determinantes. Es elegante y útil para 2×2, pero no escala: para n×n requiere calcular n+1 determinantes, con un coste factorial si se hace por la definición. La parte 05 introduce la eliminación de Gauss, que resuelve el mismo problema en O(n³) y es lo que usan las bibliotecas reales.
El determinante no solo dice si hay solución: dice cuán bien condicionado está el problema. Un determinante muy cercano a cero significa rectas casi paralelas, y entonces una perturbación mínima de los coeficientes mueve mucho el punto de corte. Es el número de condición de la clase 035 aplicado a sistemas, y en la parte 06 se medirá correctamente con los valores singulares.
La verificación sigue siendo la misma: sustituir la solución en ambas ecuaciones y comprobar los residuos. Con dos ecuaciones es barato; con doscientas es la única forma de saber si el solver hizo su trabajo.
Resolver el sistema 2x + 3y = 12, 4x − y = 10.
det = 2·(−1) − 4·3 = −2 − 12 = −14 ≠ 0 → solución única
x = (12·(−1) − 10·3) / (−14) = (−12 − 30)/(−14) = 3
y = (2·10 − 4·12) / (−14) = (20 − 48)/(−14) = 2
Verificación:
2·3 + 3·2 = 6 + 6 = 12 ✓
4·3 − 1·2 = 12 − 2 = 10 ✓Si el determinante hubiera sido 0, habría que distinguir entre sistema incompatible (rectas paralelas) y compatible indeterminado (rectas coincidentes).
Sistema 2x2 por determinantes (regla de Cramer) y verificación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | determinante, x, y, verificacion_1, verificacion_2 |
| Comprobaciones (1) | unica_solucion |
compmath run 045Es el caso 2×2 del problema central de la parte 05. Cualquier ajuste lineal, sistema de equilibrio o intersección geométrica se reduce a esto en dimensión baja.
9781733146678 verificado en International ISBN Agency (2026-08-19).El esquema de Horner evalúa un polinomio de grado n con n multiplicaciones en lugar de n(n+1)/2.
p(x) = aₙxⁿ + ... + a₁x + a₀
Horner: p(x) = (...((aₙx + aₙ₋₁)x + aₙ₋₂)x + ...) + a₀
grado(p·q) = grado(p) + grado(q)Los polinomios son las funciones más simples después de las lineales, y su aritmética es la de los enteros con otra notación: se suman término a término y se multiplican por convolución de coeficientes. Esa operación —multiplicar polinomios es convolucionar sus coeficientes— es literalmente la misma que la convolución discreta de la clase 271, y es la razón por la que la FFT sirve para multiplicar polinomios grandes.
Evaluar un polinomio de forma ingenua calcula cada potencia por separado: x², x³, x⁴... lo que suma n(n+1)/2 multiplicaciones. El esquema de Horner factoriza sucesivamente y necesita solo n multiplicaciones y n sumas. Para grado 100, eso son 100 operaciones frente a 5050.
Horner no es solo más rápido: es más estable numéricamente, porque evita calcular potencias grandes que luego se cancelan con coeficientes pequeños. Es el algoritmo que usan las bibliotecas para evaluar polinomios, incluidos los que aproximan sin, exp o log internamente.
El grado del producto es la suma de los grados, hecho que parece trivial y tiene consecuencias: multiplicar dos polinomios de grado 50 da uno de grado 100, y por eso el coste de las operaciones simbólicas crece rápido. Es la razón por la que el álgebra computacional es cara.
Producto y evaluación de p(x) = x² − 3x + 2.
p = x² − 3x + 2 (grado 2)
q = 2x + 1 (grado 1)
p·q: convolución de [1,−3,2] con [2,1]
= 2x³ − 5x² + x + 2 (grado 3 = 2 + 1) ✓
Evaluar p(3):
directo: 3² − 3·3 + 2 = 9 − 9 + 2 = 2
Horner: ((1)·3 + (−3))·3 + 2 = (0)·3 + 2 = 2 ✓
multiplicaciones directas: 3 (x², y dos productos)
multiplicaciones Horner: 2Suma, producto y evaluación de polinomios por Horner.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | grado_p, grado_producto, p(3)_horner, p(3)_directo, multiplicaciones_horner |
| Comprobaciones (0) | — |
compmath run 046Evaluación de funciones especiales en bibliotecas matemáticas, interpolación (clase 225), ajuste polinómico y aritmética de precisión arbitraria. La convolución de coeficientes es la misma operación que en señales.
polyval y el esquema de Horner — Algoritmos y complejidad: el tema de esta clase · URL de la fuente primaria comprobada en NumPy developers (2026-08-19).Factorizar expone las raíces; las relaciones de Vieta las conectan con los coeficientes.
x² + bx + c = (x − r₁)(x − r₂)
r₁ + r₂ = −b, r₁·r₂ = cFactorizar un polinomio es escribirlo como producto de factores más simples. Su valor práctico es que las raíces se leen directamente: si p(x) = (x−1)(x−2), las raíces son 1 y 2 sin resolver nada. Esa es la razón por la que factorizar es útil, y no un ejercicio de manipulación.
Las relaciones de Vieta conectan las raíces con los coeficientes sin calcularlas: para x² + bx + c, la suma de las raíces es −b y su producto es c. Esto sirve para dos cosas. Primero, para adivinar factorizaciones con coeficientes enteros: hay que buscar dos números que sumen −b y multipliquen c. Segundo, y más importante en este programa, para verificar: si las raíces calculadas no satisfacen las relaciones, hay un error.
Esa verificación es exactamente la que la clase 036 usó para detectar la inestabilidad de la fórmula cuadrática. El producto de las raíces debe ser c/a; cuando la fórmula ingenua sufre cancelación, la relación de Vieta lo delata de inmediato.
No todo polinomio factoriza sobre los racionales. x² + 1 no tiene raíces reales y x² − 2 las tiene irracionales. El teorema fundamental del álgebra garantiza que sobre los complejos todo polinomio de grado n tiene exactamente n raíces contando multiplicidad, y ese es el marco en el que la factorización siempre existe.
Factorizar x² − 3x + 2 y verificar con Vieta.
Buscar r₁, r₂ con r₁ + r₂ = 3 y r₁·r₂ = 2
Candidatos enteros: 1 y 2
x² − 3x + 2 = (x − 1)(x − 2)
Verificación desarrollando:
(x−1)(x−2) = x² − 2x − x + 2 = x² − 3x + 2 ✓
Vieta:
suma: 1 + 2 = 3 = −b ✓ (b = −3)
producto: 1 · 2 = 2 = c ✓Factorizar x² - 3x + 2 y comprobar las raíces.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | suma_de_raices, suma_teorica_-b, producto_de_raices, producto_teorico_c |
| Comprobaciones (0) | — |
compmath run 047Simplificación de expresiones racionales, análisis de estabilidad por raíces del polinomio característico y verificación de solvers de raíces (clase 036).
El vértice de una parábola está en x = −b/2a y es el punto medio de las raíces.
raíces: x = (−b ± √(b²−4ac)) / 2a
vértice: xᵥ = −b/2a, yᵥ = a·xᵥ² + b·xᵥ + cLa ecuación cuadrática es el primer caso en que la solución exige una fórmula y no solo despejar. Su deducción —completar el cuadrado— es instructiva porque es la misma técnica que aparece en la parte 06 al diagonalizar formas cuadráticas y en la parte 09 al normalizar la densidad de una gaussiana.
El vértice está en x = −b/2a, que es exactamente el punto medio entre las dos raíces. Eso no es coincidencia: la parábola es simétrica respecto a la recta vertical que pasa por su vértice, y las raíces son simétricas respecto a ella. De ahí que el vértice se pueda calcular sin conocer las raíces, y viceversa.
La forma de vértice, a(x − xᵥ)² + yᵥ, hace evidente lo que la forma estándar oculta: el signo de a decide si el vértice es mínimo o máximo, y yᵥ es el valor extremo. En optimización esto es el caso más simple posible de la condición de segundo orden que la parte 08 generaliza con el Hessiano.
La minimización de una cuadrática es el problema modelo de toda la parte 12: la función objetivo x² + 20y² que usan los optimizadores es una cuadrática multivariable, y su mínimo se conoce analíticamente, lo que permite medir cuánto se acerca cada algoritmo.
Analizar 2x² − 8x + 6 = 0.
a = 2, b = −8, c = 6
discriminante = 64 − 48 = 16 > 0 → dos raíces reales
raíces: (8 ± 4)/4 → r₁ = 3, r₂ = 1
vértice: xᵥ = −(−8)/(2·2) = 2
yᵥ = 2·4 − 8·2 + 6 = −2
Comprobación de simetría:
punto medio de las raíces = (3 + 1)/2 = 2 = xᵥ ✓
Como a = 2 > 0, la parábola abre hacia arriba y el vértice es un MÍNIMO.Resolver una cuadrática y contrastar con la forma de vértice.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | discriminante, vertice_x, vertice_y |
| Comprobaciones (1) | vertice_es_punto_medio_de_raices |
compmath run 048Optimización cuadrática (clase 258), ajuste por mínimos cuadrados —cuyo objetivo es una cuadrática— y análisis de trayectorias parabólicas en física y videojuegos.
9780511804441 verificado en International ISBN Agency (2026-08-19).El discriminante clasifica las raíces antes de calcularlas.
Δ = b² − 4ac
Δ > 0: dos raíces reales · Δ = 0: una doble · Δ < 0: dos complejas conjugadasEl discriminante es un ejemplo de una idea muy general: obtener información cualitativa sobre la solución sin resolver. Su signo determina la naturaleza de las raíces, y calcularlo cuesta tres operaciones frente a las siete de la fórmula completa. En una implementación, comprobar el discriminante antes de llamar a sqrt evita una excepción o un NaN.
Los tres casos tienen lectura geométrica: Δ > 0 significa que la parábola corta el eje x en dos puntos; Δ = 0, que lo toca en uno (el vértice está sobre el eje); Δ < 0, que no lo corta. Las raíces complejas no son un artefacto: describen oscilaciones, y en la parte 13 aparecerán como las frecuencias de una señal.
El caso Δ = 0 es delicado numéricamente. Comprobar Δ == 0 con floats casi nunca es correcto: el discriminante calculado rara vez da exactamente cero aunque la raíz sea doble. Hay que usar una tolerancia relativa a la escala de los coeficientes, decisión que debe documentarse.
La misma idea —un indicador que clasifica antes de resolver— reaparece en el determinante para sistemas (clase 045), en el signo de los autovalores del Hessiano para puntos críticos (clase 169) y en el signo del producto f(a)·f(b) para la bisección (clase 222).
Los tres casos con sus coeficientes.
Caso (a, b, c) Δ = b²−4ac naturaleza
dos reales (1, −5, 6) 25 − 24 = 1 2 raíces: 3 y 2
una doble (1, −4, 4) 16 − 16 = 0 1 raíz doble: 2
complejas (1, 1, 1) 1 − 4 = −3 2 conjugadas
Complejas explícitas: (−1 ± i√3)/2
Precaución numérica:
comprobar Δ == 0 con floats es casi siempre incorrecto;
usar |Δ| < tol · max(|b²|, |4ac|)El discriminante clasifica las raíces antes de calcularlas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 049Estabilidad de sistemas dinámicos (raíces del polinomio característico), clasificación de cónicas y decisión previa en cualquier solver de raíces.
9780898718027, pendiente de resolver.Los exponentes fraccionarios extienden las leyes de potencias y definen las raíces.
a^(m/n) = ⁿ√(aᵐ)
a^(1/3) · a^(2/3) = a
dominio de a^(1/2): a ≥ 0 en ℝLa extensión de los exponentes a números fraccionarios sigue el mismo principio que la clase 008 aplicó a los negativos: se elige la definición que conserva las leyes. Si a^(1/n) debe cumplir (a^(1/n))ⁿ = a^(n/n) = a, entonces a^(1/n) es la raíz n-ésima. La notación de exponente no es una alternativa a la de radical: es la que permite operar sin casos especiales.
Con esa definición, el álgebra funciona: a^(1/3) · a^(2/3) = a^(1/3+2/3) = a¹ = a. El laboratorio comprueba precisamente esa identidad, y en punto flotante se cumple solo dentro de una tolerancia, porque cada potencia fraccionaria introduce redondeo.
El dominio sigue las reglas de la clase 009: con denominador par, la base debe ser no negativa en los reales. Y hay una trampa de implementación que conviene conocer: (-8) (1/3) en Python devuelve un complejo o nan según el tipo, porque 1/3 es un float que no es exactamente un tercio. Para raíces cúbicas de negativos hay que calcular -(8 (1/3)) explícitamente, como hace el motor.
Extender aún más —a exponentes reales arbitrarios— exige definir a^x = e^(x ln a), que es la ruta que toma el análisis y la que usa la implementación de pow. Ese es el puente hacia las funciones exponencial y logarítmica de las clases 055 y 056.
Exponentes fraccionarios con base 8.
8^(1/3) = 2.0 (raíz cúbica)
8^(2/3) = 4.0 (raíz cúbica al cuadrado)
8^(−1) = 0.125
8^(−1/3) = 0.5
Ley del producto:
8^(1/3) · 8^(2/3) = 2.0 · 4.0 = 8.0 = 8¹ ✓
Dominio:
(−8)^(1/3) en ℝ → −2 (raíz impar, existe)
(−8)^(1/2) en ℝ → no existe
En Python: (-8) ** (1/3) NO devuelve −2; hay que escribir −(8 ** (1/3))Exponentes negativos, fraccionarios y su dominio.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | x^(1/3), x^(2/3), x^(-1), x^(-1/3), producto_x^(1/3)*x^(2/3) |
| Comprobaciones (1) | es_x |
compmath run 050Normas Lp con p no entero (clase 104), transformaciones de potencia en estadística (Box-Cox) y escalado de leyes de potencia en las leyes de escala (clase 359).
math.pow y el operador ** — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).10.1007/978-1-4612-0335-5, pendiente de resolver.El logaritmo convierte productos en sumas, y por eso toda verosimilitud se calcula en escala logarítmica.
log(ab) = log a + log b
log(a/b) = log a − log b
log(aⁿ) = n log a
log_b(a) = ln a / ln bEl logaritmo se inventó, literalmente, para convertir multiplicaciones en sumas. Napier publicó sus tablas en 1614 con ese propósito explícito: antes de las calculadoras, multiplicar dos números de seis cifras era costoso y sumar sus logaritmos no. Esa misma propiedad, cuatro siglos después, es la razón por la que el logaritmo está en el centro de la estadística y del machine learning.
El motivo es de precisión, no de velocidad. Multiplicar diez mil probabilidades —cada una menor que 1— produce un número tan pequeño que hace underflow a cero en float64 (clase 033). Sumar diez mil logaritmos no tiene ese problema. Por eso la verosimilitud se maximiza siempre como log-verosimilitud (clase 215) y por eso la pérdida de un clasificador es cross-entropy, que es una suma de logaritmos (clase 263).
Las tres leyes se deducen directamente de las de exponentes, porque el logaritmo es su función inversa. log(ab) = log a + log b es exactamente aᵐ·aⁿ = aᵐ⁺ⁿ leído al revés. El cambio de base, log_b(a) = ln a / ln b, permite calcular cualquier logaritmo con uno solo implementado.
Numéricamente hay dos precauciones. El dominio es x > 0, y log(0) es −inf: por eso toda implementación de cross-entropy añade un epsilon. Y log(1 + x) para x pequeño sufre cancelación, de ahí que exista log1p (clase 040).
Las tres leyes verificadas con a = 12, b = 5.
log(12·5) = log(60) = 4.094345
log 12 + log 5 = 2.484907 + 1.609438 = 4.094345 ✓
log(12/5) = log(2.4) = 0.875469
log 12 − log 5 = 2.484907 − 1.609438 = 0.875469 ✓
log(12³) = log(1728) = 7.454720
3·log 12 = 3 · 2.484907 = 7.454720 ✓
Cambio de base:
log₂(12) = ln 12 / ln 2 = 2.484907/0.693147 = 3.584963
math.log2(12) = 3.584963 ✓Las tres leyes del logaritmo verificadas numéricamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | log(a*b), log(a)+log(b), log(a/b), log(a)-log(b), log(a^3), 3*log(a), cambio_de_base_log2(a), math.log2(a) |
| Comprobaciones (1) | ley_producto |
compmath run 051Log-verosimilitud, cross-entropy, entropía, escalas logarítmicas (decibelios, pH, magnitud sísmica), perplejidad de un modelo de lenguaje y leyes de escala.
math.log, math.log1p, math.log2 — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).El dominio forma parte de la definición de una función: cambiarlo cambia la función.
f(x) = 1/(x−2), dominio ℝ \ {2}, imagen ℝ \ {0}
asíntota vertical en x = 2, horizontal en y = 0Una función es una terna: dominio, codominio y regla de asignación. Dos funciones con la misma fórmula y distinto dominio son funciones distintas. Esa precisión, que parece pedante, es la que evita evaluar una expresión fuera de donde tiene sentido —el error de modelado más común— y la que hace que preguntas como «¿es invertible?» tengan respuesta.
Determinar el dominio consiste en excluir lo que no está definido: denominadores nulos, raíces pares de negativos, logaritmos de valores no positivos. La imagen es más difícil: exige razonar sobre qué valores alcanza realmente la función, no solo cuáles son plausibles.
Las asíntotas describen el comportamiento en las fronteras del dominio y en el infinito. 1/(x−2) tiene una asíntota vertical en 2 —donde el dominio se rompe— y una horizontal en 0 —el valor al que tiende cuando x crece—. Ambas son, en el fondo, límites, y la parte 07 las formalizará.
En implementación esto se traduce en una regla simple: toda función debe declarar y validar su dominio. Un modelo que recibe una entrada fuera de su rango de validez no falla ruidosamente: devuelve un número, y ese número no significa nada. La validación de entradas es el equivalente en ingeniería de declarar el dominio.
Analizar f(x) = 1/(x−2).
Dominio: ℝ \ {2} (el denominador se anula en x = 2)
Imagen: ℝ \ {0} (nunca vale 0: 1/algo ≠ 0)
valores:
f(0) = −0.5
f(1.9) = −10.0 se dispara al acercarse por la izquierda
f(2.1) = 10.0 y por la derecha, con signo opuesto
f(5) = 0.333
asíntota vertical: x = 2
asíntota horizontal: y = 0
¿f(2) definido? NoEl dominio forma parte de la definición de la función.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | asintota_vertical, asintota_horizontal |
| Comprobaciones (1) | x=2_definido |
compmath run 052Validación de entradas, rango de validez de un modelo, dominio de una activación y detección de valores fuera de distribución en inferencia.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780486425641 verificado en International ISBN Agency (2026-08-19).Una función lineal tiene razón de cambio constante; la pendiente es esa razón.
y = mx + b
m = (y₂ − y₁)/(x₂ − x₁)La función lineal es el modelo más simple que no es constante, y por eso es la primera hipótesis razonable ante cualquier conjunto de datos. Su propiedad definitoria es que la razón de cambio es constante: aumentar x en una unidad siempre cambia y en m, independientemente de dónde se esté.
Comprobar linealidad es directo: calcular la pendiente con dos puntos y verificar que predice correctamente un tercero. Si no lo hace, la relación no es lineal, y conviene saberlo antes de ajustar una recta. Esa comprobación es la versión elemental del análisis de residuos que la parte 10 formaliza.
La pendiente es un peso en el sentido del machine learning: dice cuánto contribuye la entrada a la salida. La generalización a varias entradas, y = w₁x₁ + ... + wₙxₙ + b, es exactamente una capa lineal, y cada wᵢ es la pendiente parcial respecto a xᵢ —lo que la parte 08 llamará derivada parcial—.
Una advertencia que el programa repetirá: casi ninguna relación real es lineal en todo su rango. La linealidad es una aproximación local, y la parte 07 explicará por qué: la derivada es precisamente la pendiente de la mejor recta que aproxima la función cerca de un punto.
Comprobar linealidad con tres puntos.
puntos: (1, 5), (3, 11), (7, 23)
pendiente con los dos primeros:
m = (11 − 5)/(3 − 1) = 6/2 = 3
intercepto:
b = 5 − 3·1 = 2
modelo: y = 3x + 2
predicción del tercer punto:
3·7 + 2 = 23 observado: 23 ✓ es linealSi el tercer punto hubiera sido (7, 30), el modelo lineal quedaría descartado con una sola comprobación.
Pendiente como razón de cambio constante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | pendiente, intercepto, predice_tercer_punto |
| Comprobaciones (1) | es_lineal |
compmath run 053Regresión lineal (clase 282), capas densas (clase 110), tasas de cambio y cualquier aproximación de primer orden. La derivada es la pendiente de la recta tangente.
9781733146678 verificado en International ISBN Agency (2026-08-19).El signo del coeficiente principal decide la concavidad, y el vértice es el extremo.
f(x) = ax² + bx + c
xᵥ = −b/2a; a > 0 ⟹ mínimo, a < 0 ⟹ máximoLa función cuadrática es el primer modelo con un extremo, y por eso es el ejemplo canónico de optimización. Todo lo que la parte 12 hace con funciones complicadas se puede visualizar aquí: hay un punto donde la derivada se anula, y el signo de la curvatura decide si es mínimo o máximo.
La concavidad la determina a: positivo abre hacia arriba y el vértice es un mínimo; negativo abre hacia abajo y es un máximo. En la parte 08 ese a se convertirá en el Hessiano, y «positivo» en «definido positivo», pero la lógica es idéntica.
La simetría respecto al eje vertical x = xᵥ es una propiedad estructural: f(xᵥ − h) y f(xᵥ + h) valen lo mismo para cualquier h. Comprobarlo numéricamente es una verificación barata de que el vértice se calculó bien.
Las cuadráticas son además el problema modelo de la optimización numérica porque su mínimo se conoce en forma cerrada. Toda la parte 12 usa f(x,y) = x² + 20y² como banco de pruebas precisamente por eso: se puede medir exactamente cuánto se aleja cada optimizador del óptimo conocido.
Analizar f(x) = −x² + 6x − 5.
a = −1 < 0 → abre hacia abajo, el vértice es un MÁXIMO
xᵥ = −6/(2·(−1)) = 3
yᵥ = −9 + 18 − 5 = 4
Simetría (h = 2):
f(1) = −1 + 6 − 5 = 0
f(5) = −25 + 30 − 5 = 0 ✓ iguales
raíces: −x² + 6x − 5 = 0 → x = 1, x = 5
punto medio: (1+5)/2 = 3 = xᵥ ✓Vértice, eje de simetría y concavidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | eje_de_simetria, f(xv-2), f(xv+2) |
| Comprobaciones (2) | es_maximo, simetria_verificada |
compmath run 054Optimización cuadrática, ajuste por mínimos cuadrados, trayectorias balísticas y aproximación de segundo orden de cualquier función suave (Taylor, clase 151).
9780387400655 verificado en International ISBN Agency (2026-08-19).El crecimiento exponencial tiene razón constante, no diferencia constante.
P(t) = P₀·bᵗ
tiempo de duplicación = ln 2 / ln b
regla del 72: t ≈ 72 / (porcentaje anual)La diferencia entre crecimiento lineal y exponencial es la diferencia entre sumar y multiplicar una cantidad fija en cada periodo. Es fácil de enunciar y difícil de intuir: la intuición humana es lineal, y por eso las predicciones sobre procesos exponenciales —epidemias, interés compuesto, capacidad de cómputo— fallan sistemáticamente por defecto.
El indicador más útil es el tiempo de duplicación: cuánto tarda la cantidad en multiplicarse por dos. Se obtiene de ln 2 / ln b y no depende del valor inicial, lo que lo convierte en una propiedad del proceso. La «regla del 72» es su aproximación mental: dividir 72 entre el porcentaje anual da los años aproximados.
Todo crecimiento exponencial real termina saturándose, porque los recursos son finitos. El modelo exponencial es válido en la fase inicial y deja de serlo después; el modelo logístico describe la transición. Aplicar un exponencial fuera de su fase de validez produce predicciones absurdas, y ese es el error de modelado más citado en divulgación científica.
En machine learning el crecimiento exponencial aparece en el decaimiento del learning rate, en las medias móviles exponenciales de Adam (clase 250) y en el término e^z de la softmax, cuyo desbordamiento obliga a restar el máximo (clase 321).
Población que crece un 8 % anual desde un millón.
P(t) = 10⁶ · 1.08ᵗ
t = 0 1 000 000
t = 5 1 469 328
t = 10 2 158 925
t = 20 4 660 957
razón entre años consecutivos: P(6)/P(5) = 1.08 (constante) ✓
tiempo de duplicación: ln 2 / ln 1.08 = 0.6931/0.07696 = 9.006 años
regla del 72: 72/8 = 9 años ✓ aproximaciónCrecimiento exponencial: razón constante, no diferencia constante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | razon_entre_años_consecutivos, tiempo_de_duplicacion, regla_del_72_aproximada |
| Comprobaciones (0) | — |
compmath run 055Interés compuesto, crecimiento de usuarios, propagación epidémica, decaimiento del learning rate y medias móviles exponenciales de los optimizadores.
El logaritmo es la inversa de la exponencial y convierte factores en distancias iguales.
y = log_b(x) ⟺ x = bʸ
escala logarítmica: distancias iguales ⟹ factores igualesLa función logarítmica deshace la exponencial, y esa relación de inversa es lo que la hace útil: convierte una pregunta sobre crecimiento («¿cuánto tarda en multiplicarse por 10?») en una pregunta sobre suma. Su crecimiento es extraordinariamente lento —de 10³ a 10⁶ el logaritmo decimal solo sube 3— y por eso comprime rangos enormes.
La escala logarítmica es la aplicación práctica más visible. En un eje logarítmico, una exponencial se ve como una recta, lo que permite identificar el modelo a simple vista y leer la tasa como pendiente. Los decibelios, el pH, la escala de magnitud sísmica y las curvas de aprendizaje de los modelos usan esa propiedad.
El dominio es x > 0, sin excepciones: no hay ningún exponente al que elevar una base positiva para obtener un número negativo. log(0) tiende a −inf, y ese es el motivo técnico por el que toda implementación de entropía o cross-entropy protege el argumento con un epsilon (clase 263).
En las leyes de escala de los modelos de lenguaje (clase 359), la relación entre pérdida y número de parámetros es una ley de potencia, que en escala log-log es una recta cuya pendiente es el exponente. Leer esas gráficas exige entender esta clase.
Logaritmo como inversa y como escala.
log₁₀(1000) = 3 porque 10³ = 1000
10^log₁₀(1000) = 1000 ✓ inversa verificada
Escala: de 10³ a 10⁶ hay un factor 1000
log₁₀(10⁶) − log₁₀(10³) = 6 − 3 = 3
tres unidades en el eje = tres órdenes de magnitud
Decibelios: 10·log₁₀(10⁻³) = −30 dB
Dominio: x > 0. log(0) → −inf, log(−1) no existe en ℝEl logaritmo como inversa de la exponencial y como escala.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | log10(1000), 10^3, escala_decibel_de_1e-3, crecimiento_de_log_entre_1e3_y_1e6 |
| Comprobaciones (1) | inversa_verificada |
compmath run 056Escalas de medida, visualización de rangos amplios, log-verosimilitud, entropía, perplejidad y lectura de leyes de escala en log-log.
math.log y variantes — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).10.1002/047174882x verificado en Crossref (2026-08-19).La composición aplica funciones en cadena y no es conmutativa: (g∘f) ≠ (f∘g).
(g∘f)(x) = g(f(x))
dominio de g∘f: {x ∈ dom f : f(x) ∈ dom g}Componer es encadenar: la salida de una función entra en la siguiente. El orden importa y casi nunca conmuta, hecho que se comprueba con un solo ejemplo numérico. Leer (g∘f)(x) correctamente —primero f, luego g, aunque g esté escrita a la izquierda— es una de las causas frecuentes de error al trasladar fórmulas.
El dominio de la composición no es el dominio de f: hay que exigir además que f(x) caiga dentro del dominio de g. Si g es un logaritmo, hay que garantizar que f(x) > 0. Este detalle es la fuente de los NaN que aparecen cuando una activación produce valores fuera del dominio de la siguiente capa.
Y aquí está la idea que conecta esta parte con todo el resto del programa: una red neuronal es una composición de funciones parametrizadas. f(x) = f_L(...f_2(f_1(x))), donde cada f_i es «transformación lineal seguida de no linealidad». Nada más. La profundidad de una red es la longitud de esa cadena.
La consecuencia inmediata, que la clase 302 hará explícita: si todas las f_i fueran lineales, su composición sería lineal, y apilar capas no aportaría nada. La no linealidad entre capas es lo que hace que la composición sea más expresiva que sus partes. Y derivar una composición es exactamente la regla de la cadena (clase 147).
Componer f(x) = 2x + 1 con g(x) = x².
(g∘f)(3) = g(f(3)) = g(7) = 49
(f∘g)(3) = f(g(3)) = f(9) = 19
¿conmutan? No 49 ≠ 19
Cadena de tres:
f(g(f(3))) = f(g(7)) = f(49) = 99
Analogía directa:
red neuronal = f_L(...f_2(f_1(x)))
cada f_i = no_linealidad(W_i · entrada + b_i)(g∘f) no es (f∘g): la composición no conmuta.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | (g∘f)(3), (f∘g)(3), cadena_de_3 |
| Comprobaciones (1) | conmutan |
compmath run 057Arquitectura de redes neuronales, pipelines de transformación de datos, cambio de variable en integración (clase 157) y la regla de la cadena.
9780262337373 verificado en International ISBN Agency (2026-08-19).9780914098911 verificado en International ISBN Agency (2026-08-19).La inversa deshace la función y existe solo si es inyectiva; no es el recíproco 1/f.
f⁻¹(f(x)) = x para todo x del dominio
f inyectiva ⟺ f(a) = f(b) ⟹ a = bLa función inversa deshace lo que la original hizo. Para que exista, la función debe ser inyectiva: dos entradas distintas no pueden dar la misma salida, porque de lo contrario la inversa no sabría a cuál volver. f(x) = x² no es invertible en todo ℝ —2 y −2 dan lo mismo— pero sí lo es restringida a x ≥ 0, y esa restricción es la que define la raíz cuadrada.
La notación f⁻¹ es desafortunada porque se parece a f⁻¹ = 1/f, y no lo es. Para f(x) = 3x − 4, la inversa es (y+4)/3 y el recíproco es 1/(3x−4). Son funciones completamente distintas y confundirlas es un error clásico.
Gráficamente, la inversa es la reflexión respecto a la recta y = x, lo que da una forma visual de comprobar si existe: si alguna recta horizontal corta la gráfica más de una vez, la función no es inyectiva y no tiene inversa global.
En machine learning las inversas aparecen en los normalizing flows, que exigen transformaciones invertibles con jacobiano calculable, y en toda transformación de datos que deba deshacerse para interpretar una predicción en las unidades originales (desestandarizar).
Inversa de f(x) = 3x − 4 y contraste con el recíproco.
Despejar: y = 3x − 4 → x = (y + 4)/3
f⁻¹(y) = (y + 4)/3
Comprobación en x = 5:
f(5) = 11
f⁻¹(11) = (11 + 4)/3 = 5 ✓ roundtrip
Recíproco (COSA DISTINTA):
1/f(5) = 1/11 = 0.0909
¿f⁻¹ = 1/f? No.
Condición: f debe ser inyectiva. 3x − 4 lo es en todo ℝ.Inversa frente a recíproco: dos objetos distintos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | f(5), f_inv(f(5)), reciproco_1/f(5) |
| Comprobaciones (2) | roundtrip_ok, inversa_es_reciproco |
compmath run 058Desestandarizar predicciones, normalizing flows, cambio de variable en probabilidad (con su jacobiano) y la relación entre exponencial y logaritmo.
9780914098911 verificado en International ISBN Agency (2026-08-19).Una función por tramos se define con reglas distintas en subconjuntos del dominio; ReLU es el ejemplo dominante en IA.
ReLU(x) = max(0, x)
continuidad en el corte: límite por la izquierda = límite por la derecha = valorDefinir una función por tramos es lo natural cuando el fenómeno cambia de régimen: una tarifa con tramos, un impuesto progresivo, una penalización que solo actúa por encima de un umbral. La única pregunta técnica es qué ocurre en los puntos de corte, y ahí hay que comprobar dos cosas: si la función es continua (los límites laterales coinciden con el valor) y si es derivable (las pendientes laterales coinciden).
Continua y derivable no son lo mismo. ReLU es continua en 0 —ambos lados tienden a 0— pero no derivable, porque la pendiente salta de 0 a 1. En la práctica, los frameworks definen la derivada en 0 por convenio (habitualmente 0), y eso funciona porque el punto exacto tiene medida nula.
ReLU es la activación más usada en deep learning y es literalmente una función por tramos. Su éxito frente a la sigmoide tiene una explicación directa que la clase 303 desarrolla: su derivada vale exactamente 1 en el semieje positivo, así que el gradiente no se atenúa al propagarse por muchas capas. La sigmoide, cuya derivada máxima es 0.25, hace que el gradiente se desvanezca (clase 314).
La contrapartida también es visible aquí: para x < 0 la derivada de ReLU es 0, así que una neurona que caiga en esa región deja de recibir gradiente y «muere». Leaky ReLU —otro tramo, con pendiente pequeña en lugar de nula— existe para evitarlo.
Analizar una función de tres tramos.
f(x) = |x| si x < 0
x² si 0 ≤ x < 2
4 si x ≥ 2
f(−3) = 3
f(0) = 0
f(1.999) = 3.996
f(2) = 4
Continuidad en x = 0: lím⁻ = 0, lím⁺ = 0, f(0) = 0 ✓
Continuidad en x = 2: lím⁻ = 4, lím⁺ = 4, f(2) = 4 ✓
Derivabilidad en x = 0:
pendiente por la izquierda: −1
pendiente por la derecha: 0 ✗ no derivableUna función por tramos y su continuidad en el punto de corte.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | f(-3), f(0), f(1.999), f(2) |
| Comprobaciones (3) | continua_en_0, continua_en_2, relu_es_por_tramos |
compmath run 059Activaciones ReLU y Leaky ReLU, funciones de pérdida robustas como Huber (clase 304), tarifas por tramos e impuestos progresivos.
9780262337373 verificado en International ISBN Agency (2026-08-19).Elegir modelo es comparar residuos sobre los mismos datos, no elegir la familia que parece más elegante.
SSE = Σ(yᵢ − ŷᵢ)²
linealizar exponencial: ln y = ln a + b·xEl capstone plantea la pregunta que cierra la parte: dados unos datos, ¿qué familia de funciones los describe? La respuesta no se decide mirando la gráfica ni por preferencia estética: se decide comparando el error de cada candidato sobre los mismos datos, con la misma métrica.
La suma de residuos al cuadrado (SSE) es el criterio más simple. Penaliza más los errores grandes que los pequeños, lo que la hace sensible a valores atípicos —tema de la clase 304— pero la convierte en el objetivo de mínimos cuadrados, que tiene solución cerrada (clase 131).
El truco central para ajustar un exponencial es linealizarlo: tomando logaritmos, y = a·e^(bx) se convierte en ln y = ln a + b·x, que es una recta. Ajustar por mínimos cuadrados en el espacio logarítmico y volver da los parámetros. Conviene saber que esto minimiza el error relativo, no el absoluto, lo que a veces es preferible y a veces no.
La honestidad del procedimiento exige dos advertencias. Primera: un SSE menor no demuestra que el modelo sea correcto, solo que ajusta mejor esos datos; un polinomio de grado suficiente ajusta cualquier cosa (clase 298). Segunda: la comparación solo es válida si ambos modelos se evalúan en la misma escala; comparar un SSE calculado en escala logarítmica con otro en escala lineal no significa nada.
Decidir entre lineal y exponencial con seis puntos.
x: 1 2 3 4 5 6
y: 2.1 4.4 8.9 17.5 35.2 70.8
Pista: cada y es aproximadamente el doble del anterior
→ razón ≈ 2 constante → exponencial
Linealización: ln y contra x
ln y: 0.74 1.48 2.19 2.86 3.56 4.26
diferencias: ~0.70 constantes → recta ✓
Ajuste: y = 1.055 · e^(0.702x)
razón de crecimiento: e^0.702 = 2.018
SSE lineal: ~1010
SSE exponencial: ~1.5
Modelo elegido: exponencialCapstone: ¿lineal, cuadrático o exponencial? Decidir con residuos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | modelo_lineal_SSE, modelo_exponencial_SSE, razon_de_crecimiento |
| Comprobaciones (0) | — |
compmath run 060Selección de modelos, ajuste de curvas de crecimiento, análisis de escalabilidad y la lectura de leyes de escala. Es el precursor directo de la regresión de la parte 14.
9780387848570 verificado en International ISBN Agency (2026-08-19).Del espacio a las coordenadas: distancia, ángulo, trigonometría, transformaciones lineales en el plano, coordenadas polares y proyección.
Descartes hizo en 1637 el movimiento que define esta parte: identificar un punto del plano con un par de números. A partir de ahí, toda pregunta geométrica se convierte en una pregunta algebraica, y toda respuesta algebraica tiene lectura geométrica. Esa doble vía es la que permite que un ordenador —que solo sabe operar con números— haga gráficos, robótica y visión artificial.
Las clases 061 a 067 construyen la trigonometría desde la geometría del triángulo y del círculo unitario. El punto que conviene no perder es por qué el radián es la unidad correcta: es la única en la que la derivada del seno es el coseno, sin factores de conversión. Trabajar en grados obliga a arrastrar un π/180 en cada derivada, y de ahí salen errores que no producen excepción, solo resultados escalados.
Las clases 068 a 071 son geometría analítica clásica: coordenadas, rectas, distancias y cónicas. La distancia punto-recta de la clase 070 es la misma fórmula que define el margen de una SVM (clase 289), y la ecuación general Ax + By + C = 0 es exactamente wᵀx + b = 0, la frontera de decisión de cualquier clasificador lineal.
Las clases 072 a 078 son el corazón computacional: vectores, transformaciones, matrices de transformación, coordenadas polares, planos y proyección. Aquí aparece por primera vez una matriz como transformación —no como tabla— y aparecen dos hechos que la parte 05 formalizará: componer transformaciones es multiplicar matrices, y el orden importa.
Las coordenadas homogéneas de la clase 073 son un truco brillante y poco intuitivo: añadiendo una dimensión, la traslación —que no es lineal— se convierte en una multiplicación de matrices. Es la razón por la que las GPU pueden aplicar toda la cadena de transformaciones de un vértice con un único producto matricial.
El cierre (079 y 080) monta el pipeline completo: modelo → mundo → cámara → pantalla, el mismo que ejecuta cualquier motor de videojuego y cualquier sistema de visión. Y el capstone comprueba una relación que resume la parte: el área de un polígono transformado es el área original multiplicada por el valor absoluto del determinante.
Las transformaciones geométricas son el caso visual de las transformaciones lineales que una red aplica a sus activaciones; la similitud coseno es trigonometría en alta dimensión.
| Término | Definición | Clase |
|---|---|---|
| atan2 | Arcotangente de dos argumentos que devuelve el ángulo correcto en los cuatro cuadrantes. | 065 |
| Coordenadas homogéneas | Representación con una dimensión extra que convierte la traslación en multiplicación de matrices. | 073 |
| Coordenadas polares | Representación (r, θ) de un punto por su distancia al origen y su ángulo. | 076 |
| Cuadrante | Cada una de las cuatro regiones en que los ejes dividen el plano, numeradas en sentido antihorario. | 068 |
| Círculo unitario | Circunferencia de radio 1 centrada en el origen. Define seno y coseno para cualquier ángulo real. | 067 |
| Determinante como factor de área | El valor absoluto del determinante es el factor por el que una transformación multiplica las áreas. | 075 |
| Distancia euclídea | Norma L2 de la diferencia de dos puntos. Es la distancia 'en línea recta'. | 061 |
| Excentricidad | Cociente c/a que clasifica una cónica: 0 circunferencia, <1 elipse, 1 parábola, >1 hipérbola. | 071 |
| Forma general de la recta | Ax + By + C = 0. Es la misma expresión que la frontera de decisión wᵀx + b = 0. | 069 |
| Identidad pitagórica | sin²θ + cos²θ = 1. Es el teorema de Pitágoras sobre el círculo unitario. | 066 |
| Matriz de rotación | Matriz ortogonal de determinante 1 que preserva normas y ángulos. | 074 |
| Pie de perpendicular | Proyección ortogonal de un punto sobre una recta; el punto de la recta más cercano a él. | 070 |
| Producto cruz | Vector ortogonal a dos dados, cuya norma es el área del paralelogramo que forman. | 077 |
| Proyección en perspectiva | División por la profundidad que hace que los objetos lejanos se vean más pequeños. | 078 |
| Radián | Ángulo cuyo arco mide igual que el radio. Es la unidad en la que d(sin x)/dx = cos x sin factores extra. | 062 |
| Semejanza | Relación entre figuras con los mismos ángulos y lados proporcionales. Las áreas escalan con el cuadrado del factor. | 063 |
| Terna pitagórica | Tres enteros que cumplen a² + b² = c². Se generan con a = m²−n², b = 2mn, c = m²+n². | 064 |
| Vector unitario | Vector de norma 1. Codifica dirección sin magnitud. | 072 |
La distancia euclídea es una de varias métricas posibles; cuál se elige cambia qué está cerca.
L2: d(p,q) = √Σ(pᵢ−qᵢ)²
L1: d(p,q) = Σ|pᵢ−qᵢ|
L∞: d(p,q) = máx|pᵢ−qᵢ|Una distancia no es «la» distancia: es cualquier función que cumpla tres condiciones —no negatividad con d(p,q)=0 solo si p=q, simetría y desigualdad triangular—. Bajo esa definición, la euclídea es una entre muchas, y elegir una u otra cambia qué puntos se consideran cercanos.
Las tres más usadas tienen interpretación directa. La euclídea (L2) es la línea recta: la que mediría una regla. La Manhattan (L1) es la distancia por calles en cuadrícula, y su nombre viene de ahí. La Chebyshev (L∞) es el máximo de las diferencias por coordenada: el movimiento del rey en ajedrez.
Siempre se cumple L∞ ≤ L2 ≤ L1, hecho que conviene comprobar numéricamente porque da una intuición útil: L1 penaliza más el total de desviaciones, L∞ solo mira la peor. Esa diferencia reaparece en la parte 14 como la diferencia entre regularización Lasso (L1) y Ridge (L2), y en la 15 entre pérdida MAE y MSE.
En alta dimensión la intuición euclídea falla. Todas las distancias entre puntos aleatorios se concentran alrededor de un valor común, y la noción de «vecino más cercano» pierde significado. Es la maldición de la dimensionalidad, y es la razón por la que en embeddings se usa similitud coseno en lugar de distancia euclídea.
Tres distancias entre p = (1,2) y q = (4,6).
diferencias: (3, 4)
L2 (euclídea): √(9 + 16) = √25 = 5.0
L1 (Manhattan): |3| + |4| = 7.0
L∞ (Chebyshev): máx(3, 4) = 4.0
Orden: L∞ (4) ≤ L2 (5) ≤ L1 (7) ✓
Punto medio: ((1+4)/2, (2+6)/2) = (2.5, 4.0)El triángulo (3,4,5) no es casual: es la terna pitagórica más simple, tema de la clase 064.
Distancia euclídea, Manhattan y Chebyshev sobre los mismos puntos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | euclidea_L2, manhattan_L1, chebyshev_Linf |
| Comprobaciones (1) | orden_L1>=L2>=Linf |
compmath run 061k-NN y k-means (parte 14), detección de anomalías, búsqueda de vecinos en embeddings y elección de norma en regularización.
math.dist — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).El radián es la unidad natural del ángulo: en ella, la derivada del seno es el coseno sin factores de conversión.
θ(rad) = θ(grados) · π/180
vuelta completa = 2π rad = 360°
d(sin x)/dx = cos x solo si x está en radianesUn radián es el ángulo cuyo arco mide lo mismo que el radio. Esa definición hace que la longitud de arco sea simplemente s = rθ, sin constantes, y es el primer indicio de por qué el radián es «natural»: elimina factores arbitrarios.
El motivo profundo aparece en cálculo. La derivada de sin x es cos x únicamente si x está en radianes; en grados, la derivada es (π/180)·cos x. Ese factor contaminaría cada derivada, cada serie de Taylor y cada ecuación diferencial. Por eso todas las bibliotecas matemáticas trabajan internamente en radianes, y math.sin(90) no devuelve 1 sino el seno de 90 radianes.
El error de unidad angular es de los más frecuentes y de los más silenciosos: el resultado no lanza excepción, simplemente es incorrecto por un factor. La defensa es la misma que la clase 012 propuso: declarar la unidad en el nombre de la variable (angulo_rad, angulo_deg) y convertir explícitamente en las fronteras.
La comprobación numérica que hace el laboratorio es directa: calcular la derivada de sin por diferencias finitas en un ángulo dado en radianes y verificar que coincide con el coseno de ese ángulo. Si se hiciera en grados, la discrepancia sería de un factor 57.3.
Verificar que d(sin)/dx = cos solo en radianes.
30° = 30 · π/180 = 0.5236 rad = π/6
Derivada numérica en x = 0.5236 rad:
(sin(x+h) − sin(x−h)) / 2h con h = 1e−7
= 0.8660254
cos(0.5236) = 0.8660254 ✓ coinciden
Si el ángulo se pasara en grados (x = 30):
d(sin)/dx en grados = (π/180)·cos(30°) = 0.01511
factor de discrepancia: 180/π = 57.3Grados y radianes: por qué el radián es la unidad natural.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | grados, radianes, pi/6, vuelta_completa_rad, d(sin)/dx_en_radianes, cos(x) |
| Comprobaciones (1) | coinciden |
compmath run 062Toda la trigonometría computacional, rotaciones en gráficos y robótica, positional encoding de los Transformers (clase 323) y análisis de Fourier (parte 13).
math.radians y math.degrees — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780914098911 verificado en International ISBN Agency (2026-08-19).En figuras semejantes los ángulos se conservan, las longitudes escalan con k y las áreas con k².
longitudes: L' = k·L
áreas: A' = k²·A
volúmenes: V' = k³·VDos figuras son semejantes si tienen los mismos ángulos y sus lados son proporcionales. La consecuencia que sorprende es la ley de escalado: al multiplicar las longitudes por k, las áreas se multiplican por k² y los volúmenes por k³. Duplicar el tamaño de una figura cuadruplica su área y octuplica su volumen.
Esta ley explica fenómenos aparentemente inconexos. Por qué los animales grandes tienen extremidades proporcionalmente más gruesas (el peso crece con el volumen, la resistencia del hueso con la sección); por qué una pizza de 40 cm tiene cuatro veces más superficie que una de 20; por qué duplicar la resolución de una imagen cuadruplica los píxeles y, con ellos, el coste de procesarla.
En computación la ley de escalado es la que convierte una decisión aparentemente menor en un factor de coste. Pasar de imágenes de 224×224 a 448×448 no duplica el cómputo de una CNN: lo cuadruplica. Y en la atención de un Transformer, la memoria crece con el cuadrado de la longitud de secuencia, que es la razón de casi toda la investigación en atención eficiente.
El criterio de semejanza AA —dos ángulos iguales bastan— es el que hace útil el concepto: permite deducir proporcionalidad de lados sin medirlos, y es la base de la trigonometría, donde las razones seno y coseno dependen solo del ángulo precisamente porque todos los triángulos rectángulos con ese ángulo son semejantes.
Escalar un triángulo 3-4-5 por k = 2.5.
original: catetos 3 y 4, hipotenusa 5
perímetro 12, área 6
escalado: catetos 7.5 y 10, hipotenusa 12.5
perímetro 30, área 37.5
razón de perímetros: 30/12 = 2.5 = k ✓
razón de áreas: 37.5/6 = 6.25 = k² ✓
Los ángulos no cambian: 36.87°, 53.13°, 90°Semejanza: los ángulos se conservan, las longitudes escalan.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | factor_de_escala, razon_de_perimetros, razon_de_areas, area_original, area_escalada |
| Comprobaciones (1) | angulos_invariantes |
compmath run 063Coste de procesar imágenes según resolución, memoria cuadrática de la atención, escalado de mallas en gráficos y análisis dimensional en ingeniería.
9780471504580 verificado en International ISBN Agency (2026-08-19).El teorema de Pitágoras y su recíproco caracterizan el ángulo recto; las ternas se generan sistemáticamente.
a² + b² = c² ⟺ el triángulo es rectángulo
generador: a = m²−n², b = 2mn, c = m²+n² (m > n > 0)El teorema de Pitágoras es la relación métrica más usada de toda la matemática computacional, aunque casi nunca se la llame por su nombre: cada vez que se calcula una norma euclídea, se está aplicando. Su recíproco es igual de útil: si a² + b² = c², el triángulo es rectángulo, lo que da una prueba de perpendicularidad sin medir ángulos.
Las ternas pitagóricas —tríos de enteros que lo cumplen— se generan con la fórmula de Euclides a partir de dos enteros m > n: (m²−n², 2mn, m²+n²). Con m=2, n=1 sale la (3,4,5); con m=3, n=2 la (5,12,13). Que exista una parametrización completa es un resultado clásico de teoría de números, y conecta esta clase con la parte 04.
La generalización a n dimensiones es directa: ‖v‖² = Σvᵢ². Y la generalización conceptual es aún más importante: en cualquier espacio con producto interno, si dos vectores son ortogonales entonces ‖u+v‖² = ‖u‖² + ‖v‖². Ese es el teorema de Pitágoras abstracto, y es lo que hace que la descomposición de la varianza en estadística funcione (clase 214) y que la proyección ortogonal sea la mejor aproximación (clase 119).
Una precaución numérica: calcular √(a² + b²) directamente puede desbordar si a o b son grandes, aunque el resultado quepa. Por eso existe math.hypot, que reescala antes de elevar al cuadrado.
Generar una terna y verificar el recíproco.
Generador con m = 3, n = 2:
a = 9 − 4 = 5
b = 2·3·2 = 12
c = 9 + 4 = 13
Verificación: 25 + 144 = 169 = 13² ✓ rectángulo
Contraejemplo: triángulo 5-5-7
25 + 25 = 50 ≠ 49 = 7² ✗ no es rectángulo
Precaución numérica:
√(1e200² + 1e200²) desborda
math.hypot(1e200, 1e200) = 1.414e200 ✓Pitágoras, su recíproco y una terna pitagórica generada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | hipotenusa, a²+b², c² |
| Comprobaciones (2) | es_rectangulo, triangulo_5_5_7_es_rectangulo |
compmath run 064Norma euclídea, cálculo de distancias, verificación de ortogonalidad, descomposición de la varianza y el teorema de Pitágoras en espacios de Hilbert.
math.hypot — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9780691196886 verificado en International ISBN Agency (2026-08-19).Seno, coseno y tangente son razones que dependen solo del ángulo, por semejanza de triángulos.
sin θ = opuesto/hipotenusa, cos θ = adyacente/hipotenusa
tan θ = sin θ / cos θ
atan2(y, x) devuelve el ángulo en el cuadrante correctoLas razones trigonométricas están bien definidas gracias a la semejanza (clase 063): todos los triángulos rectángulos con el mismo ángulo agudo son semejantes, así que la razón entre dos de sus lados no depende del tamaño del triángulo, solo del ángulo. Sin ese hecho, «el seno de 30°» no significaría nada.
La tangente es el cociente de las otras dos, y por eso no está definida donde el coseno se anula: en 90° y 270° la tangente diverge. Esa singularidad es real y hay que manejarla; en implementaciones se evita la tangente siempre que se pueda, usando directamente seno y coseno.
Para recuperar el ángulo a partir de las coordenadas, la función correcta es atan2, no atan. atan(y/x) pierde la información del cuadrante —el cociente es el mismo para (1,1) y (−1,−1)— y además falla si x es cero. atan2(y, x) recibe los dos argumentos por separado, devuelve el ángulo en el rango (−π, π] y maneja los cuatro cuadrantes. Usar atan donde correspondía atan2 es un error clásico en robótica y gráficos.
El programa usa estas razones en la clase 076 (coordenadas polares), en la 323 (positional encoding, construido con senos y cosenos de frecuencias distintas) y en cualquier cálculo de ángulo entre vectores.
Triángulo con catetos 3 y 4.
opuesto = 3, adyacente = 4
hipotenusa = √(9+16) = 5
θ = atan2(3, 4) = 0.6435 rad = 36.87°
sin θ = 3/5 = 0.6
cos θ = 4/5 = 0.8
tan θ = 3/4 = 0.75
Comprobación: tan θ = sin θ / cos θ = 0.6/0.8 = 0.75 ✓
Por qué atan2 y no atan:
atan(3/4) = 0.6435 (cuadrante I)
atan(-3/-4) = 0.6435 ← ¡mismo valor, cuadrante III!
atan2(-3,-4) = -2.498 ✓ correctoSeno, coseno y tangente sobre un triángulo rectángulo concreto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | opuesto, adyacente, hipotenusa, angulo_rad, angulo_grados, sin, cos, tan |
| Comprobaciones (1) | tan_es_sin/cos |
compmath run 065Cálculo de ángulos en robótica y gráficos, conversión a coordenadas polares, positional encoding y análisis de fase en señales.
math.atan2 — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).La identidad pitagórica es el teorema de Pitágoras sobre el círculo unitario; de ella se derivan las demás.
sin²θ + cos²θ = 1
sin(2θ) = 2 sin θ cos θ
cos(2θ) = cos²θ − sin²θLa identidad fundamental sin²θ + cos²θ = 1 no es una fórmula que memorizar: es el teorema de Pitágoras aplicado al triángulo que forma un punto del círculo unitario con los ejes. La hipotenusa es el radio, que vale 1, y los catetos son el coseno y el seno. Verla así hace innecesario recordarla.
De ella se derivan las demás mediante las fórmulas de suma de ángulos. La del ángulo doble, sin(2θ) = 2 sin θ cos θ, es el caso particular de sin(a+b) con a = b, y su utilidad es de eficiencia: permite calcular una función de 2θ sin evaluar la función trigonométrica de nuevo.
Las identidades cumplen además un papel de verificación: comprobar que sin²θ + cos²θ da 1 en varios ángulos es una prueba barata de que una implementación trigonométrica funciona. En punto flotante el resultado no será exactamente 1, y esa desviación —del orden del epsilon de máquina— es una medida de la calidad de la biblioteca.
En procesamiento de señales estas identidades permiten reescribir productos de senoidales como sumas, que es lo que hace la modulación y lo que subyace al análisis de Fourier de la parte 13. Y en el positional encoding de los Transformers, la fórmula de suma de ángulos es la que garantiza que un desplazamiento de posición sea una transformación lineal de la codificación.
Verificar las identidades en cinco ángulos.
θ sin²+cos² sin(2θ) 2·sin·cos coinciden
0° 1.000000 0.000000 0.000000 ✓
30° 1.000000 0.866025 0.866025 ✓
45° 1.000000 1.000000 1.000000 ✓
60° 1.000000 0.866025 0.866025 ✓
90° 1.000000 0.000000 0.000000 ✓
Nota numérica: sin²+cos² da 1.0 con error < 1e−16
(es una prueba de calidad de la implementación)Identidades fundamentales verificadas en varios ángulos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 066Simplificación de expresiones trigonométricas, modulación de señales, verificación de bibliotecas matemáticas y la construcción del positional encoding.
10.1007/978-1-4612-0149-8, pendiente de resolver.10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).El círculo unitario extiende seno y coseno a cualquier ángulo real y muestra su periodicidad y paridad.
punto del círculo: (cos θ, sin θ)
periodo: sin(θ + 2π) = sin θ
paridad: sin(−θ) = −sin θ, cos(−θ) = cos θEl triángulo rectángulo solo define las razones trigonométricas para ángulos entre 0 y 90°. El círculo unitario las extiende a cualquier número real: el punto que resulta de recorrer un arco de longitud θ desde (1,0) tiene coordenadas (cos θ, sin θ), y esa definición funciona para ángulos negativos, mayores que una vuelta o irracionales.
De esa definición se leen dos propiedades sin cálculo. La periodicidad: dar una vuelta completa devuelve al mismo punto, así que sin(θ + 2π) = sin θ. Y la paridad: reflejar respecto al eje x cambia el signo de la ordenada pero no de la abscisa, así que el seno es impar y el coseno es par.
La periodicidad tiene una consecuencia práctica que conviene tener presente: los ángulos no son comparables directamente. La diferencia entre 359° y 1° es de 2°, no de 358°. Calcular diferencias angulares exige normalizar al rango (−π, π], y olvidarlo produce saltos bruscos en robótica y en seguimiento de orientación.
La tabla de valores notables —0, 90, 180, 270, 360— conviene poder reconstruirla mirando el círculo en lugar de memorizarla: en 90° el punto es (0,1), así que el coseno es 0 y el seno 1. Numéricamente hay un detalle: cos(π/2) no da exactamente 0 sino 6.1e−17, porque π/2 no es representable exactamente.
Coordenadas en los ángulos notables.
ángulo (cos, sin)
0° ( 1, 0)
90° ( 0, 1)
180° (−1, 0)
270° ( 0, −1)
360° ( 1, 0) ← igual que 0°: periodo 2π
Paridad:
sin(−1) = −0.841471 = −sin(1) ✓ impar
cos(−1) = 0.540302 = cos(1) ✓ par
Detalle numérico: cos(π/2) = 6.12e−17, no exactamente 0
(π/2 no es representable en float64)El círculo unitario como diccionario de ángulos notables.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | radio, periodo_sin |
| Comprobaciones (2) | sin_es_impar, cos_es_par |
compmath run 067Orientación en robótica, ángulos de fase en señales, animación cíclica y cualquier fenómeno periódico. La periodicidad es la propiedad que explota Fourier.
10.1007/978-1-4612-0149-8, pendiente de resolver.math.fmod y normalización de ángulos — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Las coordenadas convierten preguntas geométricas en preguntas algebraicas.
simetría respecto a x: (a, b) → (a, −b)
simetría respecto a y: (a, b) → (−a, b)
simetría respecto al origen: (a, b) → (−a, −b)La idea de Descartes —identificar el plano con ℝ²— es probablemente la más productiva de la matemática moderna. Convierte la geometría en álgebra: una recta es una ecuación, una circunferencia es otra, y la intersección de dos figuras es la solución de un sistema. Sin ella no habría gráficos por computador ni análisis de datos.
Los cuatro cuadrantes se numeran en sentido antihorario empezando por el de coordenadas positivas. Esa convención importa al interpretar atan2, cuyo signo depende del cuadrante, y al leer gráficas donde el eje y crece hacia abajo —convención habitual en pantallas e imágenes, que invierte el sentido de las rotaciones.
Las simetrías se expresan como cambios de signo, y ese es el primer ejemplo de que una transformación geométrica es una operación algebraica sobre coordenadas. La reflexión respecto al eje x es la matriz diag(1, −1), y su determinante negativo indica que invierte la orientación (clase 075).
En machine learning el «espacio de features» es literalmente un espacio de coordenadas, y cada observación es un punto. Toda la intuición geométrica de esta parte —distancia, proyección, frontera— se traslada directamente allí, con la advertencia de la clase 061 sobre la alta dimensión.
Los cuatro cuadrantes y las simetrías.
punto cuadrante
( 3, 2) I
(−3, 2) II
(−3, −2) III
( 3, −2) IV
Simetrías de (3, 2):
respecto al eje x: ( 3, −2)
respecto al eje y: (−3, 2)
respecto al origen: (−3, −2)
Traslación (+1, −1): (3,2) → (4,1)Cuadrantes, simetrías y traslación de origen.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 068Espacios de features, sistemas de coordenadas de pantalla frente a mundo, visualización de datos y transformaciones geométricas.
La forma general Ax + By + C = 0 es la misma expresión que la frontera de decisión de un clasificador lineal.
explícita: y = mx + b
general: Ax + By + C = 0
perpendicular: m⊥ = −1/mUna recta admite varias escrituras y cada una sirve para algo distinto. La forma explícita y = mx + b es cómoda para evaluar y graficar, pero no puede representar rectas verticales (pendiente infinita). La forma general Ax + By + C = 0 no tiene esa limitación y es la que se usa en geometría computacional.
La forma general tiene además una lectura vectorial importante: el vector (A, B) es normal a la recta, es decir, perpendicular a ella. Y esa observación es la que conecta esta clase con machine learning: la frontera de decisión de un clasificador lineal es wᵀx + b = 0, exactamente la misma ecuación, donde w es el vector normal. El signo de wᵀx + b dice de qué lado cae un punto, que es literalmente la predicción.
La condición de perpendicularidad m·m⊥ = −1 se deduce de que los vectores directores deben tener producto punto nulo. Es un caso particular de ortogonalidad, concepto que la parte 05 generaliza a cualquier dimensión.
Calcular la pendiente entre dos puntos exige cuidado numérico: si las abscisas son casi iguales, la resta del denominador sufre cancelación (clase 032) y la pendiente resultante es ruido. En geometría computacional se prefiere la forma general precisamente por eso.
Recta por (1,2) y (5,10).
pendiente: m = (10 − 2)/(5 − 1) = 2
intercepto: b = 2 − 2·1 = 0
explícita: y = 2x
general: 2x − y + 0 = 0 → A = 2, B = −1, C = 0
Verificación en (1,2): 2·1 − 1·2 + 0 = 0 ✓
Vector normal: (2, −1)
Pendiente perpendicular: −1/2
Lectura en ML:
w = (2, −1), b = 0
clasificador: signo(wᵀx + b)Recta en forma pendiente-intercepto y en forma general.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | pendiente, intercepto, verifica_p, pendiente_perpendicular |
| Comprobaciones (0) | — |
compmath run 069Fronteras de decisión lineales, detección de colisiones, ajuste de rectas y geometría computacional en general.
9780387848570 verificado en International ISBN Agency (2026-08-19).La distancia de un punto a una recta es la misma fórmula que define el margen de una SVM.
d = |Ax₀ + By₀ + C| / √(A² + B²)
pie de perpendicular: p − ((Ap₁+Bp₂+C)/(A²+B²))·(A,B)La distancia de un punto a una recta es la longitud del segmento perpendicular que los une, y esa longitud tiene fórmula cerrada. El numerador |Ax₀ + By₀ + C| mide cuánto «falla» el punto la ecuación de la recta; el denominador √(A²+B²) normaliza por la longitud del vector normal, para que el resultado sea una distancia y no dependa de cómo se escaló la ecuación.
Esa normalización es exactamente lo que ocurre en una SVM. El margen geométrico de un punto respecto al hiperplano wᵀx + b = 0 es |wᵀx + b| / ‖w‖, la misma expresión. Maximizar el margen equivale entonces a minimizar ‖w‖ sujeto a que todos los puntos queden bien clasificados, que es precisamente el problema de la clase 289.
El pie de perpendicular es el punto de la recta más cercano, y calcularlo es proyectar. La comprobación es doble: el pie debe satisfacer la ecuación de la recta, y la distancia del punto al pie debe coincidir con la fórmula. El laboratorio verifica ambas cosas.
La generalización a un hiperplano en ℝⁿ es inmediata y no requiere ideas nuevas: la fórmula es idéntica con más términos. Esa es la ventaja de haber escrito la recta en forma general en lugar de explícita.
Distancia del punto (2,7) a la recta 3x − 4y + 5 = 0.
numerador: |3·2 − 4·7 + 5| = |6 − 28 + 5| = 17
denominador: √(9 + 16) = 5
distancia: 17/5 = 3.4
Pie de perpendicular:
t = (3·2 − 4·7 + 5)/(9+16) = −17/25 = −0.68
pie = (2 − 3·(−0.68), 7 − (−4)·(−0.68)) = (4.04, 4.28)
Verificaciones:
3·4.04 − 4·4.28 + 5 = 0 ✓ el pie está en la recta
dist((2,7), (4.04,4.28)) = 3.4 ✓ coincide con la fórmulaDistancia de un punto a una recta y su proyección.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | distancia, distancia_al_pie |
| Comprobaciones (1) | el_pie_pertenece_a_la_recta |
compmath run 070Margen de una SVM, detección de colisiones, clustering basado en distancia a fronteras y métricas de separabilidad.
10.1007/bf00994018 verificado en Crossref (2026-08-19).9780511186189 verificado en International ISBN Agency (2026-08-19).La excentricidad clasifica las cónicas en una única familia continua.
circunferencia: x² + y² = r²
elipse: x²/a² + y²/b² = 1, c = √(a²−b²), e = c/a
parábola y = x²: foco en (0, 1/4)Las cónicas —circunferencia, elipse, parábola e hipérbola— son las curvas que resultan de cortar un cono con un plano, y ese origen común explica que compartan una descripción unificada. La excentricidad e es el parámetro que las distingue: 0 para la circunferencia, entre 0 y 1 para la elipse, exactamente 1 para la parábola y mayor que 1 para la hipérbola.
No son una curiosidad clásica. Las órbitas planetarias son elipses con el Sol en un foco (primera ley de Kepler); las antenas parabólicas concentran las señales paralelas en el foco; las curvas de nivel de una forma cuadrática definida positiva son elipses, hecho central en la parte 06 y en la parte 12, donde la forma de esas elipses determina lo rápido que converge el descenso de gradiente.
Esa última conexión merece énfasis. Cuando la función objetivo tiene curvas de nivel muy alargadas —elipses de excentricidad alta—, el gradiente apunta casi perpendicular a la dirección del mínimo y el descenso zigzaguea. El cociente entre los semiejes es precisamente el número de condición del Hessiano.
La propiedad focal de la parábola —todos los rayos paralelos al eje se reflejan hacia el foco— es la que la hace útil en antenas y faros, y se demuestra con geometría elemental.
Tres cónicas y sus parámetros.
Circunferencia x² + y² = 9
radio 3, área = π·9 = 28.27, e = 0
Elipse x²/25 + y²/9 = 1
a = 5 (semieje mayor), b = 3 (semieje menor)
c = √(25 − 9) = 4 (distancia focal)
e = c/a = 0.8 (bastante alargada)
Parábola y = x²
foco en (0, 0.25), e = 1
Lectura en optimización:
curvas de nivel de x² + 20y² → elipse con e alta
→ el descenso de gradiente zigzagueaCircunferencia, elipse y parábola desde su ecuación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | radio, area_circulo, semieje_mayor, semieje_menor, distancia_focal, excentricidad |
| Comprobaciones (0) | — |
compmath run 071Órbitas, óptica, curvas de nivel de formas cuadráticas y diagnóstico de convergencia en optimización.
9780471504580 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).El producto punto mide alineación; la norma mide magnitud; juntos dan el ángulo.
u·v = Σuᵢvᵢ = ‖u‖‖v‖cos θ
‖u‖ = √(u·u)
u ⊥ v ⟺ u·v = 0Un vector admite dos lecturas que conviene mantener a la vez: es una lista de números y es una flecha con dirección y magnitud. El producto punto conecta ambas: definido algebraicamente como suma de productos componente a componente, resulta ser geométricamente ‖u‖‖v‖cos θ. Esa identidad es la que convierte el álgebra en geometría.
De ella se lee todo lo demás. Si el producto punto es positivo, los vectores apuntan hacia el mismo semiespacio; si es cero, son ortogonales; si es negativo, se oponen. La ortogonalidad como «producto punto nulo» es la definición que se generaliza a cualquier dimensión, donde el concepto de «ángulo recto» ya no es visualizable.
Normalizar un vector —dividirlo por su norma— separa dirección de magnitud. Comparar direcciones exige normalizar primero, y esa operación es exactamente la que define la similitud coseno, la métrica estándar entre embeddings (clase 322). Comparar sin normalizar mezcla «de qué habla» con «cuánto texto es», que casi nunca es lo que se quiere.
Este es el punto donde la parte 03 entrega el testigo a la parte 05: todo lo dicho aquí en dos dimensiones vale sin cambios en 768, con la salvedad de que la intuición visual deja de funcionar y hay que confiar en el álgebra.
Dos vectores perpendiculares.
u = (3, 4), v = (−4, 3)
‖u‖ = √(9+16) = 5
‖v‖ = √(16+9) = 5
u·v = 3·(−4) + 4·3 = −12 + 12 = 0 → ortogonales ✓
cos θ = 0/(5·5) = 0 → θ = 90°
u normalizado: (0.6, 0.8), norma = 1.0 ✓Vector como dirección y magnitud; ángulo entre vectores.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | |u|, |v|, u·v, cos_theta, angulo_grados |
| Comprobaciones (1) | son_ortogonales |
compmath run 072Similitud coseno entre embeddings, proyecciones, detección de ortogonalidad, iluminación en gráficos (producto punto entre normal y dirección de luz) y capas densas.
9781733146678 verificado en International ISBN Agency (2026-08-19).Las coordenadas homogéneas convierten la traslación —que no es lineal— en una multiplicación de matrices.
punto homogéneo: (x, y, 1)
traslación: [[1,0,tx],[0,1,ty],[0,0,1]]
escala: [[sx,0,0],[0,sy,0],[0,0,1]]La traslación tiene un problema estructural: no es una transformación lineal. Una transformación lineal debe mandar el origen al origen, y trasladar precisamente lo mueve. Eso impide componerla con rotaciones y escalas usando un único producto de matrices, que es lo que la hace incómoda.
Las coordenadas homogéneas resuelven el problema con un truco elegante: se añade una coordenada extra fija a 1, de modo que un punto del plano se representa como (x, y, 1) en ℝ³. En ese espacio ampliado, la traslación sí es lineal, y se escribe como una matriz 3×3 cuya última columna contiene el desplazamiento.
La ganancia es enorme en la práctica. Toda la cadena de transformaciones de un vértice —modelo, mundo, vista, proyección— se compone en una única matriz que se calcula una vez y se aplica a millones de vértices con un solo producto. Es la razón por la que las GPU están optimizadas para multiplicar matrices 4×4.
El orden de composición importa y es la fuente de errores más común: T·S escala y luego traslada; S·T traslada y luego escala, con lo que el desplazamiento también se escala. El laboratorio comprueba que ambos productos dan resultados distintos, que es la forma más directa de recordarlo.
Trasladar y escalar el punto (2,3), en los dos órdenes.
punto homogéneo: (2, 3, 1)
T (traslación +5, −2) S (escala ×2, ×0.5)
[1 0 5] [2 0 0]
[0 1 −2] [0 0.5 0]
[0 0 1] [0 0 1]
T·(2,3,1) = (7, 1, 1)
S·(2,3,1) = (4, 1.5, 1)
T·S aplicado a (2,3,1) = (9, −0.5, 1) escala y luego traslada
S·T aplicado a (2,3,1) = (14, −0.5, 1) traslada y luego escala
¿iguales? No. El orden importa.Traslación y escala en coordenadas homogéneas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | el_orden_importa |
compmath run 073Pipeline gráfico, robótica (matrices de transformación homogénea entre articulaciones), visión artificial y cualquier composición de transformaciones afines.
9780511186189 verificado en International ISBN Agency (2026-08-19).Una matriz de rotación es ortogonal y de determinante 1: preserva normas, ángulos y orientación.
R(θ) = [[cos θ, −sin θ], [sin θ, cos θ]]
RᵀR = I, det R = 1
R(α)·R(β) = R(α+β)La matriz de rotación se construye viendo a dónde van los vectores de la base: (1,0) va a (cos θ, sin θ) y (0,1) va a (−sin θ, cos θ). Esas dos imágenes son las columnas de la matriz. Este método —las columnas de una matriz son las imágenes de la base— es general y es la forma correcta de leer cualquier matriz de transformación (clase 123).
Dos propiedades la caracterizan. Es ortogonal, RᵀR = I, lo que significa que su inversa es su transpuesta: deshacer una rotación es transponer, sin necesidad de invertir. Y su determinante es 1, lo que indica que preserva áreas y orientación (una reflexión tendría determinante −1).
La consecuencia numérica es importante: las transformaciones ortogonales no amplifican el error. Su número de condición es 1, el mejor posible. Por eso los algoritmos numéricamente estables se construyen con rotaciones y reflexiones (Givens, Householder) en lugar de con transformaciones generales, y por eso la factorización QR es preferible a las ecuaciones normales (clase 234).
La composición de rotaciones suma ángulos, R(α)R(β) = R(α+β), lo que se demuestra con las fórmulas de suma de la clase 066. En 2D las rotaciones conmutan; en 3D no, y esa es una de las diferencias más importantes entre ambos casos.
Rotar (1,0) noventa grados.
R(90°) = [[cos 90, −sin 90], [sin 90, cos 90]]
= [[0, −1], [1, 0]]
R·(1,0) = (0, 1) ✓ el eje x va al eje y
det R = 0·0 − (−1)·1 = 1 ✓ preserva área y orientación
RᵀR = [[1,0],[0,1]] = I ✓ ortogonal
‖(1,0)‖ = 1, ‖R(1,0)‖ = 1 ✓ preserva la norma
Cuatro rotaciones de 90° = identidadMatriz de rotación: ortogonal y de determinante 1.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | angulo_grados, determinante |
| Comprobaciones (2) | preserva_la_norma, cuatro_rotaciones_vuelven_al_origen |
compmath run 074Gráficos, robótica, aumento de datos por rotación, factorizaciones QR estables y transformaciones ortogonales en general.
9780898719574 verificado en International ISBN Agency (2026-08-19).El valor absoluto del determinante es el factor por el que la transformación multiplica las áreas; su signo indica si invierte la orientación.
área transformada = |det M| · área original
det R = 1 (rotación), det S = sx·sy (escala), det F = −1 (reflexión)El determinante de una matriz 2×2 tiene una interpretación geométrica precisa: es el área con signo del paralelogramo que forman sus columnas. Como las columnas son las imágenes de los vectores de la base —que forman un cuadrado de área 1—, el determinante es exactamente el factor por el que la transformación escala las áreas.
El signo aporta información adicional: si es negativo, la transformación invierte la orientación, es decir, convierte un recorrido antihorario en horario. Las reflexiones tienen determinante negativo; las rotaciones, positivo. Un determinante nulo significa que la transformación aplasta el plano sobre una recta o un punto: pierde información y no es invertible.
Esta lectura hace comprensible por qué det(AB) = det(A)·det(B): aplicar dos transformaciones escala el área por el producto de sus factores. Y por qué una matriz con determinante cero no tiene inversa: no se puede recuperar un área a partir de algo que quedó aplastado.
La generalización a n dimensiones es directa: el determinante es el factor de escalado del volumen n-dimensional. Ese hecho es el que aparece en el cambio de variable de una integral múltiple (clase 173) y en el jacobiano de una transformación de variables aleatorias, donde el determinante corrige la densidad.
Tres transformaciones y su determinante.
Rotación 45°: det = 1 preserva área, mantiene orientación
Escala ×2: det = 4 cuadruplica el área (2·2)
Reflexión en x: det = −1 preserva área, INVIERTE orientación
Composición R·S aplicada a (1,1):
primero escala ×2 → (2,2)
luego rota 45° → (0, 2.83)
det(R·S) = det(R)·det(S) = 1·4 = 4 ✓Composición de rotación, escala y reflexión.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | det_rotacion, det_escala, det_reflexion |
| Comprobaciones (1) | reflexion_invierte_orientacion |
compmath run 075Cambio de variable en integrales múltiples, jacobiano en transformaciones de distribuciones, detección de degeneración en geometría computacional y normalizing flows.
9781733146678 verificado en International ISBN Agency (2026-08-19).Las coordenadas polares describen un punto por distancia y ángulo; atan2 hace la conversión inversa correctamente.
r = √(x²+y²), θ = atan2(y, x)
x = r·cos θ, y = r·sin θElegir el sistema de coordenadas adecuado puede convertir un problema difícil en uno trivial. Una circunferencia en cartesianas es x² + y² = r²; en polares es simplemente r = constante. Los problemas con simetría radial —campos centrales, difusión desde un punto, patrones de radiación— se simplifican radicalmente al cambiar de coordenadas.
La conversión de cartesianas a polares exige atan2 por la razón de la clase 065: el cociente y/x no distingue cuadrantes opuestos. Con atan2(y, x) el ángulo sale correcto en los cuatro cuadrantes y en los ejes, incluido el caso x = 0 que rompería la división.
La conversión no es biyectiva sin restricciones: el ángulo está determinado salvo múltiplos de 2π, y el origen (r = 0) no tiene ángulo definido. Al implementar hay que decidir el rango del ángulo —habitualmente (−π, π]— y documentarlo, porque comparar ángulos de rangos distintos produce discrepancias.
En dimensiones superiores el análogo son las coordenadas esféricas, y en la parte 09 aparece el mismo cambio de variable al deducir la distribución normal multivariante. El jacobiano de la transformación —r en polares— es el factor que la clase 075 explicó.
Convertir (−3, 4) a polares y volver.
r = √(9 + 16) = 5
θ = atan2(4, −3) = 2.2143 rad = 126.87° (cuadrante II) ✓
Vuelta a cartesianas:
x = 5·cos(2.2143) = −3.0
y = 5·sin(2.2143) = 4.0 ✓ roundtrip exacto
Con atan(4/−3) se habría obtenido −0.9273 rad = −53.13°,
que es el cuadrante IV: incorrecto.Conversión cartesiana ↔ polar y su ida y vuelta.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | r, theta_rad, theta_grados |
| Comprobaciones (2) | roundtrip_ok, atan2_maneja_cuadrantes |
compmath run 076Problemas con simetría radial, patrones de radiación, transformadas en coordenadas polares, robótica y representación de fase y magnitud en señales complejas.
math.atan2 y cmath.polar — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9781285740621 verificado en International ISBN Agency (2026-08-19).El producto cruz da un vector ortogonal a dos dados, y su norma es el área del paralelogramo que forman.
a × b = (a₂b₃−a₃b₂, a₃b₁−a₁b₃, a₁b₂−a₂b₁)
‖a × b‖ = ‖a‖‖b‖ sin θ = área del paralelogramo
plano: n·(x − p₀) = 0En tres dimensiones aparece una operación sin análogo en 2D: el producto cruz, que a dos vectores les asocia un tercero perpendicular a ambos. Su norma es el área del paralelogramo que forman, y su sentido lo da la regla de la mano derecha. Es una operación específica de ℝ³ —no se generaliza a dimensión arbitraria sin cambiar de formalismo—, y por eso es tan característica de la geometría espacial.
Un plano queda determinado por un punto y un vector normal: la ecuación n·(x − p₀) = 0 dice que el vector que va de p₀ a x es perpendicular a n. Como el producto cruz de dos vectores del plano da su normal, dos direcciones bastan para definir un plano.
La distancia de un punto a un plano se calcula con la misma estructura que la distancia punto-recta de la clase 070: producto punto con la normal, dividido por la norma de la normal. Cambia la dimensión, no la idea, y esa es la ventaja de haber entendido la versión 2D correctamente.
En gráficos por computador las normales son omnipresentes: determinan la iluminación (el brillo depende del producto punto entre la normal y la dirección de la luz), la orientación de una cara y si un polígono mira hacia la cámara o hacia el lado opuesto (backface culling).
Normal al plano z = 0 y distancia de un punto.
a = (1,0,0), b = (0,1,0)
a × b = (0·0 − 0·1, 0·0 − 1·0, 1·1 − 0·0) = (0, 0, 1)
Verificaciones:
(a×b)·a = 0 ✓ ortogonal a a
(a×b)·b = 0 ✓ ortogonal a b
‖a×b‖ = 1 = área del cuadrado unitario ✓
Distancia de (2,3,5) al plano z = 0:
|(0,0,1)·(2,3,5)| / ‖(0,0,1)‖ = 5/1 = 5Plano por su normal, distancia de un punto y producto cruz.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | distancia_al_plano, norma_del_producto_cruz_es_el_area |
| Comprobaciones (1) | normal_es_ortogonal_a_a |
compmath run 077Iluminación y sombreado, orientación de superficies, detección de caras traseras, cinemática de sólidos rígidos y momento de fuerzas en física.
9781733146678 verificado en International ISBN Agency (2026-08-19).La perspectiva divide por la profundidad, y esa división es lo que hace que los objetos lejanos se vean pequeños.
proyección ortogonal sobre u: proj_u(x) = (x·u/u·u)·u
perspectiva: x' = f·x/z, y' = f·y/zHay dos proyecciones distintas y conviene no mezclarlas. La proyección ortogonal sobre una dirección es una operación lineal que descompone un vector en una componente paralela y otra perpendicular. Es la base de PCA (clase 135), de mínimos cuadrados (clase 119) y de cualquier «cuánto de esta dirección hay en este vector».
La proyección en perspectiva es otra cosa: divide las coordenadas por la profundidad, y por eso no es lineal. Es la que reproduce cómo vemos: dos objetos del mismo tamaño a distancias distintas ocupan ángulos distintos en la retina. La división por z es exactamente lo que hace que las vías del tren converjan en el horizonte.
La proyección ortogonal viene acompañada de un teorema de Pitágoras: si x = p + r con p la proyección y r el residuo ortogonal, entonces ‖x‖² = ‖p‖² + ‖r‖². Comprobar esa identidad es la verificación estándar de que una proyección se calculó bien, y el laboratorio la incluye.
Que la perspectiva no sea lineal explica por qué las coordenadas homogéneas de la clase 073 son imprescindibles en gráficos: la división por z se difiere hasta el final (la «división de perspectiva») y todo lo anterior se mantiene como productos de matrices.
Proyección ortogonal y perspectiva.
Ortogonal de v = (4,3) sobre u = (1,0):
coef = (v·u)/(u·u) = 4/1 = 4
proyección = (4, 0)
residuo = (0, 3)
residuo·u = 0 ✓ ortogonal
Pitágoras: 25 = 16 + 9 ✓
Perspectiva con f = 2, z = 5:
x' = 2·4/5 = 1.6
el mismo punto a z = 10 daría 0.8
→ al doblar la distancia, el tamaño se reduce a la mitadProyección ortogonal de un vector y proyección en perspectiva.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | perspectiva_x'_con_f=2_z=5 |
| Comprobaciones (3) | residuo_ortogonal_a_u, pitagoras, objetos_lejanos_se_encogen |
compmath run 078Pipeline gráfico, calibración de cámaras, PCA, mínimos cuadrados y descomposición ortogonal en general.
9780511186189 verificado en International ISBN Agency (2026-08-19).9781733146678 verificado en International ISBN Agency (2026-08-19).El pipeline geométrico encadena modelo, mundo, cámara y pantalla como una composición de transformaciones.
x_pantalla = Proyección · Vista · Modelo · x_local
perspectiva final: (f·x/z, f·y/z)Todo sistema que dibuja o interpreta escenas tridimensionales ejecuta la misma secuencia de cambios de coordenadas. El objeto se define en su espacio local; una matriz de modelo lo coloca en el mundo; una matriz de vista lo lleva al sistema de la cámara; y una proyección lo pasa a pantalla. Cada etapa es una transformación, y componerlas es multiplicar sus matrices.
La ventaja de esta arquitectura es de reutilización: un mismo modelo 3D se puede colocar cien veces en la escena cambiando solo la matriz de modelo, sin tocar sus vértices. Y la composición se calcula una vez por objeto, no una vez por vértice.
El orden de multiplicación es la fuente inagotable de errores, y no hay atajo: hay que fijar una convención (fila o columna, premultiplicar o posmultiplicar) y respetarla en todo el sistema. Las bibliotecas difieren entre sí, y mezclar dos convenciones produce escenas que se ven «casi bien».
El mismo pipeline, recorrido al revés, es el problema de la visión artificial: dada una imagen, recuperar la geometría de la escena. Ahí la división por z se convierte en la ambigüedad fundamental —no se puede distinguir un objeto pequeño y cercano de uno grande y lejano sin información adicional— y de ahí nacen la estereovisión y la estructura a partir del movimiento.
Un punto recorriendo las cuatro etapas.
1. espacio modelo: (1, 1, 1)
2. rotación 30° en Z → mundo:
(0.366, 1.366, 1.0)
3. cámara desplazada 4 en Z:
(0.366, 1.366, 5.0)
4. proyección con f = 1.5:
x' = 1.5·0.366/5 = 0.1098
y' = 1.5·1.366/5 = 0.4098
Etapas: modelo → mundo → cámara → proyección → pantallaPipeline geométrico típico: modelo → mundo → cámara → pantalla.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 079Motores de videojuegos, realidad aumentada, calibración de cámaras, robótica y reconstrucción 3D.
9780511186189 verificado en International ISBN Agency (2026-08-19).9780429225406 verificado en International ISBN Agency (2026-08-19).El área de un polígono transformado es la original multiplicada por el valor absoluto del determinante.
fórmula del cordón: A = ½|Σ(xᵢyᵢ₊₁ − xᵢ₊₁yᵢ)|
A' = |det M| · AEl capstone reúne las tres ideas centrales de la parte: una matriz es una transformación, componerlas es multiplicarlas, y el determinante mide cómo cambian las áreas. Se construye un motor mínimo que aplica una transformación compuesta a un polígono y comprueba la relación entre áreas.
El área se calcula con la fórmula del cordón (o de Gauss), que suma productos cruzados de vértices consecutivos. Es un resultado notable: el área de un polígono arbitrario se obtiene recorriendo su frontera, sin necesidad de triangularlo. El signo de la suma indica además el sentido del recorrido, información que se usa para detectar orientación en geometría computacional.
La verificación central es que área_transformada = |det M| · área_original. Que se cumpla para un cuadrado rotado y escalado no es sorprendente; que se cumpla para cualquier polígono es el contenido geométrico del determinante, y comprobarlo numéricamente cierra la parte con una relación que se usará en integración múltiple y en transformación de densidades.
Un motor así, con unas pocas decenas de líneas, es el núcleo de cualquier sistema de gráficos 2D. Lo que añaden las bibliotecas reales es rendimiento, antialiasing y gestión de recursos; la matemática es exactamente esta.
Cuadrado unitario rotado 45° y escalado ×2.
polígono original: (0,0), (1,0), (1,1), (0,1)
área (cordón): 1.0
M = R(45°) · S(2)
= [[1.414, −1.414], [1.414, 1.414]]
polígono transformado:
(0,0), (1.414, 1.414), (0, 2.828), (−1.414, 1.414)
área transformada: 4.0
det M = 1.414² + 1.414² = 4.0
Verificación: 1.0 × |4.0| = 4.0 ✓Capstone: motor 2D que compone transformaciones sobre un polígono.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | area_original, area_transformada, determinante |
| Comprobaciones (1) | area_escala_como_|det| |
compmath run 080Motores gráficos 2D, cálculo de áreas en SIG, detección de orientación de polígonos y cambio de variable en integrales.
9783540779742 verificado en International ISBN Agency (2026-08-19).Lógica, conjuntos, conteo, inducción, recurrencias, grafos y aritmética modular: la matemática que hace demostrable un programa.
La matemática discreta es la que trata objetos separados y contables —proposiciones, conjuntos, grafos, enteros— frente a la continua, que trata magnitudes que fluyen. Es la matemática nativa de la computación, porque un ordenador es un objeto discreto: estados finitos, memoria numerable, pasos separados.
Las clases 081 a 083 son lógica. Su valor no es filosófico sino operativo: una implicación es equivalente a su contrarrecíproca pero no a su recíproca, y confundirlas es el error de razonamiento más caro que existe —en matemáticas y fuera de ellas—. El orden de los cuantificadores cambia el significado: «para todo x existe un y» y «existe un y para todo x» son afirmaciones distintas, y esa distinción reaparece en las definiciones de convergencia (parte 07) y en las cotas de aprendizaje (parte 17).
Las clases 084 a 090 construyen el conteo. El principio del producto, las permutaciones, las combinaciones y el principio del palomar son la base sobre la que la parte 09 define la probabilidad: un espacio muestral equiprobable convierte cada probabilidad en un cociente de conteos. El palomar (clase 090) merece atención especial porque demuestra que las colisiones de hash existen sin construir ninguna.
Las clases 091 y 092 son inducción y recurrencias: cómo demostrar algo sobre infinitos casos con dos pasos, y cómo analizar un algoritmo que se llama a sí mismo. La inducción es literalmente un bucle for con garantía, y la recurrencia es lo que hace que Fibonacci ingenuo tarde exponencialmente y memoizado tarde linealmente.
Las clases 093 a 096 son teoría de grafos. Un grafo es la estructura más versátil de la computación: modela dependencias, redes, rutas, jerarquías y —esto importa— los grafos de cómputo sobre los que se ejecuta la autodiferenciación. El orden topológico de la clase 096 es exactamente el orden en que un framework de deep learning recorre las operaciones al propagar gradientes.
El cierre (097 a 099) es álgebra booleana y aritmética modular, la base del hardware digital y de la criptografía. El capstone monta un planificador de dependencias que detecta ciclos y calcula qué tareas pueden ejecutarse en paralelo, que es el problema real de cualquier sistema de construcción.
for con garantía.Los grafos de cómputo, la búsqueda en árbol y las GNN son estructuras discretas; el conteo sostiene la probabilidad que después usa todo modelo generativo.
| Término | Definición | Clase |
|---|---|---|
| Aritmética modular | Aritmética de los restos respecto a un módulo. Base de hashing, criptografía y checksums. | 098 |
| BFS | Recorrido en anchura. Encuentra el camino con menos aristas en un grafo no ponderado. Coste O(V+E). | 094 |
| Combinación | Selección sin orden. C(n,k) = n!/(k!(n−k)!). Simétrica: C(n,k) = C(n,n−k). | 089 |
| Contrarrecíproca | ¬q → ¬p. Lógicamente equivalente a p → q, y a menudo más fácil de demostrar. | 081 |
| Criba de Eratóstenes | Algoritmo que encuentra todos los primos hasta n tachando múltiplos. Coste O(n log log n). | 099 |
| Cuantificador universal | ∀x P(x): P se cumple para todo elemento del universo. Su negación es ∃x ¬P(x). | 083 |
| DAG | Grafo dirigido acíclico. Admite orden topológico; su ausencia delata un ciclo. | 096 |
| Función inyectiva | Entradas distintas dan salidas distintas. Condición necesaria para que exista inversa. | 086 |
| Grado de un vértice | Número de aristas incidentes. La suma de los grados es el doble del número de aristas. | 093 |
| Implicación | p → q, falsa solo cuando p es verdadera y q falsa. Equivale a su contrarrecíproca, no a su recíproca. | 081 |
| Inclusión-exclusión | |A∪B| = |A| + |B| − |A∩B|. Corrige el doble conteo de la intersección. | 084 |
| Inducción matemática | Método de demostración con caso base y paso inductivo. Cubre infinitos casos con dos argumentos. | 091 |
| Leyes de De Morgan | ¬(p∧q) ≡ ¬p∨¬q y ¬(p∨q) ≡ ¬p∧¬q. Rigen la negación de condiciones compuestas. | 082 |
| Orden topológico | Ordenación de los vértices de un DAG tal que toda arista va de un vértice anterior a uno posterior. | 096 |
| Permutación | Selección ordenada. P(n,k) = n!/(n−k)! | 088 |
| Principio del palomar | Si n objetos se reparten en m cajas con n > m, alguna caja tiene al menos dos. Demuestra colisiones sin construirlas. | 090 |
| Recurrencia | Definición de un término en función de los anteriores. Su coste depende de si se memoiza. | 092 |
| Regla del producto | Si una decisión tiene m opciones y otra n, hay m·n combinaciones. | 087 |
| Relación de equivalencia | Relación reflexiva, simétrica y transitiva. Particiona el conjunto en clases disjuntas. | 085 |
| Tautología | Fórmula verdadera bajo toda asignación de valores de verdad. | 082 |
| Árbol | Grafo conexo sin ciclos. Con n vértices tiene exactamente n−1 aristas. | 095 |
Una implicación equivale a su contrarrecíproca, nunca a su recíproca.
p → q ≡ ¬p ∨ q
p → q ≡ ¬q → ¬p (contrarrecíproca)
p → q ≢ q → p (recíproca)La lógica proposicional asigna un valor de verdad a cada enunciado y define cómo se combinan. El conector que causa más problemas es la implicación, porque su definición formal no coincide con el uso coloquial: p → q es falsa únicamente cuando p es verdadera y q falsa. Si p es falsa, la implicación es verdadera sea cual sea q, lo que se llama verdad vacua.
Esa definición tiene una consecuencia práctica inmediata: «todos los elementos de la lista vacía cumplen la condición» es cierto, y por eso all([]) devuelve True en Python. No es una rareza del lenguaje: es la lógica correcta.
La equivalencia con la contrarrecíproca es la herramienta de demostración más útil de toda la matemática. Probar «si n² es par entonces n es par» directamente es incómodo; probar «si n es impar entonces n² es impar» es inmediato. Ambas afirmaciones son la misma, y elegir la más fácil es legítimo.
Confundir una implicación con su recíproca es la falacia más extendida. «Si llueve, el suelo está mojado» no permite concluir «si el suelo está mojado, llovió». En estadística la misma confusión es la falacia del fiscal: P(evidencia | inocente) pequeña no implica P(inocente | evidencia) pequeña, tema de la clase 186.
Tabla de verdad de las tres formas.
p q p→q q→p (recíproca) ¬q→¬p (contrarrecíproca)
V V V V V
V F F V F
F V V F V
F F V V V
¿p→q ≡ contrarrecíproca? Sí, columnas idénticas ✓
¿p→q ≡ recíproca? No, difieren en 2 filas ✗
Verdad vacua: si p es falsa, p→q es verdadera siempre.
Por eso all([]) == True.Implicación, contrarrecíproca y recíproca no son lo mismo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | implicacion_equivale_a_contrarreciproca, implicacion_equivale_a_reciproca |
compmath run 081Demostración por contrarrecíproca, diseño de condiciones en código, especificación de contratos y la lógica de las pruebas de hipótesis (parte 10).
9781108539890 verificado en International ISBN Agency (2026-08-19).Las leyes de De Morgan rigen cómo se niega una condición compuesta.
¬(p ∧ q) ≡ ¬p ∨ ¬q
¬(p ∨ q) ≡ ¬p ∧ ¬q
p ⊕ q ≡ (p ∨ q) ∧ ¬(p ∧ q)Una tabla de verdad decide cualquier equivalencia proposicional por fuerza bruta: se evalúan las dos fórmulas en las 2ⁿ asignaciones posibles y se comparan. Es un método completo —siempre da respuesta— y de coste exponencial, lo que anticipa por qué SAT es un problema difícil (clase 097).
Las leyes de De Morgan son las que más se usan sin nombrarlas. Al negar una condición compuesta, la conjunción se convierte en disyunción y viceversa, y cada término se niega. En código: la negación de edad >= 18 and tiene_permiso es edad < 18 or not tiene_permiso, no edad < 18 and not tiene_permiso. Ese error produce condiciones que parecen razonables y filtran mal.
Una tautología es verdadera bajo toda asignación; una contradicción, falsa bajo todas. Detectarlas importa porque señalan código muerto: una condición tautológica siempre se cumple y su rama alternativa nunca se ejecuta.
El XOR merece mención aparte: es verdadero cuando los operandos difieren, y tiene la propiedad de ser su propia inversa, (a ⊕ b) ⊕ b = a. Esa propiedad lo hace omnipresente en criptografía, en sumas de comprobación y en el intercambio de variables sin memoria auxiliar.
Verificar De Morgan exhaustivamente.
4 casos evaluados (2² asignaciones)
p q | ¬(p∧q) ¬p∨¬q | ¬(p∨q) ¬p∧¬q
V V | F F | F F
V F | V V | F F
F V | V V | F F
F F | V V | V V
Ambas leyes: columnas idénticas ✓
Tautología: p ∨ ¬p → V en las 4 filas
Contradicción: p ∧ ¬p → F en las 4 filas
XOR: (V,V)→F (V,F)→V (F,V)→V (F,F)→FLeyes de De Morgan verificadas exhaustivamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | casos_evaluados |
| Comprobaciones (4) | ¬(p∧q) ≡ ¬p∨¬q, ¬(p∨q) ≡ ¬p∧¬q, tautologia_p∨¬p, contradiccion_p∧¬p |
compmath run 082Simplificación de condiciones, optimización de consultas SQL, diseño de circuitos digitales y refactorización de código con lógica compleja.
Intercambiar dos cuantificadores cambia el significado de la afirmación.
¬(∀x P(x)) ≡ ∃x ¬P(x)
∀x ∃y Q(x,y) ≢ ∃y ∀x Q(x,y)La lógica de predicados añade a la proposicional la capacidad de hablar sobre objetos de un universo. ∀x P(x) afirma que P vale para todos; ∃x P(x), que vale para al menos uno. La negación intercambia los cuantificadores y niega el predicado, que es la forma general de la regla que la clase 019 aplicó al contraejemplo.
El punto delicado es el orden. ∀x ∃y (y > x) dice que para cada x existe alguien mayor —cierto en los naturales—. ∃y ∀x (y > x) dice que existe un número mayor que todos —falso—. Las mismas palabras en distinto orden afirman cosas distintas, y en un conjunto finito la segunda puede ser cierta mientras que en uno infinito no.
Esta distinción no es académica. La definición de límite —«para todo ε existe un δ»— tiene ese orden y no el contrario: δ puede depender de ε. La convergencia uniforme exige el orden inverso —«existe un δ que sirve para todo ε»— y por eso es una condición más fuerte. Toda la parte 07 se apoya en leer esos cuantificadores correctamente.
En teoría del aprendizaje (parte 17) los enunciados PAC tienen la misma estructura: para todo ε y δ, existe un tamaño muestral m tal que... Leer mal el orden convierte una garantía útil en una afirmación trivial o imposible.
El orden de los cuantificadores en {1,...,6}.
Universo: {1, 2, 3, 4, 5, 6}
∀x par(x) → Falso (1 no es par)
∃x par(x) → Verdadero
Negación: ¬(∀x par(x)) ≡ ∃x ¬par(x) → Verdadero ✓
∀x ∃y (y > x): ¿para cada x hay alguien mayor?
x=6 → no hay ninguno mayor en el universo → Falso
∃y ∀x (y > x): ¿hay uno mayor que todos?
ningún y supera a sí mismo → Falso
En ℕ (infinito): el primero sería Verdadero y el segundo Falso.
El orden importa.Cuantificadores: el orden cambia el significado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (6) | ∀x par(x), ∃x par(x), negacion_de_∀_es_∃¬, ∀x∃y y>x, ∃y∀x y>x, el_orden_de_cuantificadores_importa |
compmath run 083Definiciones de límite y continuidad, especificación formal de sistemas, cotas de aprendizaje PAC y verificación de programas.
9781108539890 verificado en International ISBN Agency (2026-08-19).9781139950619 verificado en International ISBN Agency (2026-08-19).Inclusión-exclusión corrige el doble conteo al unir conjuntos que se solapan.
|A ∪ B| = |A| + |B| − |A ∩ B|
|P(A)| = 2^|A|Un conjunto es una colección sin orden y sin repeticiones. Esa doble propiedad lo distingue de una lista y determina qué operaciones tienen sentido: unión, intersección, diferencia y diferencia simétrica, todas con implementación directa y eficiente en Python mediante set.
El principio de inclusión-exclusión responde a una pregunta que la suma ingenua contesta mal: al contar los elementos de una unión, los que están en ambos conjuntos se cuentan dos veces, y hay que restarlos una. Con tres conjuntos la fórmula alterna signos —se suman los individuales, se restan las intersecciones dos a dos y se suma la triple—, patrón que generaliza a n conjuntos.
El conjunto de partes de un conjunto de n elementos tiene 2ⁿ elementos, porque cada elemento está o no está: es la regla del producto aplicada n veces. Esa cifra explica por qué la búsqueda exhaustiva sobre subconjuntos es inviable salvo para n pequeño, y por qué la selección de características es un problema difícil.
En probabilidad (parte 09), inclusión-exclusión reaparece intacta como la regla de la suma: P(A∪B) = P(A) + P(B) − P(A∩B). Los conjuntos se convierten en eventos y los cardinales en probabilidades, pero la estructura es la misma.
Operaciones e inclusión-exclusión con dos conjuntos.
A = {1,2,3,4,5} |A| = 5
B = {4,5,6,7} |B| = 4
A ∪ B = {1,2,3,4,5,6,7} |A∪B| = 7
A ∩ B = {4,5} |A∩B| = 2
A − B = {1,2,3}
A △ B = {1,2,3,6,7} (diferencia simétrica)
Inclusión-exclusión: 5 + 4 − 2 = 7 = |A∪B| ✓
Suma ingenua: 5 + 4 = 9 ✗ cuenta 4 y 5 dos veces
Partes de A: 2⁵ = 32 subconjuntosOperaciones de conjuntos e inclusión-exclusión.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | |A|+|B|-|A∩B|, |A∪B|, partes_de_A |
| Comprobaciones (1) | inclusion_exclusion_ok |
compmath run 084Consultas con condiciones múltiples, deduplicación, conteo de casos favorables en probabilidad y análisis de solapamiento entre poblaciones.
set — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Reflexiva, simétrica y transitiva son las tres condiciones que hacen de una relación una equivalencia, y toda equivalencia particiona el conjunto.
reflexiva: ∀a, aRa
simétrica: aRb ⟹ bRa
transitiva: aRb ∧ bRc ⟹ aRcUna relación es un conjunto de pares. Las tres propiedades clásicas se comprueban por separado y su combinación tiene consecuencias muy fuertes: si una relación es reflexiva, simétrica y transitiva, particiona el conjunto en clases disjuntas cuya unión es el total. No hay que demostrar la partición: se sigue de las tres propiedades.
El ejemplo canónico es la congruencia módulo n: x ≡ y (mod 3) si x − y es múltiplo de 3. Sus clases de equivalencia son los restos {0,1,2}, y esa partición es exactamente la estructura sobre la que se define la aritmética modular de la clase 098.
La utilidad práctica es de modelado. Cuando se decide que dos objetos son «el mismo» a efectos de un sistema —dos URLs que apuntan al mismo recurso, dos registros del mismo cliente, dos representaciones del mismo número racional—, se está definiendo una relación de equivalencia, y conviene comprobar que cumple las tres propiedades. Una relación de «similitud» que no es transitiva produce agrupamientos inconsistentes.
Ese fallo es real y frecuente: la deduplicación por umbral de similitud no es transitiva —A parecido a B y B parecido a C no implica A parecido a C— y por eso los algoritmos de agrupamiento por similitud necesitan una definición explícita de transitividad, como el cierre transitivo o el enlace completo.
Congruencia módulo 3 sobre {0,...,5}.
Relación: x ~ y si (x − y) mod 3 == 0
reflexiva: (x−x) mod 3 = 0 ✓
simétrica: si (x−y)≡0 entonces (y−x)≡0 ✓
transitiva: (x−y)≡0 y (y−z)≡0 ⟹ (x−z)≡0 ✓
→ es una relación de equivalencia
Clases de equivalencia:
[0] = {0, 3}
[1] = {1, 4}
[2] = {2, 5}
Disjuntas y su unión es todo el conjunto ✓Reflexiva, simétrica y transitiva: la receta de una relación de equivalencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (5) | reflexiva, simetrica, transitiva, es_equivalencia, particiona_el_universo |
compmath run 085Deduplicación de registros, normalización de datos, particiones de un conjunto, aritmética modular y clases de equivalencia de fracciones.
9781475716450 verificado en International ISBN Agency (2026-08-19).Inyectiva, sobreyectiva y biyectiva describen qué información conserva una función.
funciones totales de A a B: |B|^|A|
biyecciones de A en A: |A|!Sobre conjuntos finitos, las tres propiedades se cuentan. Una función es inyectiva si no repite salidas, sobreyectiva si alcanza todo el codominio y biyectiva si ambas. Entre conjuntos del mismo tamaño finito, inyectiva y sobreyectiva son equivalentes —hecho que falla en conjuntos infinitos y da lugar a las paradojas de Hilbert—.
El conteo de funciones ilustra la regla del producto: cada uno de los |A| elementos puede ir a cualquiera de los |B| destinos, luego hay |B|^|A| funciones. Las biyecciones de un conjunto en sí mismo son |A|!, que es el conteo de permutaciones de la clase 088.
La inyectividad es la condición que hace invertible una función (clase 058) y la que define una función hash perfecta. Como una función hash mapea un dominio enorme en un rango pequeño, no puede ser inyectiva, y de ahí las colisiones que el palomar garantiza en la clase 090.
En machine learning, la pérdida de inyectividad es lo que hace que una capa no sea invertible: si la dimensión de salida es menor que la de entrada, información se pierde irremediablemente. Los normalizing flows se construyen precisamente con capas biyectivas para poder invertirlas y calcular densidades exactas.
Dos funciones sobre un dominio de tres elementos.
dominio = {1,2,3}, codominio = {a,b,c}
f = {1→a, 2→b, 3→c}
inyectiva: 3 salidas distintas ✓
sobreyectiva: alcanza a, b y c ✓
biyectiva ✓
g = {1→a, 2→a, 3→b}
inyectiva: 1 y 2 comparten salida ✗
sobreyectiva: no alcanza c ✗
Conteo:
funciones totales posibles: 3³ = 27
biyecciones posibles: 3! = 6Inyectiva, sobreyectiva y biyectiva sobre conjuntos finitos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | funciones_totales_posibles, biyecciones_posibles |
| Comprobaciones (4) | f_inyectiva, f_sobreyectiva, f_biyectiva, g_inyectiva |
compmath run 086Funciones hash y colisiones, invertibilidad de capas, codificación sin pérdida y normalizing flows.
La regla del producto multiplica opciones independientes; la de la suma las suma cuando son excluyentes.
producto: |A × B| = |A| · |B|
suma (excluyentes): |A ∪ B| = |A| + |B|
entropía de una contraseña: log₂(espacio)Los dos principios básicos del conteo se distinguen por una palabra: si las decisiones son sucesivas (esto y aquello), se multiplican; si son alternativas excluyentes (esto o aquello), se suman. Casi todo error de conteo viene de aplicar uno donde correspondía el otro.
La aplicación más ilustrativa es el espacio de contraseñas. Con un alfabeto de 36 caracteres y longitud 8, hay 36⁸ ≈ 2.8·10¹² combinaciones; con solo 10 dígitos, 10⁸. La razón entre ambos es de más de 28 000, y ese factor es lo que separa una contraseña débil de una razonable frente a fuerza bruta.
Medir el espacio en bits de entropía —log₂ del número de combinaciones— es más informativo que dar el número, porque los bits se suman al añadir caracteres. Cada carácter adicional de un alfabeto de 36 símbolos añade log₂36 ≈ 5.17 bits. Esa es la cuenta que hace un estimador de fortaleza de contraseñas.
La misma regla es la que da 2ⁿ estados para n bits (clase 021), |B|^|A| funciones (clase 086) y el tamaño del espacio de búsqueda de cualquier problema combinatorio. En machine learning aparece al contar configuraciones de hiperparámetros: cinco parámetros con diez valores cada uno dan 10⁵ combinaciones, que es por lo que la búsqueda exhaustiva se abandona en favor de la aleatoria o bayesiana.
Espacio de contraseñas de 8 caracteres.
Alfanumérico (26 letras + 10 dígitos = 36 símbolos):
36⁸ = 2 821 109 907 456 ≈ 2.8·10¹²
entropía = 8·log₂(36) = 41.4 bits
Solo dígitos (10 símbolos):
10⁸ = 100 000 000 = 10⁸
entropía = 8·log₂(10) = 26.6 bits
Factor de ventaja: 2.8·10¹² / 10⁸ = 28 211
Regla del producto: 3 camisas × 4 pantalones = 12 conjuntos
Regla de la suma: 3 camisas o 4 pantalones = 7 prendasRegla del producto, de la suma y conteo de contraseñas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | regla_del_producto_3x4, regla_de_la_suma_3+4, contraseñas_alfanumericas_8, contraseñas_solo_digitos_8, factor_de_ventaja, bits_de_entropia |
| Comprobaciones (0) | — |
compmath run 087Estimación de fortaleza de contraseñas, tamaño de espacios de búsqueda, conteo de configuraciones de hiperparámetros y cardinalidad de esquemas de datos.
Una permutación cuenta selecciones donde el orden importa.
P(n) = n!
P(n,k) = n!/(n−k)!
con repetición: nᵏPermutar es ordenar. El número de ordenaciones completas de n objetos distintos es n!, y el argumento es la regla del producto: hay n opciones para la primera posición, n−1 para la segunda —ya se usó una— y así sucesivamente.
Las permutaciones parciales P(n,k) cuentan las formas de elegir k objetos en orden entre n disponibles: n!/(n−k)!. Si además se permite repetir, el conteo es nᵏ, porque cada posición vuelve a tener n opciones. Distinguir los tres casos —total, parcial sin repetición, parcial con repetición— es la mitad de la combinatoria elemental.
El factorial crece brutalmente: 10! ≈ 3.6·10⁶, 20! ≈ 2.4·10¹⁸, 70! ya supera el mayor float64 representable. Ese crecimiento es la razón por la que el problema del viajante no se resuelve por fuerza bruta y por la que cualquier algoritmo con coste factorial es inviable más allá de una veintena de elementos.
En deep learning las permutaciones aparecen de forma indirecta pero relevante: la atención es permutación-equivariante, es decir, permutar los tokens de entrada permuta la salida de la misma forma. Esa propiedad es la que hace necesario el positional encoding (clase 323), porque sin él el modelo no distinguiría el orden.
Permutaciones de cuatro elementos.
elementos: A, B, C, D
permutaciones totales: 4! = 24
P(4,2) = 4!/2! = 12 (elegir 2 en orden)
AB AC AD BA BC BD CA CB CD DA DB DC
con repetición: 4² = 16 (AA, AB, ..., DD)
Crecimiento del factorial:
10! = 3 628 800
20! = 2.43·10¹⁸
70! > 1.8·10³⁰⁸ → desborda float64Permutaciones: el orden importa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | permutaciones_totales_4!, P(4,2), formula_n!/(n-k)!, con_repeticion_4^2 |
| Comprobaciones (0) | — |
compmath run 088Barajado y muestreo sin reemplazo, problemas de ordenación y planificación, y equivarianza a permutaciones en arquitecturas de atención y GNN.
math.perm e itertools.permutations — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9788131708415 verificado en International ISBN Agency (2026-08-19).Una combinación cuenta selecciones donde el orden no importa; su simetría refleja que elegir k es descartar n−k.
C(n,k) = n!/(k!(n−k)!)
C(n,k) = C(n,n−k)
Σₖ C(n,k) = 2ⁿUna combinación es una permutación a la que se le ha quitado el orden: hay k! ordenaciones de cada selección, así que C(n,k) = P(n,k)/k!. Esa deducción es la forma correcta de recordar la fórmula, en lugar de memorizarla.
La simetría C(n,k) = C(n,n−k) tiene una lectura inmediata: elegir k elementos es lo mismo que decidir cuáles n−k se descartan. Es un ejemplo de biyección como técnica de demostración: dos conteos coinciden porque existe una correspondencia uno a uno entre lo que cuentan.
La suma de toda una fila del triángulo de Pascal es 2ⁿ, y también tiene lectura combinatoria: sumar sobre todos los tamaños posibles de subconjunto es contar todos los subconjuntos, que son 2ⁿ. Este tipo de argumentos —contar lo mismo de dos formas— es la herramienta central de la combinatoria.
En probabilidad, C(n,k) es el coeficiente de la distribución binomial (clase 192): el número de secuencias con exactamente k éxitos en n ensayos. Y en machine learning aparece al contar particiones de un conjunto de datos y al calcular el número de comparaciones en un test estadístico múltiple.
Combinaciones de 3 entre 5.
elementos: A B C D E
C(5,3) = 5!/(3!·2!) = 120/(6·2) = 10
ABC ABD ABE ACD ACE ADE BCD BCE BDE CDE
Simetría: C(5,3) = C(5,2) = 10 ✓
(elegir 3 ≡ descartar 2)
Fila de Pascal para n=5:
C(5,0..5) = 1, 5, 10, 10, 5, 1
suma = 32 = 2⁵ ✓Combinaciones: el orden no importa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | C(5,3), math.comb, suma_fila_de_pascal, 2^5 |
| Comprobaciones (1) | simetria_C(5,3)=C(5,2) |
compmath run 089Distribución binomial, número de comparaciones en tests múltiples, muestreo de subconjuntos y conteo de particiones en validación cruzada.
math.comb e itertools.combinations — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).9788131708415 verificado en International ISBN Agency (2026-08-19).El principio del palomar demuestra que existe una colisión sin construir ninguna.
n objetos en m cajas con n > m ⟹ alguna caja tiene ≥ ⌈n/m⌉
colisión de hash garantizada si entradas > tamaño del espacioEl principio del palomar es de una simplicidad desarmante: si se reparten n objetos en m cajas y n > m, alguna caja recibe al menos dos. Su potencia está en que demuestra una existencia sin ofrecer un método para encontrarla, y ese tipo de argumento —no constructivo— es habitual en matemáticas y muy útil en informática.
La aplicación directa es a las funciones hash. Una función que mapea un dominio infinito —o simplemente mayor— en un espacio de 2ⁿ valores tiene colisiones necesariamente. No es un defecto de la función: es una consecuencia lógica. Por eso la pregunta correcta sobre una función hash criptográfica no es «¿tiene colisiones?» sino «¿es computacionalmente factible encontrarlas?».
La forma generalizada da una cota más fina: alguna caja tiene al menos ⌈n/m⌉ objetos. Con 400 personas y 365 días del año, alguna fecha tiene al menos dos cumpleaños; con 800, al menos tres.
Conviene no confundirlo con la paradoja del cumpleaños, que es un resultado probabilístico distinto: con solo 23 personas la probabilidad de coincidencia supera el 50 %. El palomar da certeza con 366; la paradoja da probabilidad alta con 23. La segunda es la que determina la seguridad real de un hash frente a ataques de colisión, y aparece en la clase 090 como contraste.
Cumpleaños y colisiones de hash.
400 personas, 365 días:
400 > 365 → coincidencia GARANTIZADA
mínimo de repeticiones: ⌈400/365⌉ = 2
Hash de 16 bits (65 536 valores), 100 000 entradas:
100 000 > 65 536 → colisión GARANTIZADA
Contraste con la paradoja del cumpleaños:
con 23 personas, P(coincidencia) > 0.5
el palomar da certeza; la paradoja da probabilidad
Lección: no hace falta encontrar la colisión
para demostrar que existe.Principio del palomar: colisiones garantizadas sin construirlas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | personas, dias_del_año, minimo_repeticiones, espacio_hash, entradas |
| Comprobaciones (2) | coincidencia_de_cumpleaños_garantizada, colision_garantizada |
compmath run 090Análisis de funciones hash, límites de compresión sin pérdida, diseño de tablas hash y argumentos de existencia en teoría de la complejidad.
9781138197015 verificado en International ISBN Agency (2026-08-19).La inducción demuestra infinitos casos con un caso base y un paso que hereda la propiedad.
base: P(1) es cierta
paso: P(k) ⟹ P(k+1)
conclusión: P(n) para todo n ≥ 1La inducción resuelve un problema que parece imposible: demostrar algo sobre infinitos números en dos pasos. El caso base establece que la propiedad vale en el primer valor; el paso inductivo demuestra que si vale en k, entonces vale en k+1. La combinación de ambos hace caer todas las fichas de dominó.
La analogía con un bucle es exacta: el caso base es la inicialización y el paso inductivo es el invariante que se mantiene en cada iteración. Demostrar la corrección de un bucle es demostrar por inducción que su invariante se preserva, y esa es la base de la verificación formal de programas.
El paso inductivo es donde vive la demostración, y su estructura es siempre la misma: escribir P(k+1), identificar dentro de ella la parte que es P(k), aplicar la hipótesis y simplificar. Para la suma de Gauss: S(k+1) = S(k) + (k+1) = k(k+1)/2 + (k+1) = (k+1)(k+2)/2, que es exactamente la fórmula con k+1.
Es importante no confundir inducción con verificación. Comprobar los primeros 50 casos no demuestra nada, como la clase 019 mostró con el polinomio de Euler. La verificación empírica es un control de sanidad previo a la demostración, no un sustituto.
Demostrar la suma de Gauss por inducción.
Proposición: 1 + 2 + ... + n = n(n+1)/2
Caso base (n=1):
izquierda = 1
derecha = 1·2/2 = 1 ✓
Paso inductivo: suponemos S(k) = k(k+1)/2
S(k+1) = S(k) + (k+1)
= k(k+1)/2 + (k+1)
= (k+1)(k/2 + 1)
= (k+1)(k+2)/2 ✓ es la fórmula con k+1
Verificación empírica (control de sanidad):
50 valores comprobados, 0 contraejemplos
→ NO es la demostración, es una comprobación previaInducción: caso base, paso inductivo y verificación empírica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | verificado_hasta |
| Comprobaciones (2) | caso_base_n=1, la_verificacion_no_es_demostracion |
compmath run 091Corrección de algoritmos recursivos, invariantes de bucle, análisis de estructuras de datos y demostración de cotas de complejidad.
9781108539890 verificado en International ISBN Agency (2026-08-19).9781461259831 verificado en International ISBN Agency (2026-08-19).Una recurrencia define cada término desde los anteriores; su coste depende radicalmente de si se memoiza.
F(n) = F(n−1) + F(n−2), F(0)=0, F(1)=1
Binet: F(n) = (φⁿ − (−1/φ)ⁿ)/√5, φ = (1+√5)/2Una recurrencia es una definición autorreferente con casos base. Fibonacci es el ejemplo canónico, y sirve para ilustrar la diferencia más importante del análisis de algoritmos: la implementación recursiva ingenua recalcula los mismos valores una y otra vez y tarda O(φⁿ); la iterativa —o la memoizada— tarda O(n).
La diferencia no es de constante: para n = 50, la ingenua hace del orden de 10¹⁰ llamadas y la iterativa 50 pasos. Es la demostración más clara de que la complejidad asintótica no es una abstracción académica.
Fibonacci tiene además una fórmula cerrada, la de Binet, que involucra la razón áurea φ. Que una recurrencia de enteros se exprese con irracionales es notable, y su deducción —resolver la ecuación característica x² = x + 1— es el método general para recurrencias lineales homogéneas, análogo al de las ecuaciones diferenciales lineales de la parte 11.
Una precaución numérica: la fórmula de Binet en punto flotante deja de dar el entero exacto para n grande, porque φⁿ crece y la precisión relativa se agota. Para n = 71 el redondeo ya falla. Es un buen recordatorio de que una fórmula cerrada no siempre es preferible a una iteración.
Fibonacci por tres caminos.
F(30):
iterativo: 832040 30 pasos
Binet: 832040 1 evaluación
coinciden ✓
recursivo ingenuo: 2 692 537 llamadas
coste O(φⁿ) ≈ O(1.618ⁿ)
Razón entre consecutivos:
F(31)/F(30) = 1.6180339...
φ = 1.6180339... ✓ converge
Límite de Binet en float64: falla a partir de n ≈ 71Recurrencia lineal: iterativo, memoizado y forma cerrada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | F(30)_iterativo, F(30)_binet, razon_asintotica, razon_aurea |
| Comprobaciones (1) | coinciden |
compmath run 092Análisis de algoritmos divide y vencerás, programación dinámica, modelos autorregresivos y recurrencias en RNN (clase 313).
9788131708415 verificado en International ISBN Agency (2026-08-19).9780262046305 verificado en International ISBN Agency (2026-08-19).Un grafo modela relaciones; el lema del apretón de manos relaciona grados y aristas.
no dirigido: Σ grados = 2|E|
dirigido: Σ grados de salida = Σ grados de entrada = |E|
densidad = |E| / (|V|(|V|−1))Un grafo es un conjunto de vértices y un conjunto de aristas que los conectan. Es la estructura más versátil de la computación porque casi cualquier relación se modela así: dependencias entre tareas, enlaces entre páginas, amistades, rutas, y —lo que importa en este programa— operaciones de un cálculo.
El lema del apretón de manos dice que la suma de los grados es el doble del número de aristas, porque cada arista contribuye 1 a cada uno de sus dos extremos. De ahí se deduce inmediatamente que el número de vértices de grado impar es par, resultado que parece anecdótico y aparece en problemas de emparejamiento.
La representación importa para el rendimiento. Una matriz de adyacencia ocupa O(V²) y responde «¿hay arista?» en tiempo constante; una lista de adyacencia ocupa O(V+E) y es preferible en grafos dispersos, que son la mayoría de los reales. Los grafos de redes sociales tienen densidad ínfima, y usar matriz sería inviable.
El grafo del laboratorio es un pipeline de machine learning —entrada, limpieza, features, split, entrenamiento, evaluación—, y ese ejemplo no es decorativo: la ejecución de un pipeline, de un sistema de construcción y de un grafo de cómputo de autodiferenciación son el mismo problema sobre la misma estructura.
Grafo de un pipeline de ML.
entrada → limpieza → features → entrenamiento → evaluacion
↘ split ↗
vértices: 6
aristas dirigidas: 6
grados de salida:
entrada 1, limpieza 2, features 1,
split 1, entrenamiento 1, evaluacion 0
suma = 6 = |E| ✓
densidad = 6/(6·5) = 0.2Grados, aristas y el lema del apretón de manos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | aristas_dirigidas, suma_de_grados, densidad |
| Comprobaciones (0) | — |
compmath run 093Grafos de cómputo y autodiferenciación, sistemas de construcción, redes sociales, rutas y GNN.
9780262046305 verificado en International ISBN Agency (2026-08-19).9780198805090 verificado en International ISBN Agency (2026-08-19).BFS recorre por niveles y encuentra el camino con menos aristas en tiempo O(V+E).
coste BFS: O(V + E)
distancia BFS = número mínimo de aristas
excentricidad = máxima distancia desde un vérticeEl recorrido en anchura visita primero todos los vecinos, luego los vecinos de los vecinos, y así sucesivamente. Esa disciplina por niveles garantiza que la primera vez que se alcanza un vértice se ha hecho por el camino con menos aristas, que es el camino más corto en un grafo no ponderado.
La implementación necesita una cola (FIFO) y un conjunto de visitados. Cambiar la cola por una pila convierte el algoritmo en DFS, con propiedades muy distintas: DFS no garantiza caminos mínimos pero sirve para detectar ciclos y para ordenar topológicamente. La estructura de datos determina el comportamiento.
El coste O(V + E) es óptimo: cada vértice y cada arista se procesan una vez. Con pesos en las aristas, BFS deja de servir y hace falta Dijkstra, cuyo coste sube a O((V+E) log V) por la cola de prioridad.
La excentricidad de un vértice —la mayor distancia a cualquier otro— y el diámetro del grafo se calculan con BFS desde cada vértice. En redes sociales esas métricas dan lugar al fenómeno de los «seis grados de separación», y en un pipeline indican cuántas etapas secuenciales hay como mínimo.
BFS desde «entrada» en el pipeline.
orden de visita:
entrada → limpieza → features → split → entrenamiento → evaluacion
distancias (en aristas):
entrada 0
limpieza 1
features 2
split 2
entrenamiento 3
evaluacion 4
todos alcanzables: 6/6 ✓
excentricidad de entrada: 4
coste: O(V + E) = O(6 + 6)Recorrido BFS: alcanzabilidad y distancia en aristas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | excentricidad |
| Comprobaciones (1) | todos_alcanzables |
compmath run 094Camino más corto en grafos no ponderados, detección de componentes conexas, análisis de alcance en redes y niveles de un pipeline.
9780262046305 verificado en International ISBN Agency (2026-08-19).collections.deque — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Un árbol con n vértices tiene exactamente n−1 aristas; añadir una crea un ciclo.
|E| = |V| − 1
existe un único camino entre cada par de vérticesUn árbol es un grafo conexo sin ciclos, y esa doble condición tiene una consecuencia numérica exacta: con n vértices tiene exactamente n−1 aristas. Ni una más —eso crearía un ciclo— ni una menos —eso lo desconectaría—. Es la estructura conexa mínima.
La unicidad del camino entre cualquier par de vértices se sigue de la ausencia de ciclos, y es la propiedad que hace útiles a los árboles: no hay ambigüedad sobre cómo llegar de un nodo a otro. De ahí que se usen para jerarquías, sistemas de archivos, índices de bases de datos y estructuras de decisión.
La altura de un árbol determina el coste de las operaciones. Un árbol binario equilibrado con n nodos tiene altura log₂ n, y por eso las búsquedas cuestan logarítmicamente; uno degenerado en lista tiene altura n y el coste se vuelve lineal. Todo el diseño de árboles balanceados (AVL, rojo-negro, B-tree) existe para garantizar esa altura logarítmica.
En machine learning, los árboles de decisión (clase 291) usan esta estructura para particionar el espacio de features, y su profundidad es el hiperparámetro que controla directamente el compromiso sesgo-varianza: más profundo, menos sesgo y más varianza.
Verificar la relación en un árbol de seis nodos.
raiz
/ \
a b
/ \ \
c d e
vértices: 6 (raiz, a, b, c, d, e)
aristas: 5
n − 1 = 5 ✓ es un árbol
hojas: c, d, e
altura: 2
profundidades:
raiz 0, a 1, b 1, c 2, d 2, e 2Un árbol con n nodos tiene exactamente n-1 aristas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | nodos, aristas, n-1, altura |
| Comprobaciones (1) | es_arbol |
compmath run 095Sistemas de archivos, índices de bases de datos, árboles de decisión, parseo sintáctico y árboles de expansión mínima.
9780262046305 verificado en International ISBN Agency (2026-08-19).El orden topológico existe si y solo si el grafo es acíclico; su ausencia localiza el ciclo.
algoritmo de Kahn: repetir «tomar vértice de grado de entrada 0»
si quedan vértices sin ordenar ⟹ hay cicloUn orden topológico es una ordenación lineal de los vértices tal que toda arista va de un vértice anterior a uno posterior. Existe si y solo si el grafo es acíclico, y esa equivalencia convierte el algoritmo en un detector de ciclos: si al terminar quedan vértices sin ordenar, esos vértices forman —o dependen de— al menos un ciclo.
El algoritmo de Kahn es directo: se toman repetidamente los vértices con grado de entrada cero (los que no dependen de nada pendiente), se emiten y se decrementan los grados de sus sucesores. Coste O(V + E), el mismo que BFS.
Este algoritmo es el que ejecuta todo sistema de construcción —make, Bazel, un DAG de Airflow— para decidir en qué orden ejecutar tareas. El mensaje «dependencia circular detectada» que emiten esos sistemas es literalmente el caso en que Kahn no consigue ordenar todos los nodos.
Y aquí está la conexión que da sentido a esta clase dentro del programa: la autodiferenciación en modo reverso recorre el grafo de cómputo en orden topológico inverso. La clase 306 lo hace explícito, y la clase 179 lo implementa: backward() construye el orden topológico y luego lo recorre al revés propagando gradientes. Sin esta clase, esa implementación parecería magia.
Orden topológico del pipeline y detección de ciclo.
Grafo (DAG):
entrada → limpieza → {features, split} → entrenamiento → evaluacion
Grados de entrada iniciales:
entrada 0, limpieza 1, features 1, split 1,
entrenamiento 2, evaluacion 1
Orden de Kahn:
entrada, limpieza, features, split, entrenamiento, evaluacion
6 de 6 vértices ordenados → es un DAG ✓
Con una arista extra evaluacion → limpieza:
ningún vértice queda con grado 0 tras entrada
vértices ordenados: 1 de 6
→ hay un ciclo, y los 5 restantes están dentro o dependen de élOrden topológico y detección de ciclos por conteo de Kahn.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | nodos_ordenados |
| Comprobaciones (1) | es_DAG |
compmath run 096Sistemas de construcción, planificadores de tareas, resolución de dependencias de paquetes, evaluación de hojas de cálculo y autodiferenciación en modo reverso.
10.1145/368996.369025 verificado en Crossref (2026-08-19).Simplificar una expresión booleana reduce puertas físicas sin cambiar su comportamiento.
absorción: a ∨ (a ∧ b) ≡ a
distributiva: a ∧ (b ∨ c) ≡ (a∧b) ∨ (a∧c)
complemento: a ∨ ¬a ≡ 1, a ∧ ¬a ≡ 0El álgebra de Boole, publicada en 1854, describió las leyes del razonamiento con símbolos. Ochenta años después, Claude Shannon mostró en su tesis de máster —una de las más influyentes de la historia— que esas mismas leyes describen los circuitos de conmutación. Ese puente es el fundamento del hardware digital.
Simplificar una expresión booleana tiene una consecuencia física directa: menos términos significan menos puertas lógicas, menos área de silicio, menos consumo y menor retardo de propagación. La expresión (a∧b) ∨ (a∧¬b) ∨ (a∧c) se reduce a a por absorción y complemento, eliminando cuatro puertas.
La verificación por tabla de verdad es exhaustiva y por tanto concluyente para pocas variables, pero su coste es 2ⁿ. Con veinte variables ya es un millón de filas, y ahí empieza el terreno del problema SAT, el primer problema que se demostró NP-completo (Cook, 1971). Que la verificación sea fácil y la búsqueda difícil es la esencia de esa clase de complejidad.
En machine learning el álgebra booleana aparece de forma menos visible pero real: las máscaras de atención son matrices booleanas, los filtros de datos son expresiones booleanas, y la cuantización binaria de redes (BNN) opera con estas mismas leyes.
Simplificar una expresión de tres términos.
original: (a∧b) ∨ (a∧¬b) ∨ (a∧c)
paso 1: (a∧b) ∨ (a∧¬b) = a∧(b ∨ ¬b) = a∧1 = a
paso 2: a ∨ (a∧c) = a (absorción)
simplificada: a
Verificación exhaustiva: 8 casos (2³)
todas las asignaciones coinciden ✓
Puertas ahorradas: 4Álgebra booleana: simplificación y equivalencia funcional.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | casos, puertas_ahorradas |
| Comprobaciones (2) | equivalentes, absorcion_a∨(a∧b) |
compmath run 097Diseño de circuitos digitales, optimización de condiciones y consultas, máscaras de atención y verificación formal de propiedades.
10.1145/800157.805047 verificado en Crossref (2026-08-19).La aritmética modular opera con restos y hace factible exponenciar números enormes.
(a + b) mod n = ((a mod n) + (b mod n)) mod n
pequeño teorema de Fermat: a^(p−1) ≡ 1 (mod p) si p es primo y p ∤ a
inverso modular: a·a⁻¹ ≡ 1 (mod n), existe si mcd(a,n) = 1La aritmética modular trabaja con las clases de equivalencia que la clase 085 definió: dos números son «el mismo» si difieren en un múltiplo de n. Sobre esas clases, la suma y el producto están bien definidos, y esa buena definición es lo que permite reducir en cada paso en lugar de al final.
Esa reducción es lo que hace viable la exponenciación modular. Calcular 7¹²⁸ mod 13 sin reducir exigiría un número de 108 dígitos; con exponenciación binaria y reducción en cada paso, son siete multiplicaciones de números pequeños. pow(base, exp, mod) en Python implementa exactamente eso.
El pequeño teorema de Fermat —a^(p−1) ≡ 1 (mod p) para p primo— es la base de los tests de primalidad probabilísticos y de RSA. El inverso modular existe cuando mcd(a, n) = 1 y se calcula con el algoritmo de Euclides extendido; Python lo expone como pow(a, -1, n) desde la versión 3.8.
Estas operaciones sostienen buena parte de la infraestructura digital: RSA, Diffie- Hellman, curvas elípticas, funciones hash, sumas de comprobación y generadores congruenciales de números pseudoaleatorios. La seguridad de varios de esos sistemas descansa en que la operación inversa —el logaritmo discreto— es computacionalmente difícil.
Exponenciación e inverso modular.
7¹²⁸ mod 13 = 3
(sin reducir, 7¹²⁸ tendría 109 dígitos)
Pequeño teorema de Fermat (p = 13 primo):
7¹² mod 13 = 1 ✓
Inverso de 7 módulo 13:
pow(7, -1, 13) = 2
verificación: 7·2 = 14 ≡ 1 (mod 13) ✓
Suma modular: (25 + 30) mod 13 = 55 mod 13 = 3Aritmética modular: exponenciación rápida e inverso modular.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | 7^128 mod 13, pequeño_teorema_de_fermat, inverso_de_7_mod_13, verificacion_inverso, suma_modular |
| Comprobaciones (0) | — |
compmath run 098RSA y Diffie-Hellman, funciones hash, sumas de comprobación, generadores pseudoaleatorios y aritmética de campos finitos.
9780199219865 verificado en International ISBN Agency (2026-08-19).pow con módulo e inverso — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).La criba encuentra todos los primos hasta n, y mcd·mcm = a·b relaciona ambos conceptos.
criba: tachar múltiplos desde i² con i ≤ √n
mcd(a,b)·mcm(a,b) = a·b
Euclides: mcd(a,b) = mcd(b, a mod b)La criba de Eratóstenes, del siglo III a.C., sigue siendo el método práctico para listar todos los primos hasta n. Su eficiencia viene de dos optimizaciones: basta recorrer hasta √n, porque todo compuesto tiene un factor menor o igual a su raíz; y basta empezar a tachar desde i², porque los múltiplos menores ya fueron tachados por primos anteriores. El coste es O(n log log n), prácticamente lineal.
El algoritmo de Euclides para el máximo común divisor es aún más antiguo y es un candidato al algoritmo no trivial más antiguo que se sigue usando. Su idea —mcd(a,b) = mcd(b, a mod b)— reduce el problema en cada paso y termina en O(log min(a,b)).
La identidad mcd·mcm = a·b permite calcular el mínimo común múltiplo sin factorizar, que es importante porque factorizar es difícil mientras que calcular el mcd es fácil. Esa asimetría es la que sostiene RSA: multiplicar dos primos grandes es inmediato, recuperarlos del producto no se sabe hacer eficientemente.
El teorema fundamental de la aritmética —toda factorización en primos es única— es lo que da sentido a todo esto. Y el hecho de que los primos sean infinitos, demostrado por Euclides con un argumento por contradicción de tres líneas, garantiza que siempre hay primos suficientemente grandes para la criptografía.
Criba hasta 50 y mcd de dos números.
Primos ≤ 50 (15 en total):
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
mcd(252, 198) por Euclides:
252 = 1·198 + 54
198 = 3·54 + 36
54 = 1·36 + 18
36 = 2·18 + 0 → mcd = 18
mcm = 252·198/18 = 2772
Verificación: 18 · 2772 = 49 896 = 252 · 198 ✓
Factorización de 252 = 2²·3²·7Criba, MCD por Euclides y su relación con el mínimo común múltiplo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | cantidad, a, b, mcd, mcm |
| Comprobaciones (1) | mcd*mcm=a*b |
compmath run 099Generación de claves criptográficas, simplificación de fracciones, tests de primalidad y hashing con módulos primos.
9780199219865 verificado en International ISBN Agency (2026-08-19).math.gcd y math.lcm — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en Python Software Foundation (2026-08-19).Planificar dependencias es ordenar topológicamente y agrupar por niveles para paralelizar.
nivel(v) = 1 + máx(nivel(u)) sobre los predecesores u
pasos secuenciales mínimos = máximo nivel + 1El capstone monta el problema real que resuelve cualquier sistema de construcción o de orquestación: dado un grafo de dependencias, decidir en qué orden ejecutar las tareas, cuáles pueden ir en paralelo y qué hacer si hay un ciclo.
El orden topológico da la secuencia válida. Agrupar por niveles —donde el nivel de una tarea es uno más que el máximo de sus predecesores— da algo más útil: todas las tareas del mismo nivel son independientes entre sí y pueden ejecutarse simultáneamente. El número de niveles es el número mínimo de pasos secuenciales, sin importar cuántos trabajadores haya.
Ese número es el camino crítico, y es la cota que ninguna cantidad de paralelismo puede superar. Si un pipeline tiene cinco niveles, tardará al menos cinco pasos aunque se disponga de mil máquinas. Es la versión discreta de la ley de Amdahl.
La detección de ciclos completa la herramienta. Un grafo con ciclo no admite orden topológico, y el algoritmo lo detecta contando cuántos vértices consiguió emitir. Los vértices no emitidos son exactamente los que están en el ciclo o dependen de él, lo que convierte el fallo en un diagnóstico útil en lugar de en un error opaco.
Planificar el pipeline y detectar un ciclo.
Orden de ejecución:
entrada, limpieza, features, split, entrenamiento, evaluacion
Niveles paralelizables:
nivel 0: entrada
nivel 1: limpieza
nivel 2: features, split ← pueden ir en paralelo
nivel 3: entrenamiento
nivel 4: evaluacion
Tareas: 6
Pasos secuenciales mínimos: 5 (camino crítico)
Con 2 trabajadores: sigue siendo 5 pasos
Con arista evaluacion → limpieza:
ciclo detectado, 5 nodos bloqueadosCapstone: planificar un pipeline con grafos y detectar dependencias rotas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | pasos_secuenciales_minimos, tareas, nodos_bloqueados_por_el_ciclo |
| Comprobaciones (1) | grafo_con_ciclo_detectado |
compmath run 100Sistemas de construcción, orquestadores de flujos (Airflow, Dagster), resolución de dependencias de paquetes, planificación de proyectos y ejecución de grafos de cómputo.
10.1145/368996.369025 verificado en Crossref (2026-08-19).9780262046305 verificado en International ISBN Agency (2026-08-19).Vectores, normas, producto punto, independencia, span, sistemas lineales, eliminación de Gauss, rango, inversa, determinante y proyección ortogonal.
Si hubiera que elegir una parte del programa como la más rentable para alguien que quiere entender IA, sería esta. Todo modelo moderno —desde la regresión lineal hasta un Transformer de cien mil millones de parámetros— opera sobre vectores y matrices, y casi toda su computación es producto matricial. Quien no distingue un espacio columna de un espacio fila no puede depurar un error de dimensiones ni entender por qué una capa pierde información.
El cambio de perspectiva que propone la parte es concreto: dejar de ver una matriz como una tabla y verla como una función. Una matriz A de tamaño m×n es una transformación lineal de ℝⁿ en ℝᵐ, y sus columnas son las imágenes de los vectores de la base. Con esa lectura, Ax deja de ser «filas por columnas» y pasa a ser una combinación lineal de las columnas de A con los coeficientes de x —que es exactamente lo que hace una capa densa con sus pesos—.
Las clases 101 a 108 construyen el vocabulario vectorial: operaciones, producto punto, normas, independencia y span. El producto punto es el protagonista: mide alineación, define ortogonalidad y es la operación que ejecutan miles de millones de veces por segundo los aceleradores. La similitud coseno de un buscador semántico es un producto punto normalizado, ni más ni menos.
Las clases 109 a 117 pasan a las matrices: producto, transpuesta, sistemas lineales, eliminación de Gauss, rango, inversa y determinante. Aquí aparece el mensaje práctico más importante de la parte: resolver Ax = b casi nunca requiere calcular A⁻¹. Invertir es más caro y numéricamente peor que factorizar; ninguna biblioteca seria invierte una matriz para resolver un sistema, y saber por qué distingue a quien entiende de quien recita.
Las clases 118 y 119 introducen la ortogonalidad como propiedad numérica privilegiada: las transformaciones ortogonales no amplifican el error, y la proyección ortogonal es la mejor aproximación posible en norma euclídea. Ese resultado es el que sostiene los mínimos cuadrados (parte 06), PCA (clase 135) y la descomposición de la varianza en estadística.
El capstone construye un sistema de recomendación por similitud coseno entre usuarios. No usa ninguna biblioteca de machine learning: es todo producto punto y norma. Ese es el punto de la parte.
Cada capa densa es un producto matriz-vector. Los embeddings viven en subespacios y la similitud entre ellos es producto punto normalizado.
| Término | Definición | Clase |
|---|---|---|
| Combinación lineal | Suma de vectores multiplicados por escalares. Es la operación que define todo el álgebra lineal. | 106 |
| Desigualdad triangular | ‖u+v‖ ≤ ‖u‖ + ‖v‖. Es una de las tres condiciones que definen una norma. | 102 |
| Determinante | Factor por el que la transformación escala el volumen. Cero significa que aplasta el espacio. | 117 |
| Escalar, vector, matriz, tensor | Tensores de orden 0, 1, 2 y n. El orden es el número de índices necesarios para localizar un elemento. | 101 |
| Espacio columna | Span de las columnas de A. Es donde vive Ax; el sistema Ax = b tiene solución si y solo si b está en él. | 110 |
| Independencia lineal | Ningún vector del conjunto es combinación de los demás. Se detecta por el rango, no por inspección. | 107 |
| Matriz ortogonal | QᵀQ = I. Preserva normas y ángulos, y su número de condición es 1: no amplifica el error. | 118 |
| Matriz singular | Matriz sin inversa; su determinante es cero y su rango es deficiente. | 116 |
| Norma | Medida de magnitud de un vector. L2 es la euclídea; L1 induce dispersión; L∞ mira el máximo. | 104 |
| Pivoteo parcial | Intercambio de filas para usar el mayor pivote disponible. Evita dividir por valores casi nulos. | 114 |
| Producto matricial | Composición de transformaciones lineales. Asociativo pero no conmutativo. Coste O(n³) ingenuo. | 111 |
| Producto punto | Σuᵢvᵢ. Mide alineación; es cero si y solo si los vectores son ortogonales. | 103 |
| Proyección ortogonal | Mejor aproximación de un vector dentro de un subespacio, en norma euclídea. Su residuo es ortogonal al subespacio. | 119 |
| Rango | Dimensión del espacio columna. Es la dimensión efectiva de la salida de la transformación. | 115 |
| Span | Conjunto de todas las combinaciones lineales de unos vectores. Es siempre un subespacio. | 108 |
| Subespacio | Subconjunto cerrado bajo suma y producto por escalar. Contiene siempre al vector cero. | 108 |
| Teorema del rango-nulidad | rango + nulidad = número de columnas. Lo que no llega a la imagen se pierde en el núcleo. | 115 |
| Transpuesta | Intercambio de filas y columnas. (AB)ᵀ = BᵀAᵀ, con el orden invertido. | 112 |
| Vector unitario | Vector de norma 1. Normalizar separa dirección de magnitud. | 105 |
Escalar, vector, matriz y tensor son el mismo objeto con distinto número de índices.
escalar: orden 0 · vector: orden 1 · matriz: orden 2
shape de una matriz m×n: (m, n)
(Aᵀ)ᵢⱼ = AⱼᵢLa jerarquía escalar → vector → matriz → tensor no es una lista de objetos distintos: es el mismo objeto con distinto número de índices. Un escalar necesita cero índices para localizar su valor, un vector uno, una matriz dos y un tensor de orden n, n índices. Esa lectura unifica lo que en muchos cursos se presenta por separado.
El shape es el dato operativo: la tupla de tamaños de cada dimensión. La mayoría de los errores al programar con arrays son errores de shape, y la disciplina más rentable al escribir código numérico es anotar el shape esperado de cada variable. Un comentario # (batch, seq, d_model) ahorra horas de depuración.
Multiplicar un vector por un escalar escala su magnitud sin cambiar su dirección —salvo que el escalar sea negativo, que la invierte—. Es la operación más simple y ya contiene la idea central: las operaciones lineales respetan la estructura del espacio.
La transposición intercambia filas y columnas, y su efecto sobre el shape es invertir la tupla: una matriz (3,2) transpuesta es (2,3). En deep learning la transposición aparece constantemente al calcular gradientes, porque la derivada de Wx respecto a x involucra Wᵀ.
Los cuatro objetos y sus shapes.
escalar 3.0 shape () orden 0
vector [1, 2, 3] shape (3,) orden 1
matriz [[1,2],[3,4],[5,6]] shape (3,2) orden 2
tensor imágenes de un lote shape (N,C,H,W) orden 4
escalar × vector: 3·[1,2,3] = [3,6,9]
transpuesta de la matriz (3,2) → shape (2,3)
[[1,3,5],
[2,4,6]]Escalar, vector y matriz como objetos con forma y significado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | escalar |
| Comprobaciones (1) | un_tensor_de_orden_0_es_un_escalar |
compmath run 101Toda representación de datos en machine learning: un lote de imágenes es un tensor de orden 4, un lote de secuencias uno de orden 3. Los errores de shape son la categoría de bug más frecuente al entrenar modelos.
9781733146678 verificado en International ISBN Agency (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).La suma de vectores es componente a componente, y la desigualdad triangular acota la norma del resultado.
(u + v)ᵢ = uᵢ + vᵢ
‖u + v‖ ≤ ‖u‖ + ‖v‖La suma de vectores tiene dos lecturas que conviene mantener a la vez. Algebraicamente se suman las componentes. Geométricamente se aplica la regla del paralelogramo: el resultado es la diagonal del paralelogramo que forman ambos vectores. Las dos describen la misma operación.
La desigualdad triangular —‖u+v‖ ≤ ‖u‖ + ‖v‖— dice que el camino directo nunca es más largo que el rodeo, y es una de las tres condiciones que definen una norma. La igualdad se alcanza solo cuando los vectores son paralelos y del mismo sentido; en cualquier otro caso hay cancelación parcial.
Esa desigualdad no es un tecnicismo: es la que permite acotar errores acumulados. Si el error de cada paso está acotado, el error total lo está por la suma, y de ahí salen las cotas de estabilidad de los métodos iterativos (parte 11) y las cotas de generalización (parte 17).
Restar es sumar el opuesto, y u − v es el vector que va de v a u. Esa interpretación —la diferencia como desplazamiento— es la que convierte ‖u − v‖ en la distancia entre los dos puntos, conectando con la clase 061.
Suma, resta y desigualdad triangular.
u = (1, 2), v = (3, −1)
u + v = (4, 1)
u − v = (−2, 3)
2u − 3v = (2,4) − (9,−3) = (−7, 7)
‖u+v‖ = √17 = 4.123
‖u‖ + ‖v‖ = √5 + √10 = 2.236 + 3.162 = 5.398
4.123 ≤ 5.398 ✓ desigualdad triangular
La diferencia (5.398 − 4.123) mide cuánto se cancelan entre sí.Suma, resta y combinación lineal con interpretación geométrica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | |u+v|, |u|+|v| |
| Comprobaciones (1) | desigualdad_triangular |
compmath run 102Composición de desplazamientos, acumulación de gradientes, cotas de error en métodos iterativos y agregación de vectores en sistemas de recomendación.
9781733146678 verificado en International ISBN Agency (2026-08-19).El producto punto mide alineación; su normalización es la similitud coseno de los embeddings.
u·v = Σuᵢvᵢ = ‖u‖‖v‖cos θ
cos θ = u·v / (‖u‖‖v‖)
u·u = ‖u‖²El producto punto es la operación más importante de esta parte y probablemente de todo el programa. Definido como suma de productos componente a componente, resulta ser ‖u‖‖v‖cos θ, lo que le da una interpretación geométrica: mide cuánto apuntan dos vectores en la misma dirección, escalado por sus magnitudes.
Tres lecturas del signo: positivo significa ángulo agudo, cero significa ortogonalidad, negativo significa ángulo obtuso. La ortogonalidad definida como «producto punto nulo» es la que se generaliza a dimensión arbitraria, donde no se puede dibujar un ángulo recto.
La similitud coseno normaliza por las magnitudes y deja solo el ángulo. Es la métrica estándar entre embeddings porque la magnitud de un embedding suele codificar frecuencia o longitud del texto, no significado: dos documentos sobre el mismo tema, uno largo y otro corto, tienen coseno alto y distancia euclídea grande.
Computacionalmente, el producto punto es la operación que domina el coste de un modelo moderno. Una capa densa es un conjunto de productos punto; la atención calcula un producto punto por cada par consulta-clave. Los TFLOPS de una GPU miden, en esencia, cuántos productos punto por segundo puede hacer.
Ángulos entre tres vectores.
u = (1, 0), v = (1, 1), w = (0, 1)
u·v = 1 cos = 1/(1·√2) = 0.7071 → 45°
u·w = 0 cos = 0 → 90° ortogonales
u·u = 1 = ‖u‖² ✓
Similitud coseno en embeddings:
misma fórmula, dimensión 768 o 1536
la magnitud se descarta a propósitoProducto punto: proyección, ángulo y similitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | u·v, coseno_u_v, angulo_u_v_grados, u·w |
| Comprobaciones (2) | ortogonales, u·u_es_|u|² |
compmath run 103Similitud coseno en búsqueda semántica y RAG, capas densas, atención escalada, y cálculo de proyecciones e iluminación en gráficos.
9781733146678 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).La norma elegida determina qué se penaliza: L1 induce dispersión, L2 penaliza los valores grandes.
L1 = Σ|xᵢ| · L2 = √Σxᵢ² · L∞ = máx|xᵢ|
L∞ ≤ L2 ≤ L1Una norma asigna una magnitud a un vector cumpliendo tres condiciones: es positiva salvo en el cero, escala con el valor absoluto del escalar y satisface la desigualdad triangular. Hay infinitas normas; las tres de la familia Lp son las que se usan en la práctica.
La elección no es estética: cambia qué se penaliza. La L2 eleva al cuadrado, así que castiga desproporcionadamente los componentes grandes y tiende a repartir el valor entre todos. La L1 trata todos los componentes por igual y, usada como penalización, empuja los pequeños exactamente a cero. Esa diferencia es la que separa Ridge de Lasso (clases 283 y 284) y es puramente geométrica: la bola L1 tiene vértices sobre los ejes y el óptimo tiende a caer en ellos.
La L∞ solo mira el peor componente. Es la norma adecuada cuando lo que importa es garantizar que ningún error individual supere un umbral, y aparece en robustez adversarial: un ataque «acotado en L∞» limita cuánto puede cambiar cada píxel.
El orden L∞ ≤ L2 ≤ L1 se cumple siempre y conviene verificarlo numéricamente una vez. Explica que la misma perturbación parezca grande o pequeña según la norma con la que se mida, y por qué comparar magnitudes exige declarar la norma.
Tres normas del mismo vector.
v = (3, −4, 12)
L1 = 3 + 4 + 12 = 19
L2 = √(9 + 16 + 144) = √169 = 13
L∞ = máx(3, 4, 12) = 12
Orden: 12 ≤ 13 ≤ 19 ✓
Interpretación:
L1 penaliza la suma total de desviaciones → dispersión
L2 penaliza los componentes grandes → reparto
L∞ solo mira el peor componente → garantíaL1, L2 e L∞ sobre el mismo vector.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | L1, L2, Linf |
| Comprobaciones (1) | L2_es_la_hipotenusa |
compmath run 104Regularización Ridge y Lasso, funciones de pérdida MSE y MAE, robustez adversarial acotada en L∞ y criterios de convergencia.
10.1111/j.2517-6161.1996.tb02080.x verificado en Crossref (2026-08-19).9780511804441 verificado en International ISBN Agency (2026-08-19).Normalizar separa dirección de magnitud; el vector cero no tiene dirección definida.
û = v / ‖v‖, ‖û‖ = 1
v = ‖v‖ · û (reconstrucción)Un vector codifica dos informaciones: hacia dónde apunta y cuánto mide. Normalizar —dividir por la norma— conserva la primera y descarta la segunda. La reconstrucción es inmediata: v = ‖v‖·û, lo que muestra que la descomposición no pierde nada, solo separa.
La operación tiene una excepción que hay que tratar: el vector cero no se puede normalizar, porque no tiene dirección. En una implementación, dividir por su norma da NaN o inf (clase 033), así que hay que comprobar el caso explícitamente. El motor del programa devuelve el vector cero sin modificar, decisión que hay que declarar porque no es la única razonable.
Normalizar es lo que hace que la comparación entre embeddings sea justa. También es lo que hace la normalización de capa (clase 308), aunque allí se normaliza por media y desviación en lugar de solo por norma. En ambos casos el objetivo es el mismo: que la escala no domine la comparación.
Un detalle numérico: normalizar un vector de norma muy pequeña amplifica su error relativo, porque se divide por un número cercano a cero. En cálculos sensibles conviene comprobar que la norma supera un umbral antes de dividir.
Normalizar y reconstruir.
v = (6, 8)
‖v‖ = √(36 + 64) = 10
û = (0.6, 0.8)
‖û‖ = √(0.36 + 0.64) = 1.0 ✓
Reconstrucción: 10 · (0.6, 0.8) = (6, 8) ✓
Caso límite:
normalizar (0, 0) → división por cero
el motor devuelve (0, 0) y lo declaraNormalizar separa dirección de magnitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | |v|, |v_normalizado| |
| Comprobaciones (0) | — |
compmath run 105Comparación de embeddings, normalización de gradientes (gradient clipping), vectores normales en gráficos y preparación de datos para similitud coseno.
9781733146678 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1607.06450 verificado en DataCite (2026-08-19).Una combinación lineal es la operación fundamental del álgebra lineal, y una capa densa es exactamente eso.
Σ αᵢvᵢ = α₁v₁ + ... + αₖvₖ
capa densa: y = Wx + bUna combinación lineal suma vectores multiplicados por escalares. Toda la estructura del álgebra lineal se construye sobre esta única operación: independencia, span, base, dimensión, transformación lineal y rango se definen en términos de combinaciones lineales.
Con la base canónica la combinación es trivial —los coeficientes son las propias coordenadas— y por eso las coordenadas de un vector son sus coeficientes en esa base. Con otra base, los coeficientes cambian aunque el vector sea el mismo, que es exactamente el contenido de la clase 121.
La conexión con machine learning es directa y merece enunciarse sin rodeos: una capa densa calcula combinaciones lineales. Cada neurona de salida toma los pesos de una fila de W como coeficientes y combina las entradas. y = Wx + b es un conjunto de combinaciones lineales más un desplazamiento.
El sesgo b es lo que impide que la capa sea estrictamente lineal: una transformación lineal manda el cero al cero, y sumar b lo mueve. Técnicamente Wx + b es una transformación afín, no lineal, y esa distinción es la misma que la clase 073 resolvió con coordenadas homogéneas.
Combinación lineal en la base canónica.
e₁ = (1,0,0) e₂ = (0,1,0) e₃ = (0,0,1)
coeficientes: 2, −3, 5
2·e₁ + (−3)·e₂ + 5·e₃ = (2, −3, 5)
Los coeficientes SON las coordenadas ✓
(esto solo ocurre en la base canónica)
Capa densa equivalente:
y = Wx + b con W de shape (salidas, entradas)
cada fila de W son los coeficientes de una combinaciónToda combinación lineal de la base canónica reconstruye el vector.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | coincide_con_los_coeficientes, una_capa_densa_es_una_combinacion_lineal |
compmath run 106Capas densas, mezclas de modelos, interpolación, representación en bases y superposición de señales.
9781733146678 verificado en International ISBN Agency (2026-08-19).La independencia lineal se detecta por el rango, no por inspección visual.
independientes ⟺ Σαᵢvᵢ = 0 solo con todos los αᵢ = 0
k vectores en ℝⁿ con k > n son siempre dependientesUn conjunto de vectores es linealmente independiente si ninguno se puede escribir como combinación de los demás. La definición formal —la única combinación que da el vector cero es la trivial— es la operativa, porque se traduce en un sistema homogéneo cuya única solución debe ser la nula.
En la práctica no se comprueba a ojo: se calcula el rango. Si el rango del conjunto coincide con el número de vectores, son independientes; si es menor, hay al menos una relación de dependencia. Para conjuntos cuadrados, el determinante nulo es equivalente y más rápido de calcular.
La dependencia lineal en datos tiene un nombre propio en estadística: multicolinealidad. Cuando dos features son casi combinación lineal una de otra, la matriz XᵀX se vuelve casi singular, los coeficientes de la regresión se disparan y pierden interpretabilidad. Ridge (clase 283) existe en buena parte para mitigar exactamente eso.
Un hecho de conteo que conviene tener presente: en ℝⁿ no puede haber más de n vectores independientes. Si un conjunto de datos tiene más features que observaciones, las filas son necesariamente dependientes, y eso garantiza que el sistema esté indeterminado sin regularización.
Dos conjuntos de tres vectores en ℝ³.
A = base canónica rango 3 = 3 vectores → independientes ✓
B = {(1,2,3), (2,4,6), (1,1,1)}
fila2 = 2 · fila1 → hay dependencia
rango(B) = 2 < 3 → dependientes ✗
det(B) = 0 ✓ coherente
En ℝ³ nunca puede haber 4 vectores independientes.Independencia detectada por el rango, no por inspección.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | rango_A, rango_B, determinante_B |
| Comprobaciones (2) | A_independiente, B_independiente |
compmath run 107Detección de multicolinealidad, selección de features, diagnóstico de sistemas mal condicionados y reducción de dimensionalidad.
9781733146678 verificado en International ISBN Agency (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).El span de un conjunto es siempre un subespacio, y su dimensión es el rango del conjunto.
span{v₁,...,vₖ} = {Σαᵢvᵢ}
dim(span) = rango del conjuntoEl span de un conjunto de vectores es el conjunto de todas sus combinaciones lineales. Siempre es un subespacio: contiene el vector cero y es cerrado bajo suma y producto por escalar. Esa cerradura es lo que lo distingue de un subconjunto cualquiera.
Su dimensión —el número de vectores independientes que contiene— determina qué tipo de objeto geométrico es. En ℝ³, el span de un vector no nulo es una recta por el origen; el de dos vectores independientes, un plano; el de tres, todo el espacio. Añadir un vector que ya está en el span no cambia nada, y esa es la definición operativa de redundancia.
La conexión con datos es directa. Si las features de un conjunto de datos generan un subespacio de dimensión menor que el número de features, hay redundancia, y PCA (clase 135) encuentra una base de ese subespacio con menos vectores. La «dimensión intrínseca» de un conjunto de datos es la dimensión de su span aproximado.
En redes neuronales, el espacio columna de la matriz de pesos determina qué salidas son alcanzables. Si W tiene rango deficiente, la capa proyecta sobre un subespacio y pierde información irrecuperablemente: dos entradas distintas pueden producir la misma salida.
Span en ℝ³.
v₁ = (1,0,0), v₂ = (0,1,0)
span{v₁, v₂}: dimensión 2 → el plano z = 0
¿contiene (0,0,1)? No
Al añadir v₃ = (0,0,1):
rango pasa de 2 a 3 → ahora genera todo ℝ³
Propiedades del subespacio:
contiene el (0,0,0) ✓
cerrado bajo suma y escala ✓El span de dos vectores en ℝ³ es un plano, no todo el espacio.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | dimension_del_span, rango_al_añadirlo |
| Comprobaciones (3) | es_un_plano, ahora_genera_R3, subespacio_contiene_al_cero |
compmath run 108Dimensión intrínseca de un conjunto de datos, PCA, análisis de capacidad de una capa y compresión por reducción de rango.
9781733146678 verificado en International ISBN Agency (2026-08-19).Suma, escala y transpuesta operan elemento a elemento; la traza suma la diagonal.
(A + B)ᵢⱼ = Aᵢⱼ + Bᵢⱼ
(Aᵀ)ᵀ = A
tr(A) = Σ Aᵢᵢ = suma de los autovaloresLas operaciones básicas con matrices son las que se esperan: suma y escala elemento a elemento, ambas definidas solo entre matrices del mismo shape. El producto matricial es la excepción: no es elemento a elemento, y por eso la clase 111 lo trata aparte.
La traza —la suma de la diagonal— parece una definición arbitraria y tiene propiedades notables: es lineal, es invariante bajo transposición y cumple tr(AB) = tr(BA) aunque AB ≠ BA. Esa última propiedad la hace invariante bajo cambio de base, y de ahí que la traza sea igual a la suma de los autovalores (clase 125).
En machine learning la traza aparece con frecuencia en formas cuadráticas y en el cálculo de gradientes matriciales: ∂tr(AᵀB)/∂A = B. También es la que define la norma de Frobenius, ‖A‖_F = √tr(AᵀA), que es la norma euclídea de la matriz vista como un vector largo.
La transposición cumple (Aᵀ)ᵀ = A y, lo más útil, (AB)ᵀ = BᵀAᵀ con el orden invertido. Ese cambio de orden es la causa de la mitad de los errores al derivar expresiones matriciales, y conviene comprobarlo numéricamente una vez para fijarlo.
Operaciones básicas con matrices 2×2.
A = [[1,2],[3,4]] B = [[0,1],[−1,2]]
A + B = [[1,3],[2,6]]
3A = [[3,6],[9,12]]
Aᵀ = [[1,3],[2,4]]
(Aᵀ)ᵀ = A ✓
traza(A) = 1 + 4 = 5Suma, escala y transpuesta de matrices.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | traza_A |
| Comprobaciones (1) | (Aᵀ)ᵀ=A |
compmath run 109Norma de Frobenius, cálculo de gradientes matriciales, invariantes bajo cambio de base y regularización de matrices de pesos.
9781733146678 verificado en International ISBN Agency (2026-08-19).Ax es una combinación lineal de las columnas de A, y por eso vive en el espacio columna.
Ax = Σ xⱼ · (columna j de A)
Ax = b tiene solución ⟺ b ∈ espacio columna de AHay dos formas de calcular Ax y una de entenderlo. La primera —fila por fila, cada componente del resultado es un producto punto— es la que se enseña para calcular a mano. La segunda —combinación lineal de las columnas de A con los coeficientes de x— es la que explica qué está ocurriendo.
Esa segunda lectura tiene una consecuencia inmediata y muy útil: Ax siempre está en el span de las columnas de A, es decir, en el espacio columna. Y por tanto Ax = b tiene solución si y solo si b pertenece a ese espacio. La existencia de solución deja de ser un misterio y pasa a ser una pregunta sobre pertenencia a un subespacio.
En deep learning, Wx + b es exactamente esto: cada fila de W define una combinación de las entradas, o equivalentemente, la salida es una combinación de las columnas de W. Si W tiene rango deficiente, la salida está confinada a un subespacio de dimensión menor que el número de neuronas: hay capacidad desperdiciada.
El coste de Ax es O(mn), lineal en el número de elementos de la matriz. Es la operación básica sobre la que se construye todo lo demás, y por eso las bibliotecas la implementan en BLAS de nivel 2 con optimizaciones de caché específicas.
Ax como combinación de columnas.
A = [[2,1], x = (4, 5)
[0,3],
[1,−1]]
Cálculo por filas:
(2·4 + 1·5, 0·4 + 3·5, 1·4 + (−1)·5) = (13, 15, −1)
Cálculo por columnas:
4·(2,0,1) + 5·(1,3,−1) = (8,0,4) + (5,15,−5) = (13,15,−1) ✓
Ax vive en el span de {(2,0,1), (1,3,−1)}: un plano en ℝ³Ax como combinación lineal de las columnas de A.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | coinciden |
compmath run 110Capas densas, transformación de coordenadas, sistemas de ecuaciones y análisis de capacidad de una red.
9781733146678 verificado en International ISBN Agency (2026-08-19).El producto matricial compone transformaciones, es asociativo y no conmuta.
(AB)ᵢⱼ = Σₖ AᵢₖBₖⱼ
(AB)C = A(BC) pero AB ≠ BA
(AB)ᵀ = BᵀAᵀEl producto matricial no se define elemento a elemento porque no representa una suma: representa una composición. Aplicar B y luego A es aplicar la matriz AB, y de esa definición se deduce la fórmula «filas por columnas», no al revés.
Que sea asociativo pero no conmutativo tiene consecuencias prácticas. La asociatividad permite elegir el orden de evaluación, y esa elección puede cambiar radicalmente el coste: calcular (AB)C con A de (1000,1000), B de (1000,1) y C de (1,1000) cuesta muchísimo más que A(BC). Es una optimización real que hacen los compiladores de grafos de cómputo.
La no conmutatividad es la que hace que el orden de las capas importe, que rotar y luego escalar difiera de escalar y luego rotar (clase 073), y que las derivadas matriciales tengan que respetar el orden.
El coste del algoritmo ingenuo es O(n³). Strassen redujo el exponente a 2.807 en 1969, y el récord teórico actual está por debajo de 2.372, aunque esos algoritmos no son prácticos por sus constantes. En la práctica, el rendimiento lo determinan la localidad de caché y el paralelismo, no el exponente asintótico, y esa es la razón de existir de BLAS y de las unidades tensoriales de las GPU.
El producto no conmuta.
A = [[1,2],[3,4]] B = [[0,1],[1,0]] (intercambia columnas)
AB = [[2,1],[4,3]]
BA = [[3,4],[1,2]]
¿AB = BA? No ✗
Transpuesta del producto:
(AB)ᵀ = [[2,4],[1,3]]
BᵀAᵀ = [[2,4],[1,3]] ✓ con el orden invertido
Coste ingenuo n×n: O(n³)AB ≠ BA y el coste cúbico del producto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | conmutan, identidad_de_transpuesta |
compmath run 111Composición de capas, pipelines de transformación gráfica, optimización del orden de evaluación en grafos de cómputo y atención multi-cabeza.
9781421407944 verificado en International ISBN Agency (2026-08-19).10.1007/bf02165411 verificado en Crossref (2026-08-19).Toda matriz cuadrada se descompone en parte simétrica y antisimétrica, y AᵀA es siempre simétrica.
A = (A+Aᵀ)/2 + (A−Aᵀ)/2
AᵀA es simétrica y semidefinida positivaUna matriz es simétrica si coincide con su transpuesta. Las simétricas tienen propiedades excepcionales que la parte 06 desarrolla: sus autovalores son reales, sus autovectores son ortogonales y siempre son diagonalizables. Nada de eso está garantizado para una matriz general.
Toda matriz cuadrada se descompone de forma única en una parte simétrica y una antisimétrica, y esa descomposición es un ejemplo de una idea general: separar un objeto en componentes con propiedades distintas para tratar cada una por separado. En física, esa separación distingue deformación de rotación.
El hecho más útil de esta clase es que AᵀA es siempre simétrica, sea A cuadrada o no, y además semidefinida positiva. Esa propiedad es la que hace que las ecuaciones normales de mínimos cuadrados (clase 131) tengan solución, que la matriz de covarianza (clase 191) sea diagonalizable con autovalores no negativos, y que la SVD exista para toda matriz (clase 132).
La contrapartida numérica es que AᵀA eleva al cuadrado el número de condición de A. Por eso, aunque las ecuaciones normales son correctas en teoría, en la práctica se prefiere QR o SVD: la clase 234 mide esa diferencia.
Descomposición y simetría de AᵀA.
A = [[1,2],[4,5]]
parte simétrica = (A + Aᵀ)/2 = [[1,3],[3,5]]
parte antisimétrica = (A − Aᵀ)/2 = [[0,−1],[1,0]]
suma = A ✓
simétrica = su transpuesta ✓
antisimétrica: diagonal nula, opuestos fuera
AᵀA = [[17,22],[22,29]]
¿es simétrica? Sí ✓Toda matriz cuadrada se descompone en parte simétrica y antisimétrica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | suma_reconstruye_A, sim_es_simetrica, AᵀA_es_simetrica |
compmath run 112Matriz de covarianza, ecuaciones normales, Hessiano (siempre simétrico si f es dos veces derivable con continuidad) y matriz de Gram en métodos kernel.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781733146678 verificado en International ISBN Agency (2026-08-19).Un sistema lineal tiene solución única si el determinante no es nulo; el residuo es el criterio de aceptación.
Ax = b
residuo r = Ax − b, debe ser ≈ 0
solución única ⟺ det(A) ≠ 0 ⟺ rango(A) = nResolver Ax = b es el problema computacional más frecuente del álgebra lineal, y sus tres desenlaces posibles —solución única, ninguna o infinitas— se distinguen por el rango. Con determinante no nulo, la matriz es invertible y la solución es única; con determinante nulo, hay que comparar el rango de A con el de la matriz ampliada para distinguir los otros dos casos.
El residuo r = Ax − b es el criterio de aceptación universal. Un solver puede devolver un vector sin lanzar ninguna excepción y estar equivocado; calcular el residuo cuesta una multiplicación matriz-vector y detecta el problema. La regla del programa es que ningún resultado de un solver se acepta sin comprobar su residuo.
Un residuo pequeño no garantiza que la solución sea precisa: en un sistema mal condicionado, un residuo minúsculo puede corresponder a una solución muy alejada de la correcta. La relación entre ambos la da el número de condición (clase 035), y esa es la razón por la que el residuo es necesario pero no suficiente.
Geométricamente, cada ecuación de un sistema 3×3 es un plano, y la solución es su punto de intersección. Sin solución significa que no hay punto común; infinitas soluciones, que los planos se cortan en una recta o coinciden.
Sistema 3×3 con solución única.
A = [[ 2, 1, −1], b = ( 8,
[−3, −1, 2], −11,
[−2, 1, 2]] −3)
det(A) = −1 ≠ 0 → solución única
x = (2, 3, −1)
Residuo: Ax − b = (0, 0, 0) ✓
‖r‖ = 0.0
Verificación por ecuación:
2·2 + 1·3 − 1·(−1) = 8 ✓Sistema 3x3: solución, residuo y unicidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | norma_del_residuo, determinante |
| Comprobaciones (1) | solucion_unica |
compmath run 113Ajuste de modelos lineales, equilibrio en circuitos y estructuras, interpolación, balance de reacciones y cualquier problema con restricciones lineales.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781733146678 verificado en International ISBN Agency (2026-08-19).El pivoteo parcial evita dividir por pivotes casi nulos y hace estable la eliminación.
coste: ~2n³/3 operaciones
pivote = fila con el mayor |Aᵢⱼ| en la columna actualLa eliminación de Gauss transforma el sistema en uno triangular mediante operaciones que no cambian el conjunto solución: intercambiar filas, escalarlas y restarles múltiplos de otras. Una vez triangular, la sustitución hacia atrás resuelve en O(n²).
El pivoteo parcial no es un refinamiento opcional: es lo que hace el método utilizable. Sin él, un pivote muy pequeño produce factores enormes que amplifican los errores de redondeo y pueden destruir por completo la precisión. Con pivoteo, se elige en cada columna la fila con el mayor valor absoluto, garantizando que los factores estén acotados por 1.
El ejemplo clásico es un sistema de 2×2 con pivote 10⁻²⁰: sin pivoteo la solución calculada es completamente errónea; con pivoteo es correcta. La diferencia no está en la matemática —ambas eliminaciones son válidas en ℝ— sino en la aritmética finita.
El coste, ~2n³/3 operaciones, es el mismo que el de la factorización LU, y no es casualidad: la eliminación de Gauss es la factorización LU, expresada de otra forma. La ventaja de guardarla como LU (clase 129) es poder resolver muchos sistemas con la misma matriz pagando O(n²) cada uno en lugar de O(n³).
Eliminación con pivoteo sobre un sistema 3×3.
Matriz original:
[ 2 1 −1 | 8]
[−3 −1 2 | −11]
[−2 1 2 | −3]
Pivoteo: la mayor |entrada| de la columna 1 es −3 → intercambiar filas
Intercambios realizados: 2
Triangular superior resultante:
[−3 −1.000 2.000]
[ 0 1.667 0.667]
[ 0 0 0.200]
Sustitución hacia atrás → x = (2, 3, −1)
Verificación: Ax = (8, −11, −3) = b ✓
Coste: O(n³/3) ≈ 9 operaciones para n=3Eliminación de Gauss con pivoteo parcial, paso a paso.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | intercambios_de_fila |
| Comprobaciones (0) | — |
compmath run 114Es el algoritmo que hay dentro de cualquier solve de biblioteca. Resolver circuitos, estructuras, sistemas de equilibrio y ajustes lineales.
9780898719574 verificado en International ISBN Agency (2026-08-19).9780898718027, pendiente de resolver.El rango es la dimensión efectiva de la salida; rango más nulidad es siempre el número de columnas.
rango(A) ≤ mín(m, n)
rango + nulidad = número de columnasEl rango de una matriz es la dimensión de su espacio columna, es decir, cuántas direcciones independientes puede alcanzar la transformación. Es el número que realmente describe una matriz, mucho más que su tamaño: una matriz 1000×1000 de rango 3 contiene tanta información como una de 3×3.
El teorema del rango-nulidad —rango más nulidad igual al número de columnas— dice que lo que no llega a la imagen se pierde en el núcleo. Si una transformación de ℝ⁵ en ℝ⁵ tiene rango 3, hay un subespacio de dimensión 2 que colapsa al cero: dos direcciones de información desaparecen sin posibilidad de recuperación.
Numéricamente, el rango es delicado. Una matriz puede ser de rango completo en aritmética exacta y comportarse como deficiente en punto flotante si sus valores singulares más pequeños están cerca del ruido. Por eso el rango numérico se define con una tolerancia —cuántos valores singulares superan un umbral— y se calcula con SVD, no con eliminación.
En machine learning el rango bajo es a la vez un problema y una herramienta. Es un problema cuando indica features redundantes; es una herramienta cuando se impone a propósito para comprimir, como en LoRA, que adapta un modelo grande añadiendo matrices de rango muy bajo.
Rango de tres matrices.
A = [[1,2],[3,4]] rango 2 (completo) det = −2 ≠ 0
B = [[1,2],[2,4]] rango 1 (deficiente) det = 0
C = [[1,2,3],[4,5,6]] rango 2 máximo posible: mín(2,3) = 2
Teorema del rango-nulidad para B:
columnas = 2, rango = 1 → nulidad = 1
el núcleo es la recta generada por (2,−1)
B·(2,−1) = (0,0) ✓Rango: la dimensión efectiva de la transformación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | rango_completa, rango_deficiente, rango_rectangular_2x3, rango_maximo_posible, nulidad_de_la_deficiente |
| Comprobaciones (1) | deficiente_es_invertible |
compmath run 115Detección de redundancia en features, compresión de bajo rango, LoRA, diagnóstico de sistemas indeterminados y análisis de capacidad de una capa.
9781733146678 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.2106.09685 verificado en DataCite (2026-08-19).La inversa existe si el determinante no es nulo, pero resolver un sistema casi nunca debe pasar por ella.
A·A⁻¹ = I
2×2: A⁻¹ = (1/det)·[[d,−b],[−c,a]]
resolver Ax = b: usar factorización, no A⁻¹bLa inversa de una matriz es la que deshace su transformación. Existe si y solo si la matriz es cuadrada y de rango completo, condición equivalente a que su determinante sea no nulo. Para 2×2 hay fórmula cerrada; para tamaños mayores se calcula con eliminación de Gauss-Jordan.
El mensaje práctico de esta clase es una recomendación explícita: no calcules la inversa para resolver un sistema. A⁻¹b cuesta unas tres veces más que resolver directamente y es numéricamente peor, porque acumula error en cada entrada de la inversa antes de multiplicar. Ninguna biblioteca seria lo hace, y ver inv(A) @ b en código es señal de que quien lo escribió no conoce esta distinción.
Hay casos legítimos para calcular la inversa: cuando se necesita explícitamente, como en la matriz de covarianza inversa (matriz de precisión) de un modelo gaussiano, o al analizar la sensibilidad de un sistema. Incluso ahí, si la matriz está mal condicionada, conviene usar la pseudoinversa vía SVD (clase 134).
La comprobación de que la inversa se calculó bien es directa: A·A⁻¹ debe dar la identidad dentro de una tolerancia. Que no dé exactamente la identidad es esperado, y la magnitud de la desviación informa sobre el condicionamiento del problema.
Inversa de una matriz 2×2 y su verificación.
A = [[4,7],[2,6]]
det = 4·6 − 7·2 = 10 ≠ 0 → invertible
A⁻¹ = (1/10)·[[6,−7],[−2,4]] = [[0.6,−0.7],[−0.2,0.4]]
A·A⁻¹ = [[1,0],[0,1]] ✓ identidad
Coste comparado para resolver Ax = b:
vía inversa: ~n³ + n² operaciones y peor precisión
vía factorización: ~n³/3 operacionesLa inversa existe, pero rara vez conviene calcularla.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | determinante |
| Comprobaciones (1) | es_identidad |
compmath run 116Matriz de precisión en modelos gaussianos, análisis de sensibilidad y transformaciones inversas en gráficos. Para resolver sistemas, siempre factorización.
9780898718027, pendiente de resolver.solve en lugar de inv — Álgebra lineal numérica: el tema de esta clase · URL de la fuente primaria comprobada en NumPy developers (2026-08-19).El determinante mide cuánto escala el volumen la transformación; cero significa que la aplasta.
det(AB) = det(A)·det(B)
det(A) = 0 ⟺ A es singular
|det| = factor de escalado del volumenEl determinante tiene una definición algebraica engorrosa y una interpretación geométrica limpia: es el factor —con signo— por el que la transformación multiplica el volumen. En 2D es el área del paralelogramo de las columnas; en 3D, el volumen del paralelepípedo; en n dimensiones, el volumen n-dimensional.
Desde esa lectura, las propiedades se vuelven evidentes. det(AB) = det(A)det(B) porque aplicar dos transformaciones escala el volumen por el producto de sus factores. Un determinante nulo significa que la transformación aplasta el espacio en una dimensión menor, y por eso no es invertible: no se puede recuperar volumen de algo aplastado. Un determinante negativo indica inversión de orientación.
Computacionalmente, el determinante no es un buen indicador de singularidad. Escalar una matriz por 0.1 divide su determinante por 10ⁿ, así que un determinante minúsculo puede corresponder a una matriz perfectamente bien condicionada. El indicador correcto es el número de condición, cociente entre el mayor y el menor valor singular (clase 132).
Donde el determinante sí es imprescindible es en el cambio de variable: al transformar una densidad de probabilidad, el jacobiano corrige el factor de volumen. Sin esa corrección, la densidad transformada no integraría a 1. Esa es la base de los normalizing flows.
Determinante de tres transformaciones.
A = [[2,0],[0,3]] diagonal
det = 6 → escala las áreas por 6
B = [[1,2],[2,4]] fila2 = 2·fila1
det = 0 → singular, aplasta el plano en una recta
F = [[0,1],[1,0]] reflexión
det = −1 → conserva el área, invierte la orientación
Producto: det(A·M) = det(A)·det(M) ✓ verificadoEl determinante mide el escalado de volumen y detecta singularidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | det_A, escala_areas_por, det_B |
| Comprobaciones (3) | B_es_singular, det(AB)=det(A)det(B), det_negativo_invierte_orientacion |
compmath run 117Cambio de variable en integrales y en densidades, normalizing flows, detección de degeneración geométrica y cálculo de volúmenes.
9781733146678 verificado en International ISBN Agency (2026-08-19).Las matrices ortogonales preservan normas y ángulos, y su número de condición es 1.
QᵀQ = I ⟹ Q⁻¹ = Qᵀ
‖Qv‖ = ‖v‖
κ(Q) = 1Una matriz ortogonal tiene columnas ortonormales: unitarias y perpendiculares entre sí. La condición QᵀQ = I implica que su inversa es su transpuesta, lo que convierte una operación cara O(n³) en una gratuita.
Su propiedad más valiosa es numérica: preservan la norma, ‖Qv‖ = ‖v‖. Como no estiran ni encogen ningún vector, su número de condición es exactamente 1, el mínimo posible. Aplicar una transformación ortogonal no amplifica el error relativo, y esa es la razón por la que el análisis numérico serio se construye sobre ellas.
De ahí que los algoritmos estables usen rotaciones de Givens y reflexiones de Householder en lugar de transformaciones generales: la factorización QR es más estable que las ecuaciones normales precisamente porque Q es ortogonal (clase 234). Y de ahí que la SVD, cuya U y V son ortogonales, sea la herramienta más robusta del álgebra lineal numérica.
Las rotaciones son ortogonales con determinante 1; las reflexiones, con determinante −1. En deep learning se han propuesto capas con matrices ortogonales precisamente para evitar que los gradientes se desvanezcan o exploten al propagarse por muchas capas: si la norma se preserva en cada capa, se preserva en toda la red.
Verificar las propiedades de una rotación.
Q = rotación de 37°
[[0.7986, −0.6018],
[0.6018, 0.7986]]
QᵀQ = [[1,0],[0,1]] ✓ ortogonal
det Q = 1 ✓ rotación (no reflexión)
v = (3,4), ‖v‖ = 5
Qv = (0.0887, 4.9992), ‖Qv‖ = 5.0 ✓ preserva la norma
Q⁻¹ = Qᵀ → invertir es transponer, coste O(n²) en lugar de O(n³)Matriz ortogonal: QᵀQ = I, preserva normas y ángulos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | det_Q, |v|, |Qv| |
| Comprobaciones (2) | preserva_norma, inversa_es_la_transpuesta |
compmath run 118Factorización QR, SVD, rotaciones en gráficos, capas ortogonales en redes profundas y algoritmos numéricamente estables en general.
9780898719574 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1511.06464 verificado en DataCite (2026-08-19).La proyección ortogonal es la mejor aproximación dentro de un subespacio, y su residuo es ortogonal a él.
p = A(AᵀA)⁻¹Aᵀb
residuo r = b − p, con Aᵀr = 0
‖b‖² = ‖p‖² + ‖r‖²Proyectar un vector sobre un subespacio es encontrar el punto del subespacio más cercano a él. Ese punto es único y se caracteriza por una condición geométrica limpia: el residuo es ortogonal al subespacio. Si no lo fuera, quedaría una componente en el subespacio que se podría aprovechar para acercarse más.
Esa caracterización es la que se usa para calcular: exigir Aᵀ(b − Ax) = 0 da las ecuaciones normales AᵀAx = Aᵀb, que es exactamente el problema de mínimos cuadrados de la clase 131. Ajustar una recta a unos datos es proyectar el vector de observaciones sobre el espacio columna de la matriz de diseño.
El teorema de Pitágoras se cumple: ‖b‖² = ‖p‖² + ‖r‖². Esa identidad es la que aparece en estadística como la descomposición de la varianza —total igual a explicada más residual— y la que define el R² de una regresión (clase 214). No son tres resultados distintos: es el mismo, escrito en tres lenguajes.
Verificar una proyección es barato y conviene hacerlo siempre: comprobar que el residuo es ortogonal a todas las columnas de A. Si no lo es, el cálculo está mal. El motor del programa lo comprueba explícitamente.
Proyectar (6,0,0) sobre el plano generado por dos columnas.
A = [[1,0], b = (6, 0, 0)
[1,1],
[1,2]]
Ecuaciones normales: AᵀA·x = Aᵀb
[[3,3],[3,5]] x = (6, 0)
x = (5, −3)
proyección p = A·x = (5, 2, −1)
residuo r = b − p = (1, −2, 1)
Verificaciones:
Aᵀr = (0, 0) ✓ ortogonal al subespacio
‖b‖² = 36
‖p‖² + ‖r‖² = 30 + 6 = 36 ✓ PitágorasProyección sobre un subespacio y descomposición ortogonal.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | norma_del_residuo |
| Comprobaciones (2) | residuo_ortogonal, es_la_mejor_aproximacion_en_L2 |
compmath run 119Mínimos cuadrados, R² de una regresión, PCA, descomposición de la varianza y eliminación de componentes no deseadas de una señal.
9781733146678 verificado en International ISBN Agency (2026-08-19).9780898719574 verificado en International ISBN Agency (2026-08-19).Un recomendador por filtrado colaborativo es producto punto normalizado y media ponderada; nada más.
similitud(u,v) = u·v / (‖u‖‖v‖)
puntuación(i) = Σ sim(u,w)·rᵥᵢ / Σ |sim(u,w)|El capstone construye un sistema de recomendación por filtrado colaborativo basado en usuarios, y su interés está en lo que no usa: ninguna biblioteca de machine learning, ningún modelo entrenado, ninguna red neuronal. Es producto punto, norma y media ponderada.
El algoritmo tiene tres pasos. Calcular la similitud coseno entre el usuario objetivo y todos los demás; usar esas similitudes como pesos para promediar las valoraciones de los demás sobre los ítems que el objetivo no ha visto; recomendar el ítem con mayor puntuación estimada. Los pesos se normalizan dividiendo por la suma de similitudes absolutas para que la escala se conserve.
Las limitaciones son reales y conviene declararlas. El arranque en frío: un usuario nuevo no tiene vector, así que no hay similitud que calcular. La dispersión: en un catálogo real, cada usuario ha valorado una fracción minúscula de los ítems, y los vectores son casi todo ceros. Y el coste: comparar con todos los usuarios es O(n·d) por consulta, inviable con millones de usuarios sin índices aproximados.
Los sistemas industriales resuelven esas limitaciones con factorización matricial —que es la parte 06— y con embeddings aprendidos, pero la métrica de comparación sigue siendo la de esta clase. Entender el caso simple es lo que permite entender por qué las soluciones complejas hacen lo que hacen.
Recomendar a «ana» entre cuatro usuarios.
valoraciones (0 = no visto):
ana [5, 3, 0, 1]
beto [4, 0, 0, 1]
cata [1, 1, 0, 5]
dario [0, 0, 5, 4]
similitud coseno con ana:
beto 0.9783 ← el más parecido
cata 0.4707
dario 0.0900
ítems no vistos por ana: índice 2
puntuación estimada del ítem 2:
(0.9783·0 + 0.4707·0 + 0.0900·5) / (0.9783+0.4707+0.0900) = 0.29
recomendación: ítem 2 (el único no visto)Capstone: recomendación lineal por similitud coseno entre usuarios.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | recomendacion |
| Comprobaciones (1) | todo_es_producto_punto |
compmath run 120Sistemas de recomendación, búsqueda por similitud, agrupación de usuarios y motores de contenido relacionado. El mismo cálculo, con embeddings en lugar de valoraciones, es la base de la recuperación semántica.
9781071621974, pendiente de resolver.Cambio de base, autovalores, diagonalización, LU, QR, mínimos cuadrados, SVD, pseudoinversa, PCA y álgebra tensorial.
Si la parte 05 enseñó qué es una matriz, esta enseña a desarmarla. Una descomposición escribe una matriz como producto de matrices más simples, y esa reescritura convierte problemas difíciles en fáciles: resolver muchos sistemas, calcular potencias, comprimir datos, encontrar direcciones principales o diagnosticar mal condicionamiento.
Las clases 121 a 124 preparan el terreno con el concepto que más cuesta y más rinde: la base es una elección. Un vector no cambia al cambiar de base; lo que cambia es su lista de coordenadas. La matriz A' = P⁻¹AP representa la misma transformación vista desde otra base, y toda la teoría de autovalores consiste en buscar la base donde la transformación se ve lo más simple posible.
Las clases 125 a 128 son autovalores y diagonalización. Un autovector es una dirección que la transformación solo escala, y en esa base la matriz se convierte en diagonal: aplicarla cien veces cuesta elevar números a la centésima, no multiplicar cien matrices. Las matrices simétricas —que incluyen toda covarianza y todo Hessiano— son siempre diagonalizables con base ortonormal, resultado conocido como teorema espectral.
Las clases 129 a 134 son las descomposiciones de trabajo: LU para resolver muchos sistemas, QR para mínimos cuadrados estables, y SVD, que es la más general y la más útil. La SVD existe para toda matriz, incluso rectangular y singular, y de ella se leen el rango, el número de condición, la mejor aproximación de rango bajo y la pseudoinversa. Si hubiera que quedarse con un solo resultado de álgebra lineal aplicada, sería la SVD.
El teorema de Eckart-Young, que la clase 133 comprueba numéricamente, dice algo muy fuerte: truncar la SVD da la mejor aproximación posible de rango k, no una buena. Ese resultado es el que fundamenta PCA, la compresión de imágenes, los sistemas de recomendación por factorización y LoRA.
El cierre (135 a 139) conecta con la práctica moderna: PCA como SVD de datos centrados, producto de Kronecker, tensores, broadcasting y notación de Einstein. Broadcasting y einsum no son algoritmos nuevos: son notación para expresar operaciones tensoriales sin bucles, y saber leerlos es requisito para leer código de deep learning.
LoRA factoriza matrices de bajo rango, la atención se define con productos tensoriales y la estabilidad del entrenamiento depende del espectro de los pesos.
| Término | Definición | Clase |
|---|---|---|
| Autovalor | Factor λ por el que la transformación escala su autovector: Av = λv. | 125 |
| Base | Conjunto independiente que genera todo el espacio. Las coordenadas de un vector dependen de la base elegida. | 121 |
| Broadcasting | Regla que alinea shapes por la derecha y estira las dimensiones de tamaño 1 sin copiar memoria. | 138 |
| Cambio de base | Transformación A' = P⁻¹AP que expresa la misma aplicación lineal en otra base. | 122 |
| Definida positiva | Matriz simétrica con todos los autovalores positivos; equivale a xᵀAx > 0 para todo x no nulo. | 127 |
| Factorización LU | A = LU con L triangular inferior y U superior. Factoriza una vez, resuelve muchos sistemas. | 129 |
| Factorización QR | A = QR con Q ortogonal y R triangular superior. Numéricamente más estable que las ecuaciones normales. | 130 |
| Forma cuadrática | q(x) = xᵀAx. Sus curvas de nivel son elipses si A es definida positiva. | 128 |
| Matrices semejantes | A y P⁻¹AP. Representan la misma transformación y comparten traza, determinante y autovalores. | 122 |
| Mínimos cuadrados | Solución que minimiza ‖Ax − b‖². Es la proyección de b sobre el espacio columna de A. | 131 |
| Notación de Einstein | Convenio en el que los índices repetidos se suman. Unifica producto, traza, contracción y transposición. | 139 |
| Núcleo | Conjunto de vectores que la transformación manda al cero. Su dimensión es la nulidad. | 124 |
| Orden de un tensor | Número de índices necesarios para localizar un elemento. Un lote de imágenes es de orden 4. | 137 |
| PCA | Proyección sobre los autovectores de la covarianza. Es la SVD de los datos centrados. | 135 |
| Producto de Kronecker | A⊗B, matriz en bloques cuyo rango es el producto de los rangos. | 136 |
| Pseudoinversa | A⁺, generalización de la inversa a matrices rectangulares o singulares. Da la solución de mínima norma. | 134 |
| SVD | A = UΣVᵀ. Existe para toda matriz. De ella se leen rango, condición y mejor aproximación de rango bajo. | 132 |
| Teorema de Eckart-Young | La SVD truncada a rango k es la mejor aproximación de rango k en norma de Frobenius y espectral. | 133 |
| Teorema espectral | Toda matriz simétrica real es diagonalizable con autovectores ortonormales y autovalores reales. | 126 |
| Valor singular | Raíz cuadrada de los autovalores de AᵀA. Miden cuánto estira A en cada dirección principal. | 132 |
Las coordenadas de un vector dependen de la base; el vector no.
v = Σ cᵢ bᵢ con bᵢ los vectores de la base
coordenadas: c = B⁻¹v, donde B tiene las bᵢ por columnasLa confusión más persistente del álgebra lineal es identificar un vector con su lista de números. La lista son sus coordenadas en una base concreta, casi siempre la canónica, y cambiar de base cambia la lista sin cambiar el objeto. El vector (3,1) es el mismo punto del plano se mire desde donde se mire.
Calcular las coordenadas en otra base es resolver un sistema: si B es la matriz cuyas columnas son los vectores de la nueva base, las coordenadas c cumplen Bc = v. Que ese sistema tenga solución única es exactamente la condición de que los vectores formen base: independientes y generadores.
La utilidad de cambiar de base es que algunos problemas son triviales en la base correcta. Una matriz cualquiera es difícil de elevar a la centésima potencia; en la base de sus autovectores es diagonal y basta elevar números. Ese es el programa completo de las clases 125 y 126.
En machine learning el cambio de base es omnipresente aunque no se nombre: PCA cambia a la base de componentes principales, la transformada de Fourier cambia a la base de frecuencias, y una capa de embedding cambia de la base «one-hot» a una base densa aprendida. Todas son la misma operación.
El mismo vector en dos bases.
base canónica: (3, 1)
nueva base: b₁ = (1,1), b₂ = (1,−1)
Resolver B·c = v:
[[1, 1], [c₁] [3]
[1,−1]] [c₂] = [1]
c = (2, 1)
Comprobación: 2·(1,1) + 1·(1,−1) = (3,1) ✓
El vector no cambió; cambió su lista de coordenadas.Las coordenadas dependen de la base elegida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | el_vector_no_cambia, base_es_independiente |
compmath run 121PCA, transformada de Fourier, embeddings, cambio de sistema de referencia en robótica y cualquier representación alternativa de los mismos datos.
9781733146678 verificado en International ISBN Agency (2026-08-19).A y P⁻¹AP representan la misma transformación en bases distintas y comparten sus invariantes.
A' = P⁻¹AP (semejanza)
tr(A') = tr(A), det(A') = det(A), autovalores igualesSi P es la matriz cuyas columnas son los vectores de la nueva base, entonces P⁻¹AP es la misma transformación expresada en esa base. La lectura de la fórmula, de derecha a izquierda, es literal: pasar de la nueva base a la canónica (P), aplicar la transformación (A) y volver (P⁻¹).
Las matrices relacionadas así se llaman semejantes, y comparten todo lo que no depende de la base: traza, determinante, rango, polinomio característico y autovalores. Esos son los invariantes de la transformación, y son las magnitudes que describen la transformación en sí, no su representación.
Que la traza y el determinante sean invariantes explica por qué son iguales a la suma y al producto de los autovalores respectivamente: los autovalores tampoco dependen de la base, y en la base diagonal la traza es su suma y el determinante su producto.
La diagonalización de la clase 126 es el caso particular en que la nueva base está formada por autovectores y A' resulta diagonal. No siempre existe esa base —hay matrices no diagonalizables— pero para las simétricas sí, y siempre ortonormal.
Cambio de base con P y su inversa.
P = [[1, 1], P⁻¹ = [[0.5, 0.5],
[1,−1]] [0.5, −0.5]]
P·P⁻¹ = I ✓
v = (3,1) en base canónica
coordenadas nuevas: P⁻¹v = (2, 1)
vuelta: P·(2,1) = (3,1) ✓
Semejanza: A' = P⁻¹AP
misma transformación, otra representación
mismos autovalores, traza y determinanteMatriz de cambio de base y su inversa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 122Diagonalización, análisis de sistemas dinámicos, cambio de sistema de referencia y reducción de una forma cuadrática a ejes principales.
9781733146678 verificado en International ISBN Agency (2026-08-19).Una transformación es lineal si preserva sumas y escalados; sus columnas son las imágenes de la base.
T(u+v) = T(u) + T(v)
T(ku) = k·T(u)
T(0) = 0 (condición necesaria)Una transformación lineal es la que respeta la estructura del espacio vectorial: transformar una suma es sumar las transformaciones, y transformar un múltiplo es multiplicar la transformación. Ambas condiciones juntas equivalen a preservar combinaciones lineales.
De ahí se deduce inmediatamente que T(0) = 0. Esa condición necesaria es la que excluye la traslación: mover el origen no es una transformación lineal, y por eso las coordenadas homogéneas de la clase 073 tuvieron que ampliar la dimensión.
El resultado que hace todo esto operativo es que toda transformación lineal está determinada por lo que hace con los vectores de la base. Si se sabe a dónde va cada eᵢ, se sabe a dónde va cualquier vector, porque todo vector es combinación de la base. Y esas imágenes son precisamente las columnas de la matriz.
La consecuencia práctica al leer código: para entender qué hace una matriz de pesos, mirar sus columnas dice a dónde manda cada entrada; mirar sus filas dice de qué depende cada salida. Las dos lecturas son útiles y responden preguntas distintas.
Verificar linealidad de una escala.
A = [[2,0],[0,3]] (escala x2 en x, x3 en y)
u = (1,2), v = (3,−1), k = 4
Aditividad:
A(u+v) = A(4,1) = (8,3)
Au + Av = (2,6) + (6,−3) = (8,3) ✓
Homogeneidad:
A(4u) = A(4,8) = (8,24)
4·Au = 4·(2,6) = (8,24) ✓
T(0) = (0,0) ✓
Columnas de A: (2,0) y (0,3)
son las imágenes de e₁ y e₂Una transformación lineal preserva sumas y escalados.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | aditiva, homogenea, T(0)=0 |
compmath run 123Capas densas, transformaciones geométricas, filtros lineales y cualquier operación que deba conmutar con la suma de sus entradas.
Lo que no llega a la imagen se pierde en el núcleo: rango más nulidad es el número de columnas.
núcleo = {x : Ax = 0}
imagen = espacio columna
rango + nulidad = nEl núcleo de una transformación es el conjunto de vectores que manda al cero, y la imagen es el conjunto de vectores alcanzables. Ambos son subespacios, y el teorema del rango-nulidad los relaciona: la suma de sus dimensiones es el número de columnas.
La lectura es de conservación: cada dimensión de entrada o bien sobrevive en la imagen o bien colapsa en el núcleo. No hay una tercera opción. Si una transformación de ℝ³ en ℝ² tiene rango 2, su núcleo tiene dimensión 1: hay una recta entera de vectores distintos que producen la misma salida.
Esa pérdida es irreversible. Si el núcleo no es trivial, la transformación no es inyectiva y no se puede invertir: dada una salida, no se sabe de qué entrada vino. Es la versión lineal de la inyectividad de la clase 086, y es la razón por la que una capa que reduce dimensión pierde información necesariamente.
El núcleo también describe la no unicidad de la solución de un sistema: si x₀ resuelve Ax = b, entonces x₀ + k también lo resuelve para cualquier k del núcleo. Por eso un sistema con núcleo no trivial tiene infinitas soluciones, y por eso la pseudoinversa (clase 134) elige entre ellas la de norma mínima.
Núcleo e imagen de una matriz 2×3 de rango 1.
A = [[1, 2, 3],
[2, 4, 6]] (fila2 = 2·fila1)
rango = 1 (dimensión de la imagen)
columnas = 3
nulidad = 3 − 1 = 2 ✓ teorema
Un vector del núcleo: (2, −1, 0)
A·(2,−1,0) = (2−2+0, 4−4+0) = (0,0) ✓
Consecuencia: A no es inyectiva.
Infinitos vectores distintos dan la misma salida.Núcleo, imagen y teorema del rango-nulidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | columnas, rango_(dim_imagen), nulidad_(dim_nucleo), rango+nulidad |
| Comprobaciones (1) | teorema_verificado |
compmath run 124Unicidad de soluciones, pérdida de información en capas con reducción de dimensión, análisis de identificabilidad de modelos y espacios nulos en optimización con restricciones.
9781733146678 verificado en International ISBN Agency (2026-08-19).Un autovector es una dirección que la transformación solo escala; su factor es el autovalor.
Av = λv, v ≠ 0
Σλᵢ = tr(A), Πλᵢ = det(A)Casi todo vector cambia de dirección al aplicarle una transformación. Los autovectores son las excepciones: direcciones que solo se estiran o encogen, con factor el autovalor. Encontrarlas es encontrar los ejes naturales de la transformación.
Las dos identidades que conectan autovalores con invariantes son muy útiles como verificación: su suma es la traza y su producto el determinante. Comprobarlas cuesta nada y detecta errores de cálculo de inmediato, que es por lo que el laboratorio las incluye.
Para matrices simétricas —el caso que más importa aquí— los autovalores son reales y los autovectores ortogonales. Ese resultado, el teorema espectral, no vale para matrices generales: una rotación en el plano no tiene autovectores reales, porque ninguna dirección se conserva. Sus autovalores son complejos, y su parte imaginaria codifica el ángulo.
El método de cálculo del motor es la iteración de Jacobi, que anula sistemáticamente los elementos fuera de la diagonal mediante rotaciones. Es estable, converge siempre para simétricas y es fácil de leer, aunque no sea el más rápido. En la práctica profesional se usa el algoritmo QR con desplazamientos.
Autovalores de una matriz simétrica 2×2.
A = [[4, 1],
[1, 3]]
autovalores: λ₁ = 4.6180, λ₂ = 2.3820
autovector dominante: (0.8507, 0.5257)
Verificación Av = λv:
A·v = (3.9284, 2.4272)
λ₁·v = (3.9284, 2.4272) ✓
Invariantes:
suma 4.6180 + 2.3820 = 7 = tr(A) ✓
producto 4.6180 · 2.3820 = 11 = det(A) ✓Autovalores: direcciones que la transformación solo escala.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | Av=λv, traza_es_suma_de_autovalores, det_es_producto_de_autovalores |
compmath run 125PCA, análisis de estabilidad de sistemas dinámicos, PageRank, modos de vibración y curvatura del Hessiano en optimización.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781733146678 verificado en International ISBN Agency (2026-08-19).Diagonalizar es elegir la base donde la transformación solo escala, y ahí las potencias son triviales.
A = PDP⁻¹, D diagonal de autovalores
simétrica: A = QDQᵀ con Q ortogonal
Aᵏ = PDᵏP⁻¹Si una matriz tiene una base completa de autovectores, se puede escribir como PDP⁻¹ con D diagonal. Esa factorización es un cambio de base: pasar a la base de autovectores, escalar cada eje por su autovalor y volver.
La ganancia práctica más visible está en las potencias. A¹⁰⁰ = PD¹⁰⁰P⁻¹, y elevar una diagonal a la centésima es elevar sus entradas. De multiplicar cien matrices se pasa a elevar n números. Es lo que permite analizar el comportamiento a largo plazo de una cadena de Markov (clase 199) sin simularla.
Para matrices simétricas el resultado es aún mejor: la base de autovectores puede elegirse ortonormal, así que P es ortogonal y P⁻¹ = Pᵀ. La factorización queda A = QDQᵀ, sin necesidad de invertir nada. Es el teorema espectral, y es la razón por la que las matrices simétricas son tan cómodas.
No toda matriz es diagonalizable. Las que tienen autovalores repetidos sin suficientes autovectores independientes no lo son, y para ellas existe la forma de Jordan. En la práctica numérica ese caso es inestable y se prefiere la SVD, que siempre existe.
Diagonalizar una simétrica y elevarla a la décima.
A = [[4,1],[1,3]]
D = diag(4.6180, 2.3820)
Q = matriz ortogonal de autovectores
QDQᵀ reconstruye A ✓
A¹⁰ vía diagonalización:
Q·diag(4.6180¹⁰, 2.3820¹⁰)·Qᵀ
= [[ 4 259 552, 2 632 158],
[ 2 632 158, 1 627 394]]
Coste: 2 exponenciaciones frente a 10 productos de matricesA = PDP⁻¹: la base donde la transformación solo escala.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | reconstruccion_ok |
compmath run 126Potencias de matrices, cadenas de Markov, análisis modal, PCA y ecuaciones diferenciales lineales.
9781733146678 verificado en International ISBN Agency (2026-08-19).9781421407944 verificado en International ISBN Agency (2026-08-19).Definida positiva significa todos los autovalores positivos, y equivale a que xᵀAx sea siempre positivo.
A ≻ 0 ⟺ xᵀAx > 0 para todo x ≠ 0 ⟺ todos los λᵢ > 0
criterio de Sylvester: todos los menores principales positivosUna matriz simétrica es definida positiva si su forma cuadrática es siempre positiva salvo en el origen. Las tres caracterizaciones —forma cuadrática, autovalores y menores principales— son equivalentes, y cada una es la más cómoda en un contexto distinto.
Esta propiedad es la que hace «bien portados» a los objetos donde aparece. Una matriz de covarianza es siempre semidefinida positiva, porque su forma cuadrática es la varianza de una combinación lineal, que no puede ser negativa. Un Hessiano definido positivo en un punto crítico garantiza que es un mínimo (clase 169). Una matriz de Gram de un kernel válido debe ser semidefinida positiva, y esa es la condición de Mercer (clase 290).
La distinción entre definida y semidefinida importa: semidefinida permite autovalores nulos, lo que significa direcciones planas. Una covarianza semidefinida pero no definida indica que hay una combinación lineal de las variables con varianza cero, es decir, dependencia lineal exacta entre features.
Numéricamente, la comprobación robusta no es calcular autovalores sino intentar la factorización de Cholesky: existe si y solo si la matriz es definida positiva, y cuesta la mitad que una LU. Es lo que hacen las bibliotecas para comprobar la condición.
Una definida positiva y una indefinida.
A = [[4,1],[1,3]] autovalores 4.618, 2.382 → todos > 0 ✓ definida positiva
B = [[1,2],[2,1]] autovalores 3, −1 → signos mixtos ✗ indefinida
Forma cuadrática con x = (1,−1):
xᵀBx = 1 − 2 − 2 + 1 = −2 < 0 ✗ confirma que B no es definida positiva
Criterio de Sylvester para A:
menor 1×1: 4 > 0 ✓
menor 2×2: det = 11 > 0 ✓Definida positiva: todos los autovalores positivos, xᵀAx > 0.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | xᵀBx_con_x=(1,-1) |
| Comprobaciones (2) | todos_positivos, criterio_de_Sylvester_A |
compmath run 127Matrices de covarianza, condición de mínimo en optimización, kernels válidos, métodos de Newton y muestreo de gaussianas multivariantes por Cholesky.
9780511804441 verificado en International ISBN Agency (2026-08-19).9781283741392 verificado en International ISBN Agency (2026-08-19).Una forma cuadrática tiene curvas de nivel elípticas cuando su matriz es definida positiva, y los ejes son los autovectores.
q(x) = xᵀAx
∇q = 2Ax (A simétrica)
máx y mín sobre ‖x‖=1: mayor y menor autovalorUna forma cuadrática es un polinomio homogéneo de grado dos escrito matricialmente. Su geometría la determinan los autovalores de A: si todos son positivos, las curvas de nivel son elipses; si hay signos mixtos, hiperbolas; si alguno es cero, la forma es degenerada en esa dirección.
Los ejes de las elipses son los autovectores y sus longitudes dependen de los autovalores. Cuanto más dispares sean los autovalores, más alargadas son las elipses, y esa excentricidad es exactamente el número de condición. Ese es el vínculo entre álgebra lineal y velocidad de convergencia: el descenso de gradiente zigzaguea en valles alargados (clase 244).
El gradiente de una forma cuadrática es 2Ax cuando A es simétrica, y ese es el ejemplo canónico de derivada matricial (clase 177). Igualar a cero da Ax = 0, lo que confirma que el único punto crítico de una forma definida positiva es el origen, y es un mínimo.
Los valores extremos sobre la esfera unitaria son el mayor y el menor autovalor, resultado conocido como cociente de Rayleigh. Es lo que hace que la primera componente principal maximice la varianza proyectada (clase 135): maximizar xᵀΣx con ‖x‖=1 da el autovector dominante.
Forma cuadrática con matriz definida positiva.
A = [[4,1],[1,3]]
q(x) = 4x₁² + 2x₁x₂ + 3x₂²
valores en cuatro direcciones unitarias:
(1,0) → 4
(0,1) → 3
(1,1) → 10
(1,−1) → 6
Extremos sobre ‖x‖ = 1:
mínimo = λ_min = 2.3820
máximo = λ_max = 4.6180
Gradiente en (1,1): 2A(1,1) = (10, 8)
Curvas de nivel: elipses (A es definida positiva)La forma cuadrática xᵀAx y sus curvas de nivel.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | minimo_en_la_esfera_unitaria, maximo_en_la_esfera_unitaria |
| Comprobaciones (0) | — |
compmath run 128Función objetivo de mínimos cuadrados, energía en física, análisis de curvatura y diagnóstico de velocidad de convergencia en optimización.
9780387400655 verificado en International ISBN Agency (2026-08-19).9781733146678 verificado en International ISBN Agency (2026-08-19).LU factoriza una vez y resuelve muchos sistemas: O(n³) una sola vez, O(n²) por cada b.
A = LU
resolver: Ly = b (hacia delante), luego Ux = y (hacia atrás)
det(A) = Π uᵢᵢLa factorización LU descompone una matriz en el producto de una triangular inferior con unos en la diagonal y una triangular superior. No es un algoritmo nuevo: es la eliminación de Gauss guardando los multiplicadores en lugar de descartarlos.
Su valor está en la reutilización. Factorizar cuesta O(n³/3), pero una vez hecho, resolver Ax = b para cada nuevo b cuesta solo O(n²): dos sustituciones triangulares. Si hay que resolver mil sistemas con la misma matriz —caso frecuente en simulación y en métodos implícitos— la diferencia es de tres órdenes de magnitud.
Como subproducto, el determinante sale gratis: es el producto de la diagonal de U, corregido por el signo de los intercambios de fila. Calcularlo así cuesta O(n³) en lugar del O(n!) de la definición de Laplace.
La versión sin pivoteo que implementa el motor —Doolittle— falla si aparece un pivote nulo, y es numéricamente frágil con pivotes pequeños. Las bibliotecas reales usan LU con pivoteo parcial (PA = LU), y por eso scipy.linalg.lu devuelve también una matriz de permutación.
Factorizar una matriz 2×2.
A = [[4,3],[6,3]]
L = [[1, 0], U = [[4, 3],
[1.5, 1]] [0, −1.5]]
L·U = [[4,3],[6,3]] = A ✓
det(A) = 4 · (−1.5) = −6 ✓
Coste:
factorizar: O(n³/3)
cada sistema adicional: O(n²)LU: factorizar una vez, resolver muchos sistemas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | det_como_producto_de_U |
| Comprobaciones (1) | reconstruccion_ok |
compmath run 129Solvers de sistemas lineales, métodos implícitos en EDO, simulación con la misma matriz y muchos lados derechos, y cálculo eficiente de determinantes.
9781421407944 verificado en International ISBN Agency (2026-08-19).scipy.linalg.lu — documentación de la herramienta que ejecuta el laboratorio · URL de la fuente primaria comprobada en SciPy developers (2026-08-19).QR produce una base ortonormal del espacio columna y es la vía estable para mínimos cuadrados.
A = QR, QᵀQ = I, R triangular superior
resolver mínimos cuadrados: Rx = QᵀbLa factorización QR escribe una matriz como el producto de una ortogonal y una triangular superior. Las columnas de Q son una base ortonormal del espacio columna de A, obtenida ortonormalizando sus columnas.
Su importancia es numérica. Resolver mínimos cuadrados por las ecuaciones normales exige formar AᵀA, lo que eleva al cuadrado el número de condición (clase 112). Con QR no hace falta: el problema se reduce a Rx = Qᵀb, una sustitución triangular, y la condición se conserva. La diferencia es la que separa seis dígitos correctos de doce.
El método de Gram-Schmidt que implementa el motor es el más legible pero no el más estable: la ortogonalidad se degrada con matrices mal condicionadas. Las bibliotecas usan reflexiones de Householder, que son ortogonales exactas salvo redondeo. La versión «modificada» de Gram-Schmidt es un punto intermedio.
QR también es la base del algoritmo estándar para calcular autovalores: iterar A ← RQ converge a una forma triangular cuya diagonal son los autovalores. Es uno de los algoritmos más influyentes del siglo XX.
QR de una matriz 3×2.
A = [[1,1],
[1,0],
[0,1]]
Q (3×2, columnas ortonormales):
[[0.7071, 0.4082],
[0.7071, −0.4082],
[0, 0.8165]]
R = [[1.4142, 0.7071],
[0, 1.2247]]
QᵀQ = I ✓ ortonormal
QR = A ✓ reconstruye
R triangular superior ✓QR por Gram-Schmidt: base ortonormal del espacio columna.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | Q_es_ortonormal, R_es_triangular_superior |
compmath run 130Mínimos cuadrados estables, cálculo de autovalores por el algoritmo QR, ortonormalización de bases y regresión numéricamente robusta.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781421407944 verificado en International ISBN Agency (2026-08-19).Mínimos cuadrados es la proyección de b sobre el espacio columna, y su residuo es ortogonal a él.
min ‖Ax − b‖²
ecuaciones normales: AᵀAx = Aᵀb
residuo ortogonal: Aᵀ(Ax − b) = 0Cuando un sistema tiene más ecuaciones que incógnitas, en general no hay solución exacta. Mínimos cuadrados busca la que minimiza la norma del residuo, y esa solución tiene una caracterización geométrica limpia: es la proyección ortogonal de b sobre el espacio columna de A (clase 119).
Derivar el objetivo ‖Ax − b‖² e igualar a cero da directamente las ecuaciones normales. La condición de ortogonalidad del residuo no es un requisito adicional: es equivalente a que el gradiente se anule. Álgebra y geometría dicen lo mismo.
Por qué se minimiza el cuadrado del residuo y no su valor absoluto tiene dos razones. La analítica: el cuadrado es derivable en todas partes y da solución cerrada, mientras que el valor absoluto exige programación lineal. Y la estadística: bajo error gaussiano, minimizar el error cuadrático es maximizar la verosimilitud (clase 215). No es una elección arbitraria, es la consecuencia de un supuesto.
La contrapartida es la sensibilidad a valores atípicos: elevar al cuadrado da mucho peso a los errores grandes. Cuando eso es un problema, se usan pérdidas robustas como Huber (clase 304), a costa de perder la solución cerrada.
Ajustar una recta a cinco puntos.
datos: (0,1.0) (1,3.1) (2,4.9) (3,7.2) (4,8.9)
A = [[1,0],[1,1],[1,2],[1,3],[1,4]]
b = (1.0, 3.1, 4.9, 7.2, 8.9)
Ecuaciones normales AᵀA x = Aᵀb:
intercepto = 1.02, pendiente = 2.00
residuos: (−0.02, 0.08, −0.13, 0.16, −0.09)
SSE = 0.058
Verificación: Aᵀ·residuo = (0, 0) ✓ ortogonalMínimos cuadrados por ecuaciones normales.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | intercepto, pendiente, SSE |
| Comprobaciones (1) | residuo_ortogonal_a_las_columnas |
compmath run 131Regresión lineal, calibración de sensores, ajuste de curvas, estimación de parámetros y resolución de sistemas sobredeterminados.
9781611971484 verificado en International ISBN Agency (2026-08-20).9781733146678 verificado en International ISBN Agency (2026-08-19).La SVD existe para toda matriz y de ella se leen rango, condición y estructura.
A = UΣVᵀ
σᵢ = √(autovalores de AᵀA)
κ(A) = σ_max / σ_minLa descomposición en valores singulares escribe cualquier matriz —cuadrada o no, invertible o no— como el producto de una rotación, un escalado por ejes y otra rotación. Esa universalidad es lo que la hace la herramienta más útil del álgebra lineal aplicada: donde la diagonalización falla, la SVD funciona.
Los valores singulares son las cantidades por las que la matriz estira cada dirección principal, ordenados de mayor a menor. Su lectura es directa: el mayor es la norma espectral de la matriz, el número de no nulos es el rango, y el cociente entre el mayor y el menor es el número de condición. Tres diagnósticos de una sola descomposición.
El número de condición es el indicador correcto de mal condicionamiento, no el determinante (clase 117). Una matriz puede tener determinante minúsculo y condición 1 —si está simplemente escalada— o determinante razonable y condición 10¹² —si tiene una dirección casi degenerada—. Solo el segundo caso es problemático.
El rango numérico se define con la SVD y una tolerancia: cuántos valores singulares superan un umbral relativo al mayor. Es la definición que usan las bibliotecas, porque en datos reales el rango exacto casi siempre es completo por culpa del ruido, aunque la estructura sea de rango bajo.
SVD de una matriz 2×2.
A = [[3,0],
[4,5]]
valores singulares: σ₁ = 6.7082, σ₂ = 2.2361
norma espectral = σ₁ = 6.7082
número de condición = 6.7082/2.2361 = 3.0
rango numérico = 2 (ambos σ > tolerancia)
A = UΣVᵀ reconstruye la matriz ✓
Existe para TODA matriz, incluso rectangular y singular.SVD: rotar, escalar, rotar. Existe siempre.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | sigma1_es_la_norma_espectral, numero_de_condicion, rango_numerico |
| Comprobaciones (1) | existe_para_toda_matriz |
compmath run 132Diagnóstico de condicionamiento, rango numérico, pseudoinversa, compresión, PCA, recomendación por factorización y regularización truncada.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781421407944 verificado en International ISBN Agency (2026-08-19).Truncar la SVD da la mejor aproximación de rango k que existe, no una buena.
Aₖ = Σᵢ₌₁ᵏ σᵢ uᵢ vᵢᵀ
‖A − Aₖ‖_F = √(Σᵢ₌ₖ₊₁ σᵢ²)
energía retenida = Σᵢ₌₁ᵏ σᵢ² / Σ σᵢ²El teorema de Eckart-Young (1936) es de los resultados más fuertes del álgebra lineal aplicada: entre todas las matrices de rango k, la que mejor aproxima a A es la SVD truncada, y el error cometido es exactamente la raíz de la suma de los cuadrados de los valores singulares descartados.
«La mejor» es una afirmación de optimalidad, no una recomendación heurística. No existe ninguna otra matriz de rango k más cercana, ni en norma de Frobenius ni en norma espectral. Eso convierte la truncación SVD en el estándar contra el que se comparan todos los métodos de compresión y reducción de dimensionalidad.
La energía retenida —la fracción de la suma de cuadrados de los valores singulares que conservan los k primeros— es el criterio habitual para elegir k. En PCA se llama «varianza explicada» y es exactamente la misma cantidad. Un salto brusco en el espectro indica el rango natural de los datos.
El ahorro de almacenamiento es real: guardar Aₖ requiere k(m + n + 1) números en lugar de mn. Para una matriz 1000×1000 aproximada con rango 10, son 20 010 números frente a un millón. Esa es la aritmética que hace viable LoRA, que adapta modelos gigantes añadiendo matrices de rango muy bajo.
Aproximación de rango 1 de una matriz 2×2.
A = [[4, 0],
[3,−5]]
valores singulares: σ₁ = 6.0644, σ₂ = 3.2977
Aproximación de rango 1:
error de Frobenius = 3.2977 = σ₂ ✓ coincide con la teoría
energía retenida = σ₁²/(σ₁²+σ₂²) = 77.2 %
Teorema de Eckart-Young:
ninguna otra matriz de rango 1 se acerca más.Aproximación de rango 1 y energía retenida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | error_de_frobenius, error_teorico_sigma2, energia_retenida_% |
| Comprobaciones (0) | — |
compmath run 133Compresión de imágenes, PCA, sistemas de recomendación por factorización, eliminación de ruido y LoRA.
10.1007/bf02288367 verificado en Crossref (2026-08-19).10.48550/arxiv.2106.09685 verificado en DataCite (2026-08-19).La pseudoinversa generaliza la inversa y da la solución de mínima norma.
A⁺ = VΣ⁺Uᵀ
sobredeterminado: A⁺b = solución de mínimos cuadrados
indeterminado: A⁺b = solución de norma mínimaLa pseudoinversa de Moore-Penrose extiende la inversa a matrices que no la tienen: rectangulares o singulares. Se construye desde la SVD invirtiendo los valores singulares no nulos y dejando en cero los demás.
Su comportamiento depende del caso. Si el sistema está sobredeterminado —más ecuaciones que incógnitas—, A⁺b da la solución de mínimos cuadrados. Si está indeterminado —infinitas soluciones—, da la de norma mínima entre todas ellas. Esa elección no es arbitraria: es la solución sin componente en el núcleo, la más «económica».
El detalle numérico que importa: al invertir los valores singulares, los más pequeños se convierten en los más grandes y amplifican el ruido. Por eso la pseudoinversa práctica trunca: descarta los valores singulares por debajo de una tolerancia relativa. Ese truncamiento es una forma de regularización, emparentada con Ridge.
Cuando A tiene rango completo por columnas, A⁺ = (AᵀA)⁻¹Aᵀ y coincide con las ecuaciones normales. La versión SVD es preferible porque funciona también cuando el rango es deficiente, donde las ecuaciones normales fallan.
Pseudoinversa de un sistema sobredeterminado.
A = [[1,0], b = (1, 2, 4)
[1,1],
[1,2]]
3 ecuaciones, 2 incógnitas → sobredeterminado
A⁺ = [[ 0.8333, 0.3333, −0.1667],
[−0.5, 0, 0.5 ]]
A⁺b = (0.8333, 1.5)
Coincide con las ecuaciones normales ✓
A⁺A = I (rango completo por columnas) ✓Pseudoinversa de Moore-Penrose para sistemas sobredeterminados.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | sistema_sobredeterminado, coinciden |
compmath run 134Mínimos cuadrados con rango deficiente, regularización truncada, cinemática inversa en robótica y resolución de sistemas indeterminados.
numpy.linalg.pinv — Álgebra lineal: el tema de esta clase · URL de la fuente primaria comprobada en NumPy developers (2026-08-19).PCA es la autodescomposición de la covarianza, y equivale a la SVD de los datos centrados.
Σ = XᵀX/(n−1) con X centrada
componentes = autovectores de Σ
varianza explicada = λᵢ / ΣλⱼPCA busca las direcciones de máxima varianza de un conjunto de datos. La primera componente es la dirección en la que los datos más se dispersan; la segunda, la de máxima varianza entre las ortogonales a la primera, y así sucesivamente. Esas direcciones son los autovectores de la matriz de covarianza, y sus autovalores son las varianzas correspondientes.
Centrar los datos es obligatorio, no un preprocesado opcional. Sin centrar, la primera componente apunta hacia la media en lugar de hacia la dirección de máxima dispersión, y el resultado carece de sentido. Es el error más frecuente al implementar PCA a mano.
Escalar es otra decisión, y esta sí es opcional pero consecuente. Si las variables están en unidades distintas —euros y kilómetros—, la de mayor magnitud domina la covarianza y la primera componente la sigue. Estandarizar antes de PCA equivale a hacer PCA sobre la matriz de correlación en lugar de sobre la de covarianza.
PCA y SVD son el mismo cálculo. La SVD de la matriz de datos centrados da directamente las componentes en V y las varianzas en σ²/(n−1), sin necesidad de formar la covarianza —que, como toda matriz XᵀX, eleva al cuadrado el número de condición—. Por eso las implementaciones profesionales usan SVD.
Una advertencia que conviene repetir: PCA es no supervisado. Maximiza varianza, no capacidad discriminativa, y puede descartar precisamente la dirección que separa las clases. Para eso está el análisis discriminante lineal, que sí usa las etiquetas.
PCA sobre diez observaciones bidimensionales.
medias: (1.81, 1.91)
matriz de covarianza:
[[0.6166, 0.6154],
[0.6154, 0.7166]]
autovalores: 1.2840, 0.0491
varianza explicada por PC1: 96.32 %
PC1 = (0.6779, 0.7352)
Proyecciones (primeras 5):
0.8280, −1.7776, 0.9922, 0.2742, 1.6759
Conclusión: los datos son casi unidimensionales.PCA como autodescomposición de la covarianza.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | observaciones, varianza_explicada_PC1_% |
| Comprobaciones (1) | PCA_es_SVD_de_los_datos_centrados |
compmath run 135Reducción de dimensionalidad, visualización, eliminación de ruido, compresión y detección de multicolinealidad.
10.1007/b98835 verificado en Crossref (2026-08-19).10.48550/arxiv.1404.1100 verificado en DataCite (2026-08-19).El producto de Kronecker construye matrices en bloques cuyo rango es el producto de los rangos.
(A ⊗ B) shape = (m₁m₂, n₁n₂)
rango(A ⊗ B) = rango(A) · rango(B)
(A⊗B)(C⊗D) = (AC)⊗(BD)El producto de Kronecker sustituye cada entrada de A por esa entrada multiplicada por toda la matriz B, generando una matriz en bloques mucho mayor. Su interés es que estructura: representa operaciones que actúan de forma independiente sobre dos factores de un problema.
Aparece de forma natural en problemas separables. Discretizar una ecuación en derivadas parciales sobre una malla rectangular produce matrices de Kronecker, porque el operador actúa por separado en cada dirección. Lo mismo ocurre al modelar un sistema compuesto por dos subsistemas independientes.
Las identidades que cumple son las que lo hacen útil computacionalmente: el rango del producto es el producto de los rangos, y (A⊗B)(C⊗D) = (AC)⊗(BD). Esta última permite operar con los factores pequeños en lugar de con la matriz gigante, ahorrando memoria y tiempo.
En machine learning aparece en K-FAC, un método de optimización de segundo orden que aproxima el Hessiano de una red como un producto de Kronecker de dos matrices pequeñas. Sin esa estructura, el Hessiano de una capa con un millón de parámetros sería una matriz de 10¹² entradas: inmanejable.
Kronecker de dos matrices 2×2.
A = [[1,2],[3,4]] B = [[0,5],[6,7]]
A⊗B (4×4):
[[ 0, 5, 0, 10],
[ 6, 7, 12, 14],
[ 0, 15, 0, 20],
[18, 21, 24, 28]]
shape: (2·2, 2·2) = (4,4) ✓
rango(A⊗B) = rango(A)·rango(B) = 2·2 = 4 ✓Producto de Kronecker: estructura en bloques.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | rango, rango_A_por_rango_B |
| Comprobaciones (0) | — |
compmath run 136Discretización de PDE separables, sistemas compuestos, K-FAC en optimización de segundo orden y grafos producto.
10.48550/arxiv.1503.05671 verificado en DataCite (2026-08-19).El orden de un tensor es su número de índices; el shape y el orden de aplanado determinan cómo se recorre.
orden = número de índices
índice lineal (row-major) = i·(d₂d₃) + j·d₃ + k
lote de imágenes: (N, C, H, W)Un tensor generaliza escalar, vector y matriz a un número arbitrario de índices. En computación no es más que un array multidimensional con un shape, y el trabajo real está en no perderse entre los índices.
El orden de aplanado determina cómo se recorre en memoria. En row-major —el de C, Python y NumPy por defecto— el último índice varía más rápido; en column-major —el de Fortran, MATLAB y las rutinas BLAS— es el primero. Recorrer en el orden equivocado destruye la localidad de caché y puede costar un orden de magnitud de rendimiento sin cambiar el resultado.
Las convenciones de shape importan porque no son universales. Un lote de imágenes es (N, C, H, W) en PyTorch y (N, H, W, C) en TensorFlow. Confundirlas produce errores silenciosos: el código corre y el modelo no aprende. Anotar el shape esperado en cada punto del código es la práctica que evita esa clase de bug.
Las operaciones de reordenamiento —transpose, permute, reshape, view— no mueven datos necesariamente: cambian la interpretación de los índices. Esa distinción entre vista y copia es la que explica los errores de contigüidad que aparecen al encadenar operaciones en PyTorch.
Tensor de orden 3 y su aplanado.
shape (2,2,2), 8 elementos
T[0] = [[0,1],[2,3]]
T[1] = [[4,5],[6,7]]
aplanado row-major: [0,1,2,3,4,5,6,7]
elemento T[1][0][1] = 5
índice lineal: 1·4 + 0·2 + 1 = 5 ✓
Convenciones reales:
PyTorch: (N, C, H, W)
TensorFlow: (N, H, W, C)Orden, shape y reordenamiento de índices.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | orden, elementos, elemento_[1][0][1], indice_lineal |
| Comprobaciones (0) | — |
compmath run 137Representación de lotes de imágenes, secuencias y vídeo; interoperabilidad entre frameworks; optimización de recorridos por localidad de caché.
10.1137/07070111x verificado en Crossref (2026-08-19).Broadcasting alinea shapes por la derecha y estira las dimensiones de tamaño 1 sin copiar memoria.
las dimensiones se alinean por la derecha
compatibles si son iguales o alguna vale 1
(2,3) + (3,) → (2,3); (2,3) + (2,1) → (2,3)Broadcasting es la regla que permite operar arrays de shapes distintos sin escribir bucles ni replicar datos. Las dimensiones se alinean por la derecha y se consideran compatibles si coinciden o si una de ellas vale 1; en ese caso, la de tamaño 1 se «estira» conceptualmente.
La clave es que el estiramiento no copia memoria: la implementación recorre el array pequeño repetidamente con stride cero. Por eso sumar un vector de sesgos a una matriz de activaciones es prácticamente gratis, y por eso normalizar por columna no requiere construir una matriz de medias.
Las reglas son estrictas y su violación produce uno de dos resultados. El bueno: un error de shape que detiene el programa. El malo: una operación que «funciona» pero no es la pretendida, típicamente por confundir (n,) con (n,1). Un vector (3,) sumado a una matriz (3,3) se suma por filas; si se quería por columnas, hay que escribir (3,1) explícitamente.
Ese matiz es la fuente de un error clásico al calcular distancias o normalizaciones. La defensa es anotar los shapes y usar None/np.newaxis de forma explícita en lugar de confiar en que la regla haga lo esperado.
Sumar una fila y una columna a la misma matriz.
matriz shape (2,3): [[1,2,3],[4,5,6]]
+ fila shape (3,): [10,20,30]
alinea por la derecha: (2,3) y (3,) → (2,3)
resultado: [[11,22,33],[14,25,36]] suma por filas
+ columna shape (2,1): [[100],[200]]
(2,3) y (2,1) → (2,3)
resultado: [[101,102,103],[204,205,206]] suma por columnas
Incompatible: (2,3) + (2,) → errorBroadcasting: reglas de compatibilidad de shapes.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | no_copia_memoria |
compmath run 138Suma de sesgos, normalización por eje, cálculo de matrices de distancias, aplicación de máscaras y prácticamente cualquier operación vectorizada.
10.1038/s41586-020-2649-2 verificado en Crossref (2026-08-20).En notación de Einstein los índices repetidos se suman, y una sola expresión cubre producto, traza y contracción.
'ij,jk->ik' producto matricial
'ii->' traza
'ij,ij->' producto de Frobenius
'ij->ji' transposiciónLa notación de Einstein, introducida en 1916 para simplificar la escritura de la relatividad general, establece un convenio: los índices que aparecen repetidos se suman. Con esa única regla, operaciones que en notación matricial requieren nombres distintos se escriben de forma uniforme.
La implementación moderna, einsum, hace explícitos los índices de entrada y de salida. 'ij,jk->ik' dice: toma dos tensores con esos índices, suma sobre j —repetido— y deja i y k. Eso es el producto matricial. Cambiar la cadena a 'ij,ij->' da el producto de Frobenius, y a 'ij->ji', la transpuesta.
Su ventaja práctica es doble. Primero, legibilidad: en operaciones con tensores de orden 4 o 5 —habituales en atención multi-cabeza— la cadena de índices dice exactamente qué se contrae con qué, mientras que una secuencia de transpose, reshape y matmul no lo dice. Segundo, optimización: la implementación puede elegir el orden de contracción más barato, igual que el orden de evaluación de la clase 111.
La atención escalada se escribe en una línea con einsum: 'bqd,bkd->bqk' calcula todos los productos punto entre consultas y claves de un lote. Leer esa cadena es leer la operación.
Cinco operaciones con la misma notación.
A = [[1,2],[3,4]] B = [[5,6],[7,8]]
'ij,jk->ik' producto [[19,22],[43,50]]
'ii->' traza de A 5
'ij,ij->ij' Hadamard [[5,12],[21,32]]
'ij,ij->' Frobenius 70
'ij->ji' transpuesta [[1,3],[2,4]]
Una sola notación para todas.Notación de Einstein: índices repetidos se suman.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | 'ii->' (traza), 'ij,ij->' (Frobenius) |
| Comprobaciones (0) | — |
compmath run 139Atención multi-cabeza, contracciones tensoriales, operaciones por lotes y cualquier manipulación de tensores de orden alto.
einsum — Álgebra lineal: el tema de esta clase · URL de la fuente primaria comprobada en NumPy developers (2026-08-19).Comprimir con SVD es elegir cuántos valores singulares conservar y declarar el error que eso implica.
almacenamiento de rango k: k(m + n + 1) frente a mn
error = √(Σᵢ₌ₖ₊₁ σᵢ²)El capstone aplica la truncación SVD a una matriz y mide, para cada rango, tres cantidades: cuántos números hay que guardar, qué error se comete y qué fracción de la energía se retiene. Ese informe es la forma honesta de presentar una compresión: no «comprime bien», sino «con rango 2 el error de Frobenius es X y se retiene el Y % de la energía».
La matriz del ejemplo está construida para que dos de sus filas sean múltiplos de un mismo patrón, así que su rango efectivo es muy bajo y el primer valor singular concentra casi toda la energía. Eso es lo que ocurre en datos reales: las imágenes naturales, las matrices de valoraciones y las activaciones de una red tienen espectros que decaen rápido.
El ahorro se calcula sin ambigüedad. Guardar Aₖ requiere las k columnas de U, los k valores singulares y las k columnas de V: k(m + n + 1) números frente a mn. La compresión es rentable cuando k es pequeño frente a mn/(m+n).
La conexión con LoRA cierra la parte: en lugar de ajustar una matriz de pesos W de millones de parámetros, se le suma un producto BA de rango muy bajo. La justificación teórica es exactamente Eckart-Young: si la actualización necesaria tiene rango intrínsecamente bajo, una aproximación de rango bajo la captura casi por completo.
Informe de compresión de una matriz 4×4.
valores singulares: 96.28, 1.87, 0.0004, 0.0000
rango valores guardados error Frobenius energía retenida
1 9 1.8734 99.98 %
2 18 0.0004 100.00 %
3 27 0.0000 100.00 %
4 36 0.0000 100.00 %
matriz original: 16 valores
rango efectivo (σ > 1e−8): 3
Con rango 1 se guardan 9 números en lugar de 16
y se conserva el 99.98 % de la energía.Capstone: comprimir una matriz con SVD y medir la pérdida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | valores_originales, rango_efectivo |
| Comprobaciones (0) | — |
compmath run 140Compresión de imágenes y modelos, reducción de dimensionalidad, eliminación de ruido, recomendación por factorización y LoRA.
10.1007/bf02288367 verificado en Crossref (2026-08-19).10.1137/090771806 verificado en Crossref (2026-08-19).Límite, continuidad, derivada, reglas de derivación, Taylor, optimización de una variable, integral definida y teorema fundamental del cálculo.
El cálculo es el estudio del cambio, y su invención independiente por Newton y Leibniz en la década de 1660 es probablemente el acontecimiento más productivo de la historia de la matemática. Esta parte lo reconstruye con una orientación concreta: la derivada es la mejor aproximación lineal local, y la regla de la cadena es el mecanismo entero del entrenamiento de una red neuronal.
Las clases 141 a 143 tratan el límite y la continuidad. El límite responde a una pregunta que la aritmética no puede: qué valor «debería» tener una función donde no está definida. sin(x)/x no existe en cero y sin embargo tiene un límite perfectamente definido, y esa distinción entre valor y límite es la que hace posible definir la derivada.
Las clases 144 a 150 construyen la derivada y sus reglas. La más importante con diferencia es la regla de la cadena (147): derivar una composición es multiplicar las derivadas de sus piezas. Como una red neuronal es una composición de capas (clase 057), su gradiente es un producto de factores, uno por capa. Ese producto explica de golpe el desvanecimiento del gradiente, por qué ReLU funciona mejor que la sigmoide y por qué las conexiones residuales ayudan.
Las clases 151 y 152 introducen Taylor y la optimización de una variable. Taylor cambia una función difícil por un polinomio con error acotado, y es la base de los métodos de segundo orden, del análisis de convergencia y de la mitad de las aproximaciones que usa el análisis numérico. La condición f'(x) = 0 es el caso unidimensional de ∇f = 0, la condición de primer orden de toda la parte 12.
Las clases 153 a 158 desarrollan la integral como acumulación y el teorema fundamental, que establece que derivar e integrar son operaciones inversas. Ese teorema conecta dos ideas que nacieron separadas —la tangente y el área— y es el resultado que da nombre a la asignatura.
El cierre (159 y 160) pasa a la integración numérica, que es como se calcula en la práctica casi cualquier integral: no hay forma cerrada para e^(-x²) y sin embargo su integral es la que define la distribución normal. Trapecio y Simpson introducen el concepto de orden de convergencia, que reaparecerá en toda la parte 11.
Sin regla de la cadena no hay entrenamiento por gradiente; sin Taylor no hay métodos de segundo orden ni análisis de convergencia.
| Término | Definición | Clase |
|---|---|---|
| Antiderivada | Función cuya derivada es la dada. Está determinada salvo una constante aditiva. | 155 |
| Continuidad | f(a) existe, el límite existe y coinciden. Continua no implica derivable. | 143 |
| Criterio de la segunda derivada | En un punto crítico, f'' > 0 indica mínimo y f'' < 0 máximo. | 152 |
| Derivación implícita | Derivar una relación F(x,y)=0 sin despejar y, tratando y como función de x. | 150 |
| Derivada | Límite del cociente incremental. Es la pendiente de la mejor aproximación lineal local. | 144 |
| Diferencia central | (f(x+h) − f(x−h))/2h. Aproxima la derivada con error O(h²), un orden mejor que la diferencia adelantada. | 144 |
| Indeterminación | Forma como 0/0 o ∞/∞ que no determina el límite por sí sola; es de la expresión, no del límite. | 142 |
| Integración por partes | ∫u dv = uv − ∫v du. Es la regla del producto leída al revés. | 158 |
| Integral definida | Área con signo bajo la curva entre dos límites. Es aditiva y cambia de signo al invertir la orientación. | 154 |
| Límite | Valor al que se acerca una función cerca de un punto, exista o no la función en él. | 141 |
| Orden de convergencia | Exponente p tal que el error de un método cae como O(hᵖ). Trapecio es 2, Simpson es 4. | 159 |
| Punto crítico | Punto donde la derivada se anula. Puede ser máximo, mínimo o inflexión. | 152 |
| Regla de la cadena | (f∘g)' = f'(g(x))·g'(x). Es el mecanismo completo de backpropagation. | 147 |
| Regla del producto | (fg)' = f'g + fg'. No es el producto de las derivadas. | 146 |
| Serie de Taylor | Aproximación polinómica de una función alrededor de un punto, con error acotado por el término siguiente. | 151 |
| Suma de Riemann | Aproximación de una integral por rectángulos. Converge a la integral al refinar la partición. | 153 |
| Sustitución | Cambio de variable en una integral. Es la regla de la cadena leída al revés. | 157 |
| Teorema fundamental del cálculo | Derivar la integral de una función devuelve la función. Derivación e integración son inversas. | 156 |
Una función puede no estar definida en un punto y tener límite perfectamente definido en él.
lím(x→0) sin(x)/x = 1
el límite existe si los laterales coincidenEl límite responde a una pregunta que la evaluación directa no puede: ¿a qué valor se acerca f(x) cuando x se acerca a a, sin llegar nunca? Esa exclusión del punto es la clave: el límite no depende de f(a), y por eso existe aunque la función no esté definida allí.
sin(x)/x en cero es el ejemplo canónico. Sustituir da 0/0, que no es un número. Pero al acercarse, los valores tienden inequívocamente a 1, y ese límite es el que hace que la derivada del seno sea el coseno. Toda la trigonometría del cálculo descansa en él.
La definición formal —para todo ε existe un δ— tiene el orden de cuantificadores de la clase 083 y no es un capricho: δ puede depender de ε, y en la mayoría de los casos depende. Cambiar el orden daría la definición de continuidad uniforme, una condición estrictamente más fuerte.
Para que el límite exista, los límites laterales deben coincidir. Una función con un salto tiene ambos laterales pero distintos, y por tanto no tiene límite en ese punto. Comprobar los dos lados numéricamente, como hace el laboratorio, es la forma práctica de detectar discontinuidades.
Acercarse a cero por ambos lados.
f(x) = sin(x)/x (no definida en x = 0)
x f(x)
1.0 0.841471
0.1 0.998334
0.01 0.999983
0.001 0.99999983
1e−6 0.9999999999998
límite = 1
error en 1e−6: 1.67e−13
Por la izquierda: f(−1e−6) = 0.9999999999998
Los laterales coinciden → el límite existe ✓sin(x)/x cuando x→0: indeterminado en el punto, definido en el límite.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | limite, error_en_1e-6, por_la_izquierda |
| Comprobaciones (2) | definida_en_0, limites_laterales_coinciden |
compmath run 141Definición de derivada e integral, análisis de convergencia de sucesiones y series, comportamiento asintótico de algoritmos y estabilidad de métodos numéricos.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780471000051 verificado en International ISBN Agency (2026-08-19).Una indeterminación es una propiedad de la expresión, no del límite: casi siempre se resuelve reescribiéndola.
(x²−4)/(x−2) = x+2 para x ≠ 2
lím(x→2) = 4Formas como 0/0 o ∞/∞ se llaman indeterminadas porque no determinan el límite: hay ejemplos con esa forma cuyo límite es 0, otros con límite infinito y otros con cualquier valor intermedio. La forma no basta; hay que analizar la expresión concreta.
La técnica básica es reescribir. En (x²−4)/(x−2), factorizar el numerador permite cancelar el factor (x−2), que era el causante de la indeterminación. La función resultante, x+2, coincide con la original en todos los puntos salvo en x = 2, donde la original no existe. Como el límite ignora el punto, el límite de ambas es el mismo.
Ese es el patrón general: la indeterminación aparece porque la expresión escrita esconde una cancelación. Racionalizar, factorizar, dividir por la potencia dominante o usar una identidad son las técnicas habituales. Cuando ninguna funciona, L'Hôpital deriva numerador y denominador por separado —pero conviene usarla como último recurso, porque oculta la estructura del problema.
Hay una conexión directa con la parte 01: la cancelación catastrófica (clase 032) es el equivalente numérico de esta situación. La expresión √(x²+1) − x no es indeterminada en el sentido analítico, pero sufre el mismo problema estructural —una resta que anula dígitos— y se resuelve con la misma técnica: reescribirla.
Resolver una indeterminación 0/0 por factorización.
f(x) = (x² − 4)/(x − 2)
En x = 2: (4−4)/(2−2) = 0/0 indeterminado
Factorizar: (x−2)(x+2)/(x−2) = x+2 para x ≠ 2
lím(x→2) f(x) = 4
Comprobación numérica:
f(2.0001) = 4.0001
f(1.9999) = 3.9999
error respecto a 4: 1e−4 ✓Indeterminación 0/0 resuelta por factorización.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | limite_en_2, f(2.0001), f(1.9999), error |
| Comprobaciones (0) | — |
compmath run 142Cálculo de derivadas por definición, análisis asintótico y reescritura de expresiones numéricamente inestables.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780898718027, pendiente de resolver.Continuidad exige tres condiciones; ser continua no implica ser derivable.
f continua en a ⟺ f(a) existe, lím f existe, y coinciden
derivable ⟹ continua, pero no al revésLa continuidad es la ausencia de saltos, y su definición formal descompone esa idea en tres requisitos: que la función esté definida en el punto, que el límite exista y que ambos coincidan. Que sean tres y no uno permite clasificar las discontinuidades según cuál falla.
Una discontinuidad removible es aquella en la que el límite existe pero no coincide con el valor (o el valor no existe). Se «arregla» redefiniendo la función en ese punto, de ahí el nombre. Una discontinuidad de salto tiene límites laterales distintos y no se puede arreglar de ninguna forma.
La implicación «derivable implica continua» es cierta y su recíproca es falsa. |x| es continua en cero y no derivable, porque las pendientes laterales son −1 y +1. Ese contraejemplo tiene consecuencias prácticas: ReLU (clase 059) es exactamente ese caso, y su no derivabilidad en cero se resuelve por convenio.
Weierstrass construyó en 1872 una función continua en todo punto y derivable en ninguno, demostrando que la intuición geométrica —«una curva sin saltos tiene tangente casi siempre»— es falsa. Las trayectorias del movimiento browniano tienen esa misma propiedad, hecho relevante en la parte 17 al tratar ecuaciones diferenciales estocásticas.
Dos discontinuidades y una no derivabilidad.
Salto: f(x) = 0 si x<1, 1 si x≥1
lím izquierda = 0, lím derecha = 1
no coinciden → no continua ✗
Removible: g(x) = (x²−1)/(x−1) con g(1) = 5
límite = 2, valor asignado = 5
no coinciden → no continua ✗
se arregla redefiniendo g(1) = 2 ✓
Continua no derivable: |x| en 0
continua ✓
pendiente izquierda −1, derecha +1 ✗ no derivableLos tres requisitos de continuidad en un punto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | derivable_implica_continua |
compmath run 143Validez de teoremas que exigen continuidad, activaciones no derivables como ReLU, funciones de pérdida por tramos y detección de saltos en series temporales.
9780914098911 verificado en International ISBN Agency (2026-08-19).La derivada es la pendiente de la mejor recta que aproxima la función cerca de un punto.
f'(x) = lím(h→0) (f(x+h) − f(x))/h
diferencia central: (f(x+h) − f(x−h))/2h, error O(h²)La derivada nace de una pregunta física —¿cuál es la velocidad instantánea?— y se resuelve con un límite: la pendiente de la secante entre dos puntos, cuando esos puntos se juntan. El resultado es la pendiente de la tangente, y esa recta es la mejor aproximación lineal de la función cerca del punto.
Esa lectura, «mejor aproximación lineal», es más útil que «pendiente» porque se generaliza. En varias variables, la derivada es el gradiente y define el plano tangente (clase 166); en funciones vectoriales, es el Jacobiano. Siempre es lo mismo: el objeto lineal que mejor aproxima localmente.
Numéricamente, la diferencia central es superior a la adelantada. Su error es O(h²) en lugar de O(h), porque los términos de orden impar del desarrollo de Taylor se cancelan. Con h = 10⁻⁶, la central da unos 12 dígitos correctos y la adelantada unos 6.
Pero reducir h indefinidamente no mejora: por debajo de cierto valor, el error de redondeo de la resta —cancelación catastrófica, clase 032— domina sobre el error de truncamiento. Existe un h óptimo, aproximadamente √ε ≈ 1.5·10⁻⁸ para la central, y la clase 221 lo mide.
Derivada de x² en x = 3 por varios caminos.
cociente incremental (f(3+h)−f(3))/h:
h = 1.0 → 7.0
h = 0.1 → 6.1
h = 0.01 → 6.01
h = 1e−4 → 6.0001
derivada exacta (2x): 6.0
diferencia central con h = 1e−6: 6.0000000000
error de la central: 8.8e−11
La central es dos órdenes mejor que la adelantada.Derivada como límite del cociente incremental.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | punto, derivada_exacta_2x, diferencia_central, error_central |
| Comprobaciones (1) | la_central_es_de_orden_h² |
compmath run 144Verificación de gradientes analíticos (gradient checking), análisis de sensibilidad, métodos numéricos y cualquier cálculo de tasa instantánea de cambio.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).Las reglas de derivación se deducen del límite una vez y se aplican mecánicamente después.
(xⁿ)' = n·xⁿ⁻¹
(f + g)' = f' + g'
(c·f)' = c·f'
(c)' = 0Las reglas básicas convierten la derivación en un procedimiento mecánico. Cada una se demuestra una vez desde la definición por límite y luego se aplica sin volver a pensar en límites, que es exactamente el propósito de tener reglas.
La linealidad —la derivada de una suma es la suma de las derivadas, y las constantes salen fuera— es la propiedad que hace que la derivación sea un operador lineal. Eso importa más de lo que parece: permite derivar término a término cualquier polinomio, cualquier serie de potencias y cualquier combinación lineal de funciones.
La regla de la potencia, (xⁿ)' = n·xⁿ⁻¹, vale para todo exponente real, no solo natural. Su demostración para exponentes naturales usa el binomio de Newton; para exponentes reales necesita la definición exponencial de la clase 148.
La derivada de una constante es cero, y esa es la razón por la que la antiderivada no es única (clase 155): sumar cualquier constante no cambia la derivada. En optimización, ese hecho significa que desplazar la función objetivo verticalmente no cambia dónde está su mínimo, propiedad que se usa para estabilizar cálculos.
Cuatro derivadas verificadas numéricamente.
función punto numérica analítica coinciden
x³ 2 12.000000 3x² = 12 ✓
5x 7 5.000000 5 ✓
x³ + 5x 2 17.000000 3x²+5 = 17 ✓
constante 4 1 0.000000 0 ✓
Linealidad verificada:
(x³ + 5x)' = (x³)' + (5x)' = 12 + 5 = 17 ✓Reglas de potencia, suma y constante verificadas numéricamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 145Derivación de polinomios y modelos lineales, cálculo de gradientes analíticos y verificación de implementaciones de autodiferenciación.
9780914098911 verificado en International ISBN Agency (2026-08-19).9781285740621 verificado en International ISBN Agency (2026-08-19).La derivada de un producto no es el producto de las derivadas.
(fg)' = f'g + fg'
(f/g)' = (f'g − fg')/g²La regla del producto es contraintuitiva la primera vez y su demostración explica por qué: al incrementar x, cambian tanto f como g, y el cambio total del producto tiene dos contribuciones —una por cada factor— más un término de segundo orden que se anula en el límite.
Geométricamente, si f y g son los lados de un rectángulo, fg es su área. Al incrementar ambos lados, el área crece en dos franjas —f'g y fg'— más una esquina diminuta que es despreciable. Esa imagen hace la regla memorable sin memorizarla.
La regla del cociente se deduce de la del producto aplicada a f · g⁻¹, y su forma —numerador con resta, denominador al cuadrado— hay que respetarla en el orden: f'g − fg' y no al revés. Invertir el orden cambia el signo, error frecuente y silencioso.
En machine learning estas reglas aparecen cada vez que una función de pérdida es un producto o un cociente de términos. La derivada de la softmax, del cociente de verosimilitudes y de las puertas de una LSTM (clase 315) usan la del producto; la derivada de la sigmoide, σ' = σ(1−σ), se obtiene con la del cociente.
Producto y cociente de x² y sin(x) en x = 1.3.
f = x², g = sin(x), x = 1.3
(fg)' por la regla: 2x·sin(x) + x²·cos(x)
= 2.5057 + 0.4518 = 2.9575
(fg)' numérica = 2.9575 ✓
(f/g)' por la regla: (2x·sin x − x²·cos x)/sin²x
= 2.2160
(f/g)' numérica = 2.2160 ✓
ERROR común: f'·g' = 2x·cos(x) = 0.6952 ✗ no es la derivadaRegla del producto y del cociente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | x, (fg)'_numerica, (fg)'_regla, (f/g)'_numerica, (f/g)'_regla |
| Comprobaciones (2) | producto_ok, cociente_ok |
compmath run 146Derivada de la sigmoide y de la softmax, puertas de LSTM y GRU, cocientes de verosimilitud y cualquier pérdida con términos multiplicativos.
9780914098911 verificado en International ISBN Agency (2026-08-19).La regla de la cadena es el mecanismo completo de backpropagation: derivar una composición es multiplicar factores.
(f∘g)'(x) = f'(g(x)) · g'(x)
cadena de L funciones: producto de L derivadasLa regla de la cadena dice que la derivada de una composición es el producto de las derivadas de sus piezas, evaluadas en los puntos correctos. La intuición de tasas encadenadas lo hace evidente: si y cambia 3 veces más rápido que u, y u cambia 2 veces más rápido que x, entonces y cambia 6 veces más rápido que x.
Esta clase es la más importante del programa para quien quiera entender deep learning. Una red de L capas es una composición de L funciones (clase 057), así que su gradiente respecto a los parámetros de la primera capa es un producto de L factores. Ese producto explica de golpe tres fenómenos que suelen presentarse por separado:
Si cada factor es menor que 1, el producto tiende a cero exponencialmente: el gradiente se desvanece y las primeras capas dejan de aprender (clase 314). Si cada factor es mayor que 1, el producto diverge: el gradiente explota. Y como la derivada de ReLU vale exactamente 1 en el semieje positivo, sustituir la sigmoide —cuya derivada máxima es 0.25— por ReLU evita que el producto se atenúe.
La regla se generaliza a varias variables como una suma de productos sobre todos los caminos del grafo de cómputo (clase 167), y su implementación eficiente en modo reverso es la autodiferenciación (clase 179). Todo lo demás en el entrenamiento de una red es ingeniería alrededor de esta regla.
Derivar sin(x²+1) y una cadena de tres niveles.
f(u) = sin(u), g(x) = x²+1, x = 1.5
g(x) = 3.25
df/du en g(x) = cos(3.25) = −0.9940
dg/dx = 2x = 3.0
producto: −0.9940 × 3.0 = −2.9821
derivada numérica: −2.9821 ✓
Cadena de tres: e^(sin(x²)) en x = 0.8
derivada = 2.0871
En una red de L capas: el gradiente es un producto de L factores.La regla de la cadena: el mecanismo entero de backpropagation.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | x, df/du_en_g(x), dg/dx, producto_de_la_cadena, derivada_numerica, cadena_de_3_niveles |
| Comprobaciones (1) | coinciden |
compmath run 147Backpropagation, autodiferenciación, cambio de variable en integrales, propagación de incertidumbre y análisis de gradientes que se desvanecen o explotan.
10.1038/323533a0 verificado en Crossref (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).e^x es la única función que es su propia derivada, y por eso e aparece en todas partes.
(eˣ)' = eˣ
(ln x)' = 1/x
(aˣ)' = aˣ · ln aLa función exponencial e^x tiene una propiedad que ninguna otra función no nula comparte: es su propia derivada. Ese hecho define el número e, y es la razón por la que aparece en toda ecuación que modele crecimiento proporcional a la cantidad presente.
Con otra base aparece un factor: (aˣ)' = aˣ·ln a. Solo cuando a = e ese factor vale 1. Es el mismo fenómeno que con los radianes (clase 062): existe una elección de unidad o de base que elimina las constantes de conversión, y esa elección es la «natural».
La derivada del logaritmo, 1/x, es igual de notable: una función trascendente cuya derivada es una función racional simple. De ahí que ∫dx/x = ln|x|, la única excepción a la regla de integración de potencias.
En machine learning estas dos derivadas aparecen constantemente. La derivada de la sigmoide se calcula con la de la exponencial; el gradiente de la cross-entropy, con la del logaritmo; y la combinación de ambas produce la simplificación más elegante del área: el gradiente de sigmoide más entropía cruzada es simplemente (p − y), sin términos residuales (clase 305).
Las tres derivadas verificadas.
x = 2
d(eˣ)/dx numérica = 7.389056
e² = 7.389056 ✓ es su propia derivada
d(ln x)/dx numérica = 0.500000
1/x = 0.5 ✓
d(3ˣ)/dx numérica = 9.887511
3²·ln 3 = 9 × 1.098612 = 9.887511 ✓ aparece el factor ln ae^x es su propia derivada; log tiene derivada 1/x.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | d(e^x)/dx_numerica, e^x, d(ln x)/dx_numerica, 1/x, d(a^x)/dx_con_a=3, a^x·ln(a) |
| Comprobaciones (1) | es_su_propia_derivada |
compmath run 148Sigmoide y softmax, cross-entropy, decaimiento exponencial del learning rate, interés compuesto y toda ecuación diferencial de crecimiento proporcional.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780691168487 verificado en International ISBN Agency (2026-08-19).Las derivadas trigonométricas forman un ciclo de periodo cuatro.
(sin x)' = cos x
(cos x)' = −sin x
(tan x)' = sec²x = 1/cos²xDerivar el seno da el coseno, derivar el coseno da menos el seno, y repitiendo se vuelve al principio tras cuatro pasos. Ese ciclo de periodo cuatro tiene una consecuencia elegante: la cuarta derivada de sin x es sin x, igual que e^x es su propia primera derivada.
Esa analogía no es casual. La fórmula de Euler, e^(ix) = cos x + i·sin x, unifica ambas familias: las funciones trigonométricas son exponenciales de argumento imaginario. Derivar e^(ix) multiplica por i, y multiplicar por i es girar 90° en el plano complejo, que es exactamente el desplazamiento de fase entre seno y coseno.
El requisito ineludible es que el argumento esté en radianes (clase 062). En grados, cada derivada arrastraría un factor π/180, y tras cuatro derivaciones el factor sería (π/180)⁴ ≈ 9·10⁻⁹. Los errores de unidad angular no lanzan excepción: producen resultados escalados por un factor que parece arbitrario.
La derivada de la tangente, sec²x, diverge donde el coseno se anula. Esa singularidad es real y hay que manejarla: en robótica produce el «bloqueo de cardán», y en cualquier cálculo con ángulos cerca de 90° conviene reformular usando seno y coseno directamente.
El ciclo de derivadas en x = 0.7.
d(sin)/dx numérica = 0.764842 cos(0.7) = 0.764842 ✓
d(cos)/dx numérica = −0.644218 −sin(0.7) = −0.644218 ✓
d(tan)/dx numérica = 1.703879 sec²(0.7) = 1.703879 ✓
Ciclo: sin → cos → −sin → −cos → sin
La cuarta derivada de sin es sin ✓
Requisito: argumento en RADIANESDerivadas trigonométricas y su ciclo de periodo 4.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | d(sin)/dx, cos(x), d(cos)/dx, -sin(x), d(tan)/dx, sec²(x) |
| Comprobaciones (1) | cuarta_derivada_de_sin_es_sin |
compmath run 149Análisis de señales, positional encoding, oscilaciones y ondas, cinemática y cualquier modelo periódico.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780198534464 verificado en International ISBN Agency (2026-08-19).La derivación implícita permite derivar una relación sin despejar una variable en función de la otra.
x² + y² = r² ⟹ dy/dx = −x/y
derivar ambos lados tratando y como función de xNo toda relación entre x e y se puede despejar. x² + y² = 25 define una circunferencia, y despejar y obliga a elegir una de las dos ramas. La derivación implícita evita el problema: se deriva la ecuación entera respecto a x, tratando y como función de x y aplicando la regla de la cadena a cada término que la contenga.
Del término y² sale 2y·(dy/dx), y de ahí se despeja dy/dx. El resultado, −x/y, depende de ambas coordenadas, lo que es coherente: la pendiente de la tangente a una circunferencia depende de en qué punto se esté.
La verificación geométrica es bonita: la tangente a una circunferencia es perpendicular al radio en ese punto. La pendiente del radio es y/x y la de la tangente es −x/y, y su producto es −1, que es exactamente la condición de perpendicularidad de la clase 069. El laboratorio comprueba esa relación.
La técnica se generaliza al caso multivariable como el teorema de la función implícita, y aparece en machine learning en la diferenciación implícita de capas definidas como la solución de un problema de optimización —modelos de equilibrio profundo, capas de optimización diferenciables—, donde no hay fórmula explícita que derivar.
Tangente a la circunferencia de radio 5 en (3,4).
x² + y² = 25
Derivar: 2x + 2y·(dy/dx) = 0
Despejar: dy/dx = −x/y = −3/4 = −0.75
Verificación numérica con y = √(25−x²):
dy/dx en x=3 → −0.750000 ✓
Recta tangente: y − 4 = −0.75(x − 3)
Perpendicularidad con el radio:
pendiente del radio = 4/3
(−3/4)·(4/3) = −1 ✓Derivación implícita sobre la circunferencia x²+y²=25.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | dy/dx_implicita, dy/dx_numerica |
| Comprobaciones (2) | coinciden, tangente_perpendicular_al_radio |
compmath run 150Curvas definidas implícitamente, teorema de la función implícita, capas de optimización diferenciables y modelos de equilibrio profundo.
9780914098911 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1909.01377 verificado en DataCite (2026-08-19).Taylor cambia una función difícil por un polinomio con error acotado por el primer término omitido.
f(x) ≈ Σ f⁽ⁿ⁾(a)(x−a)ⁿ/n!
error del grado n ≤ máx|f⁽ⁿ⁺¹⁾|·|x−a|ⁿ⁺¹/(n+1)!
aproximación lineal: f(a) + f'(a)(x−a)La serie de Taylor aproxima una función por un polinomio construido con sus derivadas en un punto. El grado 1 es la recta tangente; el grado 2 añade curvatura; cada grado adicional captura más estructura local. Y lo más útil: el error está acotado, no solo es «pequeño».
Esa cota es lo que convierte la aproximación en una herramienta rigurosa. Saber que el error del polinomio de grado n no supera máx|f⁽ⁿ⁺¹⁾|·|x−a|ⁿ⁺¹/(n+1)! permite decidir cuántos términos hacen falta para una precisión dada, en lugar de añadir términos hasta que «parezca suficiente».
Taylor es el motor de buena parte del análisis numérico. El orden de error de la diferencia central (clase 144), el de la regla del trapecio (clase 229) y el del método de Euler (clase 236) se deducen todos truncando un desarrollo de Taylor y contando potencias de h. Cuando la parte 11 diga «error O(h²)», estará diciendo «el desarrollo de Taylor se truncó tras el término lineal».
En optimización, el desarrollo de segundo orden es lo que da el método de Newton: se aproxima la función por una parábola y se salta a su vértice. Y en machine learning, la linealización de primer orden es la que justifica que un paso pequeño en dirección contraria al gradiente reduzca la función.
Aproximar e^0.5 con polinomios de grado creciente.
valor exacto: 1.6487212707
grado aproximación error
0 1.0000000000 6.49e−01
1 1.5000000000 1.49e−01
2 1.6250000000 2.37e−02
3 1.6458333333 2.89e−03
4 1.6484375000 2.84e−04
5 1.6486979167 2.34e−05
Cota teórica del error de grado 5:
e^0.5 · 0.5⁶/6! = 3.58e−05 ✓ acota el error realTaylor de e^x en 0: el error cae con el grado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | valor_exacto, aproximacion_lineal, cota_de_error_grado_5 |
| Comprobaciones (0) | — |
compmath run 151Métodos numéricos y sus órdenes de error, método de Newton, linealización de modelos, análisis de convergencia y funciones especiales en bibliotecas matemáticas.
9780914098911 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).La derivada nula señala un punto crítico; el signo de la segunda derivada decide de qué tipo es.
condición de primer orden: f'(x) = 0
f''(x) > 0 ⟹ mínimo local; f''(x) < 0 ⟹ máximo local
f''(x) = 0 ⟹ el criterio no decideLos extremos locales de una función derivable ocurren donde la derivada se anula, porque en un máximo o un mínimo la tangente es horizontal. Esa es la condición de primer orden, y es necesaria pero no suficiente: x³ tiene derivada nula en cero y no tiene ahí ni máximo ni mínimo.
La segunda derivada resuelve la ambigüedad en la mayoría de los casos: positiva indica que la función se curva hacia arriba (mínimo) y negativa que se curva hacia abajo (máximo). Cuando vale cero, el criterio no decide y hay que examinar derivadas superiores o el comportamiento a ambos lados.
Un punto crítico es local, no global. Encontrar todos los mínimos locales de una función arbitraria es un problema difícil, y esa dificultad es exactamente la que hace que el entrenamiento de redes neuronales sea un problema no convexo. En una función convexa (clase 242), todo mínimo local es global y el problema se simplifica radicalmente.
La generalización a varias variables sustituye f' = 0 por ∇f = 0 y el signo de f'' por el carácter definido positivo del Hessiano (clase 169). La lógica no cambia: primera derivada para localizar, segunda para clasificar.
Puntos críticos de x³ − 3x.
f(x) = x³ − 3x, f'(x) = 3x² − 3
f'(x) = 0 → x = ±1
x = −1: f = 2, f'' = 6x = −6 < 0 → MÁXIMO local
x = 1: f = −2, f'' = 6 > 0 → MÍNIMO local
Extremos globales en ℝ: no existen
f no está acotada: f(x) → ±∞Máximos y mínimos por derivada y criterio de la segunda derivada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 152Optimización de una variable, condición de primer orden en la parte 12, ajuste de hiperparámetros y análisis de curvas de aprendizaje.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780914098911 verificado en International ISBN Agency (2026-08-19).La integral es el límite de sumas de rectángulos, y la regla del punto medio converge como O(h²).
∫f ≈ Σ f(xᵢ*)·Δx
punto medio: error O(h²)Integrar es acumular. La suma de Riemann aproxima el área bajo una curva con rectángulos, y al refinar la partición esa suma converge a la integral. La definición formal exige que el límite sea el mismo independientemente de cómo se elija el punto de evaluación dentro de cada subintervalo, y esa independencia es lo que define a las funciones integrables.
La elección del punto afecta a la velocidad de convergencia aunque no al límite. Evaluar en el extremo izquierdo o derecho da error O(h); evaluar en el punto medio da O(h²), porque los errores por exceso y por defecto se compensan en cada subintervalo. Es una mejora gratuita: el mismo número de evaluaciones, un orden más de precisión.
Esa cancelación por simetría es la misma idea que hace superior la diferencia central (clase 144). Aparece una y otra vez en análisis numérico: aprovechar la simetría para cancelar términos de error de orden impar.
Riemann formalizó esta construcción en 1854. Lebesgue la generalizó en 1902 con una integral que maneja funciones mucho más patológicas y que es la base de la teoría de la probabilidad moderna. Para las funciones de este programa, ambas coinciden.
Integrar x² en [0,1] por punto medio.
valor exacto: 1/3 = 0.333333...
n suma error
4 0.33203125 1.30e−03
16 0.33325195 8.14e−05
64 0.33333206 5.09e−06
256 0.33333333 3.18e−07
Al cuadruplicar n, el error se divide por 16 → O(h²) ✓Sumas de Riemann convergiendo a la integral.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | valor_exacto_1/3 |
| Comprobaciones (0) | — |
compmath run 153Cuadratura numérica, cálculo de probabilidades por integración, acumulación de señales y cualquier magnitud que se obtenga sumando contribuciones infinitesimales.
9780471000051 verificado en International ISBN Agency (2026-08-19).La integral definida es aditiva en el intervalo y cambia de signo al invertir la orientación.
∫ₐᵇ + ∫_b^c = ∫ₐ^c
∫ₐᵇ = −∫_bₐ
valor medio = (1/(b−a))·∫ₐᵇ fLa integral definida representa el área con signo: las regiones bajo el eje cuentan negativo. Esa convención es la que permite que la integral de una función que oscila alrededor de cero sea pequeña, y es la que hace consistente el teorema fundamental.
Las propiedades estructurales son tres. La aditividad en el intervalo permite partir un dominio en trozos y sumar. La orientación invierte el signo al intercambiar los límites, lo que hace que ∫ₐᵃ = 0 sea consistente. Y la linealidad permite integrar término a término, igual que se derivaba.
El valor medio de una función en un intervalo es su integral dividida por la longitud, y es la altura del rectángulo con la misma área. El teorema del valor medio integral garantiza que la función alcanza ese valor en algún punto del intervalo, si es continua.
Esa noción es la que conecta con probabilidad: la esperanza de una variable aleatoria continua es la integral de x·f(x), es decir, un promedio ponderado por la densidad. Y es la que aparece en machine learning como el promedio de una pérdida sobre una distribución, que en la práctica se estima con Monte Carlo (clase 198).
Propiedades de la integral de x².
∫₀¹ x² = 0.333333
∫₁² x² = 2.333333
∫₀² x² = 2.666667
Aditividad: 0.333333 + 2.333333 = 2.666667 ✓
Orientación: ∫₁⁰ x² = −0.333333 ✓
Intervalo nulo: ∫₀⁰ x² = 0 ✓
Valor medio en [0,2]: 2.666667/2 = 1.333333Propiedades de la integral definida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | ∫₀¹x², ∫₁²x², ∫₀²x², ∫₁⁰x² (orientación), ∫₀⁰x², valor_medio_en_[0,2] |
| Comprobaciones (1) | aditividad |
compmath run 154Esperanza de variables continuas, trabajo y energía en física, acumulación de métricas y área bajo la curva ROC.
9780471000051 verificado en International ISBN Agency (2026-08-19).9780914098911 verificado en International ISBN Agency (2026-08-19).La antiderivada está determinada salvo una constante, y esa constante desaparece en la integral definida.
F' = f ⟹ (F + C)' = f
∫ₐᵇ f = F(b) − F(a), independiente de CUna antiderivada de f es cualquier función cuya derivada sea f. Como la derivada de una constante es cero (clase 145), sumar cualquier constante a una antiderivada da otra antiderivada. La familia completa es F(x) + C, y esa C es la razón por la que la integral indefinida se escribe siempre con ella.
En la integral definida la constante desaparece: al restar F(b) − F(a), las constantes se cancelan. Por eso el valor de una integral definida no depende de qué antiderivada se elija, resultado que parece obvio y que conviene comprobar una vez.
Encontrar antiderivadas es sustancialmente más difícil que derivar. Derivar es un procedimiento mecánico que siempre termina; integrar requiere reconocer patrones, y hay funciones elementales cuya antiderivada no es elemental. e^(-x²) es el caso más famoso: su integral define la función error erf, que no se puede escribir con funciones elementales.
Ese hecho —demostrado por Liouville en el siglo XIX— es la razón de ser de la integración numérica. No es que no sepamos calcular la integral: es que se ha demostrado que no existe forma cerrada elemental. La probabilidad normal acumulada es precisamente uno de esos casos.
Dos antiderivadas de x² y su integral definida.
F₁(x) = x³/3
F₂(x) = x³/3 + 7
F₁'(2) = 4.0 ✓
F₂'(2) = 4.0 ✓ misma derivada
diferencia constante: F₂ − F₁ = 7
Integral definida en [1,3]:
con F₁: 9 − 1/3 = 8.6667
con F₂: 16 − 7.3333 = 8.6667 ✓ la constante se cancelaLa antiderivada no es única: difiere en una constante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | F1'(2), F2'(2), diferencia_constante, la_constante_desaparece_en_la_definida |
| Comprobaciones (1) | misma_derivada |
compmath run 155Resolución de ecuaciones diferenciales, cálculo de probabilidades acumuladas y reconstrucción de una magnitud a partir de su tasa de cambio.
9780914098911 verificado en International ISBN Agency (2026-08-19).Derivar e integrar son operaciones inversas: ese es el teorema que da nombre al cálculo.
d/dx ∫ₐˣ f(t)dt = f(x)
∫ₐᵇ f = F(b) − F(a) con F' = fEl teorema fundamental del cálculo conecta dos problemas que nacieron completamente separados: el de la tangente —resuelto con derivadas— y el del área —resuelto con integrales—. Su enunciado es que son inversos, y esa unificación es el logro central de Newton y Leibniz.
La primera parte dice que la función área, F(x) = ∫ₐˣ f, tiene derivada f. Intuitivamente: al mover el extremo derecho un poquito, el área crece en una franja de altura f(x) y anchura infinitesimal. La segunda parte convierte ese resultado en un método de cálculo: para integrar, basta encontrar una antiderivada y evaluarla en los extremos.
El impacto práctico es difícil de exagerar. Sin el teorema, cada integral exigiría un límite de sumas; con él, muchas se resuelven en una línea. Es la diferencia entre calcular áreas una por una y tener un método general.
El laboratorio comprueba ambas partes numéricamente con cos, cuya antiderivada es sin: integra cos desde cero hasta x y verifica que da sin(x), y luego deriva esa integral y verifica que devuelve cos(x). Que ambas comprobaciones pasen es la confirmación ejecutable del teorema.
Verificar las dos partes con cos.
Primera parte: F(x) = ∫₀ˣ cos(t)dt
F(1.2) numérica = 0.932039
sin(1.2) = 0.932039 ✓
Segunda parte: dF/dx debe ser cos(x)
dF/dx en 1.2 (numérica) = 0.362358
cos(1.2) = 0.362358 ✓
Derivar deshace integrar.Teorema fundamental: derivar deshace integrar.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | F(x)=∫₀ˣcos, sin(x), dF/dx_numerica, f(x) |
| Comprobaciones (2) | primera_parte_ok, segunda_parte_ok |
compmath run 156Cálculo de integrales en forma cerrada, resolución de ecuaciones diferenciales, relación entre función de densidad y función de distribución acumulada.
9780471000051 verificado en International ISBN Agency (2026-08-19).9780914098911 verificado en International ISBN Agency (2026-08-19).La sustitución es la regla de la cadena leída al revés.
∫f(g(x))·g'(x)dx = ∫f(u)du con u = g(x)
los límites también se transformanIntegrar por sustitución consiste en reconocer que el integrando tiene la forma f(g(x))·g'(x), que es exactamente lo que produce derivar F(g(x)) por la regla de la cadena. Al identificar u = g(x), la integral se convierte en ∫f(u)du, que suele ser inmediata.
La señal para aplicarla es la presencia de una función y de su derivada como factor. En ∫2x·cos(x²)dx, el 2x es la derivada de x², así que la sustitución u = x² cierra el problema. Reconocer ese patrón es la habilidad que hay que entrenar.
En integrales definidas hay que transformar también los límites, y ese es el error más frecuente: cambiar la variable sin cambiar el intervalo. La alternativa es deshacer la sustitución antes de evaluar, pero transformar los límites es más limpio y menos propenso a error.
En probabilidad, la sustitución es el cambio de variable de una densidad, y allí aparece el jacobiano como factor de corrección (clase 075). Esa corrección es la que hace que la densidad transformada siga integrando a 1, y es el mecanismo central de los normalizing flows.
Integrar 2x·cos(x²) de 0 a 1.
Reconocer: la derivada de x² es 2x, que está presente
Sustitución: u = x², du = 2x dx
Límites: x=0 → u=0, x=1 → u=1
∫₀¹ 2x·cos(x²)dx = ∫₀¹ cos(u)du = sin(1) = 0.841471
Verificación numérica directa: 0.841471 ✓Integración por sustitución: la regla de la cadena al revés.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | valor_directo, valor_sustituido, valor_analitico_sin(1) |
| Comprobaciones (1) | coinciden |
compmath run 157Cambio de variable en densidades de probabilidad, normalizing flows, simplificación de integrales y reparametrización en inferencia variacional.
9780914098911 verificado en International ISBN Agency (2026-08-19).La integración por partes es la regla del producto leída al revés.
∫u dv = uv − ∫v du
criterio LIATE para elegir uIntegrar por partes se obtiene integrando la regla del producto y despejando. Su utilidad es transformar una integral difícil en otra más fácil, cambiando cuál de los dos factores se deriva y cuál se integra.
La elección de u determina si el método ayuda o empeora. El criterio LIATE —logarítmica, inversa trigonométrica, algebraica, trigonométrica, exponencial— ordena qué tipo de función conviene elegir como u, y funciona en la mayoría de los casos escolares. La lógica es elegir como u lo que se simplifica al derivar.
En ∫x·eˣdx, elegir u = x hace que du = dx desaparezca el polinomio, dejando ∫eˣdx, inmediata. Elegir al revés produciría x²/2·eˣ, que es peor. La misma integral con un polinomio de grado n requiere aplicar el método n veces.
Hay un caso elegante que conviene conocer: al integrar por partes dos veces ∫eˣ·sin x dx, reaparece la integral original, y despejarla algebraicamente da el resultado. Es un truco que muestra que la integración es más creativa que la derivación.
Integrar x·eˣ de 0 a 1.
Elegir u = x (algebraica, se simplifica al derivar)
dv = eˣdx
du = dx, v = eˣ
∫x·eˣdx = x·eˣ − ∫eˣdx = x·eˣ − eˣ
Evaluar en [0,1]:
(1·e − e) − (0 − 1) = 0 + 1 = 1
Verificación numérica: 1.0000000 ✓
error: 1.4e−09Integración por partes: la regla del producto al revés.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | resultado_analitico, resultado_numerico, error |
| Comprobaciones (0) | — |
compmath run 158Cálculo de momentos de distribuciones, transformadas de Laplace y Fourier, y deducción de fórmulas de recurrencia para integrales.
9780914098911 verificado en International ISBN Agency (2026-08-19).9781285740621 verificado en International ISBN Agency (2026-08-19).El orden de convergencia dice cómo cae el error al refinar: trapecio es O(h²) y Simpson O(h⁴).
trapecio: h·(f(a)/2 + Σf(xᵢ) + f(b)/2), error O(h²)
Simpson: h/3·(f(a) + 4Σimpares + 2Σpares + f(b)), error O(h⁴)Cuando una integral no tiene forma cerrada —el caso habitual— hay que calcularla numéricamente. El trapecio aproxima la función por segmentos rectos entre nodos; Simpson la aproxima por parábolas que pasan por tres nodos consecutivos.
La diferencia de precisión es notable. El trapecio tiene error O(h²): duplicar el número de subintervalos divide el error por 4. Simpson tiene error O(h⁴): duplicar lo divide por 16. Con 100 subintervalos, Simpson suele dar diez órdenes de magnitud más de precisión con el mismo número de evaluaciones de la función.
Ese salto tiene una explicación bonita: Simpson es exacto para polinomios de grado 3, aunque solo interpole parábolas. El término cúbico se cancela por simetría, y esa cancelación regala un orden completo. Es el mismo fenómeno que hace superior la diferencia central.
La función del laboratorio, e^(-x²), no tiene antiderivada elemental (clase 155) y su integral define la función error. Que el resultado numérico coincida con erf a doce decimales es la comprobación de que el método funciona, y es cómo se calculan en la práctica las probabilidades de la distribución normal.
Integrar e^(-x²) en [0,1] con 100 subintervalos.
referencia (erf): 0.746824132812
trapecio: 0.746820967 → error 3.17e−06
Simpson: 0.746824133 → error 1.11e−13
Simpson es 7 órdenes de magnitud más preciso
con el mismo número de evaluaciones.
Órdenes: trapecio O(h²), Simpson O(h⁴)Trapecio frente a Simpson sobre la misma integral.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | subintervalos, trapecio, simpson, referencia_erf, error_trapecio, error_simpson |
| Comprobaciones (0) | — |
compmath run 159Probabilidades de la distribución normal, cálculo de expectativas, integración de señales y cualquier integral sin forma cerrada.
9781305253667 verificado en International ISBN Agency (2026-08-20).Derivar localiza; integrar acumula. Un mismo problema suele necesitar las dos.
máximo: buscar la raíz de f'
energía: ∫f² · área: ∫f · valor medio: (1/T)∫fEl capstone analiza una señal amortiguada, e^(-0.5t)·sin(3t), con las dos operaciones del cálculo. La derivada localiza sus extremos; la integral acumula su área, su energía y su valor medio. Ninguna de las dos por separado describe la señal.
Encontrar el máximo se plantea como buscar la raíz de la derivada, y se resuelve por bisección. Esa reformulación —optimizar equivale a resolver f' = 0— es la que conecta la parte 07 con la parte 11: los métodos de búsqueda de raíces son también métodos de optimización, y viceversa.
Las tres integrales tienen interpretaciones distintas. El área es la acumulación con signo, y en una señal oscilante tiende a cancelarse. La energía, ∫f², no se cancela porque el cuadrado es siempre positivo, y por eso es la medida estándar de «cuánta señal hay». El valor medio normaliza el área por la duración.
Esa distinción entre área y energía reaparece en la parte 13: el teorema de Parseval dice que la energía calculada en el tiempo coincide con la calculada en frecuencia, y es la base del análisis espectral. Aquí se introduce sin nombrarla todavía.
Analizar la señal amortiguada en [0,6].
f(t) = e^(−0.5t)·sin(3t)
Primer máximo (raíz de f' por bisección):
t = 0.4048, f(t) = 0.7818
f'(t) = 1.4e−09 ✓ derivada nula
Acumulaciones en [0,6]:
área ∫f = 0.3220
energía ∫f² = 0.2856
valor medio = 0.0537
El área casi se cancela por la oscilación;
la energía no, porque el cuadrado es positivo.Capstone: derivar para optimizar e integrar para acumular una señal.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | t_del_primer_maximo, valor_maximo, derivada_en_el_maximo, area_acumulada_0_a_6, energia_∫f², valor_medio |
| Comprobaciones (0) | — |
compmath run 160Análisis de señales, cálculo de energía en física, métricas acumuladas en el tiempo y localización de extremos en curvas experimentales.
9780131988422 verificado en International ISBN Agency (2026-08-20).Derivadas parciales, gradiente, Jacobiano, Hessiano, Taylor multivariable, multiplicadores de Lagrange, cálculo matricial y autodiferenciación.
Esta es la parte donde el programa deja de hablar de matemática «que se usa en IA» y pasa a construir el mecanismo exacto que entrena una red neuronal. Al final de las 20 clases habrás implementado un motor de autodiferenciación en modo reverso de unas cien líneas y habrás comprobado que sus gradientes coinciden con los que calculaste a mano.
Las clases 161 a 166 extienden la derivada a varias variables. La idea central es que el gradiente es el vector de derivadas parciales y apunta en la dirección de mayor crecimiento. De ahí sale, sin más argumento, el descenso de gradiente: para minimizar, hay que moverse en la dirección opuesta. Todo el entrenamiento de un modelo es esa frase repetida millones de veces.
Las clases 167 a 170 generalizan la maquinaria: regla de la cadena multivariable, Jacobiano, Hessiano y Taylor. El Jacobiano es la derivada de una función vectorial y es el objeto que manipulan internamente los frameworks: backward() calcula un producto vector-Jacobiano sin construir nunca el Jacobiano completo, que sería inmanejable. El Hessiano describe la curvatura y decide si un punto crítico es mínimo, máximo o silla.
Las clases 171 y 172 son optimización: descenso de gradiente sobre una cuadrática y multiplicadores de Lagrange. Lagrange convierte una restricción en un término del objetivo, y su multiplicador tiene una interpretación económica precisa —cuánto mejora el óptimo si se relaja la restricción— que reaparece en KKT (clase 257) y en el precio sombra de la programación lineal.
Las clases 173 a 176 tratan integrales múltiples y campos vectoriales, y las clases 177 y 178 el cálculo matricial: cómo derivar respecto a vectores y matrices. Ahí aparece la identidad más usada en machine learning: el gradiente de la pérdida cuadrática ‖Xw − y‖²/n es 2Xᵀ(Xw − y)/n. Esa expresión es el gradiente de una capa lineal.
El cierre (179 y 180) implementa la autodiferenciación y la contrasta con backpropagation manual sobre la misma red. Que ambos den exactamente el mismo número es la demostración de que autograd no es magia: es la regla de la cadena aplicada en orden topológico inverso (clase 096).
Autograd de PyTorch y JAX es exactamente el modo reverso del grafo de cómputo que se construye en esta parte a mano.
| Término | Definición | Clase |
|---|---|---|
| Campo conservativo | Campo que es el gradiente de una función potencial. Su rotacional es nulo. | 175 |
| Campo vectorial | Función que asigna un vector a cada punto del espacio. | 175 |
| Convención de layout | Acuerdo sobre si el gradiente es fila o columna. Mezclar convenciones produce transposiciones erróneas. | 177 |
| Curva de nivel | Conjunto de puntos donde la función toma el mismo valor. El gradiente es perpendicular a ella. | 162 |
| Derivada direccional | Tasa de cambio en una dirección unitaria; es la proyección del gradiente sobre ella. | 165 |
| Derivada parcial | Derivada respecto a una variable manteniendo las demás fijas. Se denota ∂f/∂x. | 163 |
| Divergencia | Medida de cuánto un campo actúa como fuente o sumidero en un punto. | 176 |
| Gradiente | Vector de derivadas parciales. Apunta en la dirección de mayor crecimiento y su norma mide la pendiente. | 164 |
| Grafo de cómputo | DAG cuyos nodos son operaciones. La autodiferenciación lo recorre en orden topológico inverso. | 179 |
| Hessiano | Matriz de segundas derivadas. Describe la curvatura y clasifica los puntos críticos. | 169 |
| Jacobiano | Matriz de primeras derivadas de una función vectorial. Su fila i es el gradiente de la componente i. | 168 |
| Modo reverso | Estrategia de autodiferenciación que calcula todas las derivadas con un barrido hacia adelante y uno hacia atrás. | 179 |
| Multiplicador de Lagrange | Coeficiente λ que mide cuánto mejora el óptimo al relajar la restricción una unidad. | 172 |
| Plano tangente | Aproximación lineal de una superficie en un punto. Su error crece cuadráticamente con la distancia. | 166 |
| Punto de silla | Punto crítico con Hessiano de autovalores de signos mixtos: mínimo en unas direcciones y máximo en otras. | 169 |
| Rotacional | Medida de la circulación local de un campo alrededor de un punto. | 176 |
| Taylor multivariable | f(x+d) ≈ f(x) + ∇fᵀd + ½dᵀHd. El término de segundo orden usa el Hessiano. | 170 |
| Teorema de Fubini | Permite calcular una integral múltiple como integrales iteradas cuando la función es integrable. | 173 |
| VJP | Producto vector-Jacobiano. Es lo que calcula el modo reverso sin construir el Jacobiano completo. | 168 |
Una función de varias variables asigna un número a cada punto de un espacio; su gráfica vive una dimensión más arriba.
f: ℝⁿ → ℝ
f(x,y) = x²y + 3xy² + 2Pasar de una a varias variables no es un cambio de grado: es un cambio de naturaleza. La gráfica de f(x) es una curva en el plano; la de f(x,y) es una superficie en el espacio; la de una función de diez variables no se puede dibujar. A partir de tres variables hay que razonar con álgebra, y esa es la habilidad que instala esta parte.
La función del laboratorio, x²y + 3xy² + 2, es deliberadamente no simétrica: f(2,1) y f(1,2) dan valores distintos. Esa asimetría importa porque en machine learning las variables casi nunca son intercambiables, y suponer simetría donde no la hay produce errores de interpretación.
La forma práctica de explorar una función de varias variables es fijar todas las variables menos una y observar el corte resultante, que es una función de una variable. Esa es exactamente la idea de derivada parcial (clase 163), y es también la técnica de los gráficos de dependencia parcial en interpretabilidad de modelos.
En machine learning, la función de pérdida es una función de varias variables donde las «variables» son los parámetros: millones de ellos. Su gráfica vive en un espacio de millones de dimensiones y no se puede visualizar. Todo lo que se dice sobre «paisajes de pérdida» son proyecciones bidimensionales, útiles como intuición y engañosas si se toman literalmente.
Evaluar una función de dos variables.
f(x,y) = x²y + 3xy² + 2
f(0,0) = 2
f(1,1) = 1 + 3 + 2 = 6
f(2,1) = 4 + 6 + 2 = 12
f(1,2) = 2 + 12 + 2 = 16
f(2,1) ≠ f(1,2) → no simétrica ✓
dominio: ℝ² codominio: ℝ
la gráfica es una superficie en ℝ³Una función de dos variables evaluada sobre una malla.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | no_conmuta_en_x_y |
compmath run 161Funciones de pérdida, superficies de respuesta, modelos con varias entradas y gráficos de dependencia parcial en interpretabilidad.
9781285740621 verificado en International ISBN Agency (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).Las curvas de nivel son los conjuntos donde la función vale lo mismo, y el gradiente es perpendicular a ellas.
curva de nivel: f(x,y) = c
∇f ⊥ curva de nivel
curvas juntas ⟹ pendiente altaUna curva de nivel une los puntos donde la función toma el mismo valor. Es el mismo concepto que las isolíneas de un mapa topográfico, y la analogía es exacta: la altura del terreno es una función de dos variables, y las curvas de nivel son las líneas de altitud constante.
De esa imagen se leen dos hechos importantes. Primero, el gradiente es perpendicular a la curva de nivel: la dirección de máximo ascenso es la que cruza las isolíneas de frente, no la que las recorre. Segundo, cuanto más juntas están las curvas, mayor es la pendiente: la misma diferencia de valor en menos distancia.
Esa segunda observación es la que explica el zigzagueo del descenso de gradiente. Cuando las curvas de nivel son elipses muy alargadas —función mal condicionada, clase 128—, el gradiente apunta casi perpendicular al eje largo, es decir, casi perpendicular a la dirección hacia el mínimo. El algoritmo rebota entre las paredes del valle en lugar de avanzar por él.
Los gráficos de contorno son la herramienta estándar para visualizar funciones de dos variables, y en optimización se usan para mostrar trayectorias de convergencia. Su limitación es la misma de siempre: solo funcionan en dos dimensiones, y los paisajes reales tienen millones.
Curvas de nivel de x² + y².
g(x,y) = x² + y², nivel c = 4
puntos del nivel 4:
(2,0) → 4 ✓
(0,2) → 4 ✓
(√2,√2) → 4 ✓
(−2,0) → 4 ✓
forma: circunferencia de radio 2
gradiente en (2,0): (4, 0)
apunta radialmente hacia fuera
perpendicular a la circunferencia ✓Curvas de nivel: dónde la función vale lo mismo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | nivel |
| Comprobaciones (1) | gradiente_perpendicular_a_la_curva |
compmath run 162Visualización de paisajes de pérdida, mapas topográficos, análisis de convergencia y diagnóstico de mal condicionamiento.
9781285740621 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1712.09913 verificado en DataCite (2026-08-19).Una derivada parcial mide el cambio en una dirección de eje, congelando el resto.
∂f/∂x = derivada tratando y como constante
teorema de Schwarz: ∂²f/∂x∂y = ∂²f/∂y∂xLa derivada parcial respecto a x se calcula tratando todas las demás variables como constantes. Operativamente, es la derivada de una variable de la clase 144 aplicada al corte de la función. La notación ∂ en lugar de d recuerda que hay otras variables congeladas.
El teorema de Schwarz garantiza que las derivadas cruzadas coinciden —∂²f/∂x∂y = ∂²f/∂y∂x— si son continuas. Ese resultado es el que hace que el Hessiano sea simétrico (clase 169), y la simetría del Hessiano es lo que permite aplicarle el teorema espectral de la clase 126.
La limitación conceptual de las parciales es que solo miran en direcciones de eje. Una función puede tener ambas parciales definidas en un punto y no ser diferenciable allí, porque el comportamiento en direcciones oblicuas es distinto. La diferenciabilidad exige más: que exista una buena aproximación lineal en todas las direcciones (clase 166).
En machine learning, cada componente del gradiente es una derivada parcial: cuánto cambia la pérdida al mover un parámetro dejando el resto fijo. Con millones de parámetros, calcularlas una a una por diferencias finitas costaría millones de evaluaciones; la autodiferenciación las obtiene todas de una vez, y esa es su razón de ser.
Parciales de x²y + 3xy² en (2,3).
∂f/∂x = 2xy + 3y²
= 2·2·3 + 3·9 = 12 + 27 = 39
numérica: 39.000000 ✓
∂f/∂y = x² + 6xy
= 4 + 6·2·3 = 4 + 36 = 40
numérica: 40.000000 ✓
Cruzadas (Schwarz):
∂²f/∂x∂y = 2x + 6y
∂²f/∂y∂x = 2x + 6y ✓ coincidenDerivadas parciales: mover una variable congelando el resto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | ∂f/∂x_analitica, ∂f/∂x_numerica, ∂f/∂y_analitica, ∂f/∂y_numerica |
| Comprobaciones (2) | coinciden, cruzadas_iguales_(Schwarz) |
compmath run 163Componentes del gradiente, análisis de sensibilidad respecto a un parámetro, elasticidades en economía y ecuaciones en derivadas parciales.
9781285740621 verificado en International ISBN Agency (2026-08-19).9780201002881 verificado en International ISBN Agency (2026-08-19).El gradiente apunta al mayor ascenso; por eso se minimiza moviéndose en dirección contraria.
∇f = (∂f/∂x₁, ..., ∂f/∂xₙ)
descenso: x ← x − α∇f
‖∇f‖ = pendiente máximaEl gradiente reúne todas las derivadas parciales en un vector, y ese vector tiene dos propiedades que lo convierten en el objeto central de la optimización: apunta en la dirección de máximo crecimiento y su norma es la pendiente en esa dirección.
La primera propiedad es la que justifica el algoritmo más usado del machine learning moderno. Si el gradiente apunta hacia arriba, moverse en −∇f es la forma más rápida de bajar localmente. x ← x − α∇f es el descenso de gradiente, y toda la parte 12 son variantes de esa línea.
La palabra localmente es esencial. El gradiente solo informa del comportamiento infinitesimal alrededor del punto; nada garantiza que la dirección de máximo descenso local lleve al mínimo global, ni siquiera que sea una buena dirección a media distancia. En un valle alargado, la dirección de máximo descenso es casi perpendicular a la que lleva al mínimo.
La norma del gradiente sirve además como criterio de parada: cerca de un punto crítico, ‖∇f‖ tiende a cero. Es el indicador que usan todos los optimizadores para decidir cuándo detenerse, y es preferible a un número fijo de iteraciones porque se adapta al problema.
Gradiente y verificación de la dirección de ascenso.
f(x,y) = x²y + 3xy² + 2 en el punto (2,3)
∇f = (39, 40), ‖∇f‖ = 55.87
dirección unitaria: (0.6981, 0.7160)
f(2,3) = 68.0
Moverse h = 0.001 en dirección +∇f: 68.055872 ↑
Moverse h = 0.001 en dirección −∇f: 67.944128 ↓
El gradiente sube y su opuesto baja ✓El gradiente apunta al mayor ascenso.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | norma, f(p), f(p + h·∇f), f(p - h·∇f) |
| Comprobaciones (2) | el_gradiente_sube, descenso_usa_-∇f |
compmath run 164Descenso de gradiente y todas sus variantes, criterios de parada, mapas de saliencia en interpretabilidad y ataques adversariales.
9780387400655 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1609.04747 verificado en DataCite (2026-08-19).La derivada direccional es la proyección del gradiente sobre una dirección unitaria.
D_u f = ∇f · u, con ‖u‖ = 1
máximo: ‖∇f‖ en la dirección de ∇f
nulo: en direcciones perpendiculares a ∇fLa derivada direccional generaliza la parcial a cualquier dirección, no solo a los ejes. Su fórmula es un producto punto: D_u f = ∇f · u, y de esa expresión se leen inmediatamente sus valores extremos usando la clase 103.
Como ∇f · u = ‖∇f‖·cos θ para u unitario, el valor es máximo cuando θ = 0 —en la dirección del gradiente— y vale ‖∇f‖. Es mínimo en la dirección opuesta, valiendo −‖∇f‖. Y es cero en las direcciones perpendiculares al gradiente, que son precisamente las tangentes a la curva de nivel (clase 162).
Esa última observación cierra el círculo: moverse a lo largo de una curva de nivel no cambia el valor de la función, y por eso la derivada direccional en esa dirección es nula. La perpendicularidad entre gradiente y curva de nivel no es un hecho adicional: es una consecuencia.
El requisito de que u sea unitario no es formalismo. Si no se normaliza, el resultado escala con la longitud del vector y deja de ser una tasa de cambio por unidad de distancia. Es el error más frecuente al implementar derivadas direccionales.
Derivada direccional en cuatro direcciones.
punto (2,3), ∇f = (39, 40), ‖∇f‖ = 55.87
dirección D_u f
e₁ = (1,0) 39.00
e₂ = (0,1) 40.00
45° = (0.707,0.707) 55.86 ← casi el máximo
−∇f normalizado −55.87 ← el mínimo
perpendicular a ∇f: (−40, 39)/‖·‖ → 0.0 ✓ nula
máximo posible = ‖∇f‖ = 55.87Derivada direccional como proyección del gradiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | maxima_posible, minima_posible, nula_en_direccion_perpendicular |
| Comprobaciones (0) | — |
compmath run 165Análisis de sensibilidad en direcciones combinadas, búsqueda de línea en optimización (clase 254) y estudio de la anisotropía de una función de pérdida.
9781285740621 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).El plano tangente es la aproximación lineal en varias variables, y su error crece cuadráticamente.
z = f(a) + ∇f(a)·(x − a)
error ≈ ½·(x−a)ᵀH(x−a) = O(‖x−a‖²)El plano tangente es a las superficies lo que la recta tangente a las curvas: la mejor aproximación lineal en un punto. Su ecuación usa el gradiente como vector de pendientes: f(a) + ∇f(a)·(x − a).
Lo interesante es cómo se comporta el error. Al alejarse del punto de tangencia, el error crece cuadráticamente, no linealmente. Duplicar la distancia cuadruplica el error. Eso explica por qué las aproximaciones lineales funcionan bien cerca y mal lejos, y por qué el paso del descenso de gradiente debe ser pequeño: el gradiente solo describe la función en un entorno.
El término cuadrático del error es exactamente el que captura el Hessiano, y por eso Taylor de segundo orden (clase 170) es tanto más preciso. Los métodos de Newton usan esa información para dar pasos más largos con seguridad.
La diferenciabilidad en varias variables se define precisamente como la existencia de una buena aproximación lineal, con error o(‖x−a‖). Es una condición más fuerte que la mera existencia de las parciales, y es la que garantiza que el plano tangente merece ese nombre.
Plano tangente y crecimiento del error.
f(x,y) = x²y + 3xy² + 2 en (2,3)
f(2,3) = 68, ∇f = (39, 40)
plano: z = 68 + 39(x−2) + 40(y−3)
punto cercano (2.01, 3.01):
f real = 68.79
plano = 68.79
error = 0.0034
punto lejano (3, 4):
f real = 182.0
plano = 147.0
error = 35.0
Distancia ×100 → error ×10 000: crecimiento cuadrático ✓Plano tangente: la aproximación lineal en dos variables.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | f(p), error_cerca, error_lejos |
| Comprobaciones (1) | el_error_crece_cuadraticamente |
compmath run 166Linealización de modelos, propagación de incertidumbre de primer orden, un paso de descenso de gradiente y aproximación local de funciones complejas.
9781285740621 verificado en International ISBN Agency (2026-08-19).9780201002881 verificado en International ISBN Agency (2026-08-19).La regla de la cadena multivariable suma las contribuciones de todos los caminos.
dh/dt = (∂f/∂x)(dx/dt) + (∂f/∂y)(dy/dt)
en general: producto punto entre gradiente y velocidadCuando una función depende de variables que a su vez dependen de un parámetro, la tasa de cambio total suma las contribuciones de cada camino. Esa es la regla de la cadena multivariable, y su forma compacta es un producto punto: gradiente por vector velocidad.
La lectura de «suma sobre caminos» es la que se generaliza al grafo de cómputo. En una red neuronal, un parámetro puede influir en la pérdida por varias rutas —pesos compartidos, conexiones residuales, capas que se reutilizan— y su gradiente total es la suma de las contribuciones de todas ellas.
Ese detalle es la causa del error más común al implementar autodiferenciación a mano: si un nodo se usa dos veces, hay que acumular su gradiente en lugar de sobrescribirlo. El motor del programa usa += precisamente por eso, y la clase 306 lo hace explícito. En PyTorch, olvidar zero_grad() es el mismo problema al revés: acumular cuando no se debe.
La verificación numérica es directa: componer las funciones, derivar la composición por diferencias finitas y comparar con la suma de productos. El laboratorio lo hace sobre una trayectoria circular, donde x = cos t e y = sin t.
Derivar f(x(t), y(t)) sobre una circunferencia.
f(x,y) = x²y + 3xy² + 2
x(t) = cos t, y(t) = sin t, t = 1.5
∇f en (cos 1.5, sin 1.5) = (2.9787, 0.2318)
velocidad (dx/dt, dy/dt) = (−sin 1.5, cos 1.5) = (−0.9975, 0.0707)
Regla de la cadena:
2.9787·(−0.9975) + 0.2318·0.0707 = −2.9548
Derivada numérica de h(t): −2.9548 ✓
Estructura: producto punto entre gradiente y velocidadRegla de la cadena con variables intermedias.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | t, ∂f/∂x·dx/dt + ∂f/∂y·dy/dt, dh/dt_numerica |
| Comprobaciones (1) | coinciden |
compmath run 167Backpropagation con pesos compartidos, redes recurrentes, conexiones residuales y propagación de incertidumbre a través de varias etapas.
9781285740621 verificado en International ISBN Agency (2026-08-19).El Jacobiano es la derivada de una función vectorial; el modo reverso calcula vᵀJ sin construirlo.
J ∈ ℝ^(m×n) para F: ℝⁿ → ℝᵐ
fila i = ∇Fᵢ
VJP: vᵀJ · JVP: JvCuando la función devuelve un vector en lugar de un escalar, su derivada es una matriz: el Jacobiano. Su fila i es el gradiente de la componente i de la salida, y su columna j recoge cómo afecta la entrada j a todas las salidas.
Su tamaño es el problema. Para una capa que va de 1000 entradas a 1000 salidas, el Jacobiano tiene un millón de entradas; para un modelo completo, sería inmanejable. Por eso los frameworks nunca lo construyen.
Lo que sí calculan son productos con el Jacobiano. El VJP (vector-Jacobian product), vᵀJ, es lo que hace backward(): propaga un gradiente hacia atrás sin materializar la matriz. El JVP (Jacobian-vector product), Jv, es lo que hace el modo directo. Cada uno cuesta aproximadamente lo mismo que evaluar la función una vez.
La elección entre modos depende de la forma. Si hay muchas entradas y una sola salida —el caso de una función de pérdida, con millones de parámetros y un escalar— el modo reverso obtiene todos los gradientes con un solo barrido. Si hay pocas entradas y muchas salidas, el modo directo es más eficiente. El entrenamiento de redes es el primer caso, y por eso backpropagation es modo reverso.
Jacobiano de una función de ℝ² en ℝ³.
F(x,y) = (x²+y, sin(x)·y, x−3y) en (1,2)
J (shape 3×2):
[[2x, 1 ] [[2.0, 1.0 ]
[cos(x)·y, sin(x)] = [1.0806, 0.8415]
[1, −3 ]] [1.0, −3.0 ]]
fila 1 = ∇(x²+y) = (2x, 1) = (2, 1) ✓
VJP (modo reverso): vᵀJ, coste ≈ 1 evaluación
JVP (modo directo): Jv, coste ≈ 1 evaluaciónJacobiano de una función vectorial.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | fila_i_es_el_gradiente_de_Fi |
compmath run 168Autodiferenciación, cambio de variable en densidades, cinemática de robots y análisis de sensibilidad de sistemas con varias salidas.
El Hessiano describe la curvatura, y el signo de sus autovalores clasifica el punto crítico.
Hᵢⱼ = ∂²f/∂xᵢ∂xⱼ
definido positivo ⟹ mínimo; definido negativo ⟹ máximo; signos mixtos ⟹ sillaEl Hessiano recoge todas las segundas derivadas y describe cómo se curva la función en cada dirección. Es simétrico por el teorema de Schwarz (clase 163), y por tanto tiene autovalores reales y autovectores ortogonales (clase 126).
Los autovalores son las curvaturas principales. Todos positivos significa que la función se curva hacia arriba en todas las direcciones: mínimo local. Todos negativos: máximo. Signos mixtos: punto de silla, mínimo en unas direcciones y máximo en otras.
Ese último caso es el que domina en alta dimensión. En un espacio de un millón de dimensiones, que todos los autovalores tengan el mismo signo es extraordinariamente improbable; lo típico es que haya mezcla. Por eso el consenso actual es que el problema del entrenamiento de redes profundas no son los mínimos locales malos, son los puntos de silla y las mesetas que los rodean.
El Hessiano también determina la velocidad de convergencia. El cociente entre su mayor y su menor autovalor es el número de condición del problema, y controla lo lento que converge el descenso de gradiente (clase 244). Los métodos de segundo orden usan el Hessiano para corregir esa anisotropía, a costa de un coste O(n³) que los hace inviables con millones de parámetros.
Hessiano de x² + 3y² en el origen.
f(x,y) = x² + 3y²
∇f(0,0) = (0, 0) → punto crítico
H = [[2, 0],
[0, 6]]
autovalores: 2 y 6, ambos positivos → definido positivo
Clasificación: MÍNIMO local ✓
Número de condición: 6/2 = 3
curvas de nivel: elipses con ejes 3:1Hessiano: curvatura y clasificación del punto crítico.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | definido_positivo, silla_si_hay_signos_mixtos |
compmath run 169Clasificación de puntos críticos, método de Newton, análisis de convergencia, aproximación de Laplace en inferencia bayesiana y K-FAC.
10.48550/arxiv.1406.2572 verificado en DataCite (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).Taylor de segundo orden usa el Hessiano y reduce el error de cuadrático a cúbico.
f(x+d) ≈ f(x) + ∇fᵀd + ½dᵀHd
error de orden 1: O(‖d‖²); de orden 2: O(‖d‖³)El desarrollo de Taylor multivariable tiene la misma estructura que el de una variable, con el gradiente en el término lineal y el Hessiano en el cuadrático. La expresión ½dᵀHd es una forma cuadrática (clase 128), y su valor depende de la dirección del desplazamiento.
La ganancia de precisión es sustancial: el término de orden 2 reduce el error de O(‖d‖²) a O(‖d‖³). Para un desplazamiento de 0.05, eso significa pasar de un error del orden de 0.0025 a uno del orden de 0.000125: veinte veces mejor.
Esa mejora es la que justifica los métodos de segundo orden. Newton aproxima la función por su Taylor cuadrático y salta directamente al mínimo de esa parábola, lo que converge cuadráticamente cerca del óptimo. El precio es calcular e invertir el Hessiano.
Todos los optimizadores adaptativos de la parte 12 —AdaGrad, RMSProp, Adam— son intentos de capturar información de segundo orden sin calcular el Hessiano, usando en su lugar estadísticas acumuladas del gradiente. Entender qué aproximan exige entender este desarrollo.
Órdenes 0, 1 y 2 alrededor de (1,1).
f(x,y) = x²y + 3xy² + 2, desplazamiento d = (0.05, −0.03)
valor exacto: 6.0296
orden 0: 6.0000 error 2.96e−02
orden 1: 6.0250 error 4.60e−03
orden 2: 6.0296 error 1.11e−04
Cada orden reduce el error en más de un factor 10.Taylor de segundo orden en dos variables.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | valor_exacto, orden_0, orden_1, orden_2, error_orden_1, error_orden_2 |
| Comprobaciones (0) | — |
compmath run 170Método de Newton, análisis de convergencia, aproximación de Laplace y justificación de los optimizadores adaptativos.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780511804441 verificado en International ISBN Agency (2026-08-19).El descenso de gradiente converge en una cuadrática si el paso respeta el límite de estabilidad.
x ← x − α∇f(x)
estable si α < 2/λ_max
convergencia lenta si λ_max/λ_min es grandeEl descenso de gradiente aplica repetidamente la misma regla: moverse en dirección contraria al gradiente con un paso α. Sobre una función cuadrática se puede analizar exactamente, y ese análisis explica todo lo que se observa en la práctica.
La condición de estabilidad es α < 2/λ_max, donde λ_max es el mayor autovalor del Hessiano. Superarla hace que el algoritmo diverja, y por eso el learning rate es el hiperparámetro que más divergencias explica. La clase 244 lo comprueba con cuatro valores distintos.
La velocidad de convergencia la determina el cociente de autovalores. Si son parecidos, el descenso avanza directo al mínimo; si son muy dispares, el gradiente apunta casi perpendicular al eje largo del valle y el algoritmo zigzaguea. Con f = x² + 20y², la relación es 20 a 1 y el zigzagueo es visible.
Ese diagnóstico es el que motiva todo lo demás. Momentum (clase 246) amortigua la oscilación acumulando velocidad; los métodos adaptativos escalan cada coordenada por separado; los de segundo orden corrigen la anisotropía directamente. Todos atacan el mismo problema.
Descenso sobre una cuadrática mal condicionada.
f(x,y) = (x−3)² + 5(y+1)², lr = 0.08
inicio (0,0), mínimo teórico (3,−1)
paso x f
1 (0.48, −0.80) 6.55
5 (1.72, −0.99) 1.63
20 (2.90, −1.00) 0.0092
60 (3.00, −1.00) 1.6e−09
gradiente final: 8.9e−05 → convergió ✓
Límite de estabilidad: α < 2/10 = 0.2Descenso de gradiente sobre una cuadrática con historial.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | learning_rate |
| Comprobaciones (1) | convergio |
compmath run 171Entrenamiento de cualquier modelo por gradiente, ajuste del learning rate y diagnóstico de divergencias.
10.48550/arxiv.1609.04747 verificado en DataCite (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).Lagrange convierte una restricción en un término del objetivo, y su multiplicador mide el precio de esa restricción.
L = f(x) − λ(g(x) − c)
∇f = λ∇g en el óptimo
λ = tasa de mejora del óptimo por unidad de relajaciónOptimizar con una restricción de igualdad no se puede hacer anulando el gradiente del objetivo: el óptimo restringido rara vez es un punto crítico libre. La condición correcta es que los gradientes del objetivo y de la restricción sean paralelos: ∇f = λ∇g.
La intuición geométrica es clara. Si el gradiente del objetivo tuviera una componente tangente a la curva de restricción, se podría mejorar moviéndose a lo largo de ella. En el óptimo, esa componente tangente debe anularse, y eso ocurre exactamente cuando ambos gradientes son colineales.
El multiplicador λ no es un artificio de cálculo: tiene interpretación económica directa. Es la tasa a la que mejora el óptimo si se relaja la restricción una unidad —el precio sombra en programación lineal—. En el ejemplo del laboratorio, maximizar xy con x+y=10 da λ = 5: cada unidad adicional de presupuesto añade 5 al óptimo.
La generalización a restricciones de desigualdad son las condiciones KKT (clase 257), que añaden dos requisitos: los multiplicadores deben ser no negativos y debe cumplirse la holgura complementaria —una restricción inactiva tiene multiplicador nulo—. Toda la optimización con restricciones se construye sobre esta clase.
Maximizar xy sujeto a x + y = 10.
L = xy − λ(x + y − 10)
Condiciones:
∂L/∂x: y = λ
∂L/∂y: x = λ
restricción: x + y = 10
Solución: x = y = 5, λ = 5, valor óptimo = 25
Verificación con alternativas:
x=1 → 9 x=3 → 21 x=5 → 25 x=7 → 21 x=9 → 9
el máximo está en x=5 ✓
Interpretación de λ: si el presupuesto sube a 11,
el óptimo sube aproximadamente 5 unidades.Maximizar xy sujeto a x+y=10 con multiplicadores de Lagrange.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | valor_optimo, multiplicador_lambda |
| Comprobaciones (1) | es_el_maximo |
compmath run 172Optimización con restricciones, SVM con margen máximo, regularización vista como restricción, y precios sombra en asignación de recursos.
9780511804441 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).Fubini permite calcular una integral doble como dos integrales simples encadenadas.
∬f dA = ∫(∫f dx)dy
sobre un rectángulo: los límites son constantesUna integral doble acumula sobre una región del plano en lugar de sobre un intervalo. Su definición es un límite de sumas sobre una malla de rectángulos, análoga a la suma de Riemann de la clase 153.
El teorema de Fubini permite calcularla como dos integrales simples encadenadas, en cualquier orden, siempre que la función sea integrable. Esa reducción es lo que la hace calculable: en lugar de un límite bidimensional, dos aplicaciones del cálculo de una variable.
El coste computacional de la integración numérica en varias dimensiones crece exponencialmente: una malla con n puntos por dimensión requiere nᵈ evaluaciones. En dimensión 10 con 100 puntos por eje son 10²⁰ evaluaciones: imposible. Esa es la maldición de la dimensionalidad aplicada a la integración.
La salida es Monte Carlo (clase 198), cuyo error decae como 1/√n independientemente de la dimensión. Por eso toda expectativa de alta dimensión en machine learning se estima muestreando en lugar de integrando en malla: el ELBO de un VAE, la esperanza de una política en RL, cualquier integral sobre el espacio de parámetros.
Integral doble de xy sobre un rectángulo.
∬ xy dA sobre [0,2] × [0,3]
Por Fubini:
∫₀³ (∫₀² xy dx) dy = ∫₀³ (2y) dy = 9
Valor exacto: (2²/2)·(3²/2) = 2·4.5 = 9
Numérico con malla 200×200: 9.00000000
error: 1.1e−13 ✓
Coste: 40 000 evaluaciones para 2 dimensiones.
En 10 dimensiones serían 100¹⁰.Integral doble sobre un rectángulo por suma de Riemann.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | aproximacion, valor_exacto, error, subdivisiones |
| Comprobaciones (0) | — |
compmath run 173Probabilidades conjuntas, marginalización, cálculo de masas y centros de gravedad, y normalización de densidades multivariantes.
9781285740621 verificado en International ISBN Agency (2026-08-19).9781475741452 verificado en International ISBN Agency (2026-08-19).Una integral triple con densidad variable calcula masa; el volumen es el caso de densidad unitaria.
V = ∭ dV
m = ∭ ρ(x,y,z) dVLa integral triple extiende la acumulación a tres dimensiones. Con integrando 1 da el volumen; con una función de densidad da la masa. Esa distinción —volumen como caso particular de masa con densidad constante— es la que se generaliza a la probabilidad: la masa total de una densidad debe ser 1.
El coste crece con el cubo del refinamiento: una malla de 60 puntos por eje son 216 000 celdas para un cubo unitario. Ya en tres dimensiones la integración en malla empieza a ser cara, y en más dimensiones deja de ser viable.
Los cambios de coordenadas —cilíndricas, esféricas— simplifican regiones con simetría, al precio de introducir el jacobiano como factor: r en cilíndricas, r²sin φ en esféricas. Ese factor es el determinante de la clase 117 corrigiendo el cambio de volumen, y olvidarlo es el error clásico.
En probabilidad, la integral triple aparece al marginalizar una densidad conjunta de tres variables, y la normalización de la gaussiana multivariante es una integral de este tipo resuelta con un cambio de variable que diagonaliza la covarianza.
Volumen y masa de un cubo con densidad variable.
región: cubo unitario [0,1]³
densidad: ρ(x,y,z) = 1 + x
volumen numérico: 1.00000000 exacto 1 ✓
masa = ∭(1+x)dV = 1 + 1/2 = 1.5
masa numérica: 1.500000
error: 4.2e−07
malla: 60³ = 216 000 celdasVolumen y masa de un cubo con densidad variable.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | volumen_aproximado, volumen_exacto, masa_aproximada, masa_exacta_3/2, error_masa |
| Comprobaciones (0) | — |
compmath run 174Masa y centro de gravedad, marginalización de densidades conjuntas, normalización de distribuciones multivariantes y cálculo de momentos.
9781285740621 verificado en International ISBN Agency (2026-08-19).Un campo conservativo es el gradiente de un potencial; no todos los campos lo son.
campo: F(x,y) = (P, Q)
conservativo ⟺ F = ∇φ para algún potencial φ
condición necesaria: ∂P/∂y = ∂Q/∂xUn campo vectorial asigna un vector a cada punto: velocidad de un fluido, fuerza gravitatoria, dirección de descenso. La distinción fundamental es entre campos que derivan de un potencial y los que no.
Un campo conservativo es el gradiente de una función escalar. Su propiedad característica es que el trabajo entre dos puntos no depende del camino, solo de los extremos, y por tanto el trabajo en un circuito cerrado es cero. La gravedad es conservativa; el rozamiento no.
El campo F(x,y) = (−y, x) del laboratorio es puramente rotacional: en cada punto es perpendicular al radio, así que hace girar sin acercar ni alejar. No es conservativo, y su rotacional es no nulo (clase 176).
La conexión con optimización es exacta: el campo de gradientes de una función escalar es siempre conservativo por construcción, y esa es la razón por la que el descenso de gradiente no puede quedar atrapado en un ciclo. En cambio, en optimización de dos jugadores —los GAN de la clase 333— el campo de actualizaciones no es un gradiente de nada, puede tener componente rotacional, y de ahí que el entrenamiento pueda ciclar en lugar de converger.
Un campo rotacional y uno conservativo.
Campo F(x,y) = (−y, x) rotacional puro
en (1,0): (0, 1)
en (0,1): (−1, 0)
en (1,1): (−1, 1)
F·(x,y) = −xy + yx = 0 ✓ perpendicular al radio
Campo G = ∇(x²+y²) = (2x, 2y) conservativo
en (1,0): (2, 0)
en (1,1): (2, 2)
deriva del potencial φ = x²+y²Campo vectorial, líneas de flujo y campo conservativo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | F_es_perpendicular_al_radio, G_deriva_de_un_potencial |
compmath run 175Campos de fuerzas en física, campos de gradientes en optimización, dinámica de entrenamiento adversarial y flujos en modelos generativos continuos.
9781285740621 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1802.05642 verificado en DataCite (2026-08-19).La divergencia mide fuente o sumidero; el rotacional mide circulación local.
div F = ∂P/∂x + ∂Q/∂y
rot F = ∂Q/∂x − ∂P/∂y (en 2D)
div(∇φ) = Δφ (laplaciano)La divergencia y el rotacional son las dos formas de derivar un campo vectorial. La divergencia es un escalar que mide el flujo neto que sale de un entorno del punto: positiva indica fuente, negativa sumidero, nula indica que lo que entra sale. El rotacional mide la tendencia del campo a hacer girar un objeto colocado en ese punto.
Ambos aparecen en las ecuaciones de Maxwell y en la mecánica de fluidos, y su combinación da los teoremas integrales —Green, Gauss, Stokes— que relacionan lo que ocurre en el interior de una región con lo que ocurre en su frontera.
La divergencia del gradiente es el laplaciano, Δφ = div(∇φ), que es la traza del Hessiano. Ese operador aparece en la ecuación del calor, en la de ondas y —lo que importa aquí— en el Laplaciano de un grafo (clase 336), que es su análogo discreto y es la base del clustering espectral y de las GNN.
El teorema clave para esta parte es que el rotacional de un gradiente es siempre cero. Por tanto, un campo con rotacional no nulo no puede ser un campo de gradientes, y ese es el criterio para detectar dinámicas que no derivan de ninguna función objetivo.
Divergencia y rotacional de F = (x², xy).
F(x,y) = (x², xy) en el punto (1,2)
div F = ∂(x²)/∂x + ∂(xy)/∂y = 2x + x = 3x
analítica en (1,2): 3
numérica: 3.000000 ✓
rot F = ∂(xy)/∂x − ∂(x²)/∂y = y − 0 = y
analítica en (1,2): 2
numérica: 2.000000 ✓
rot ≠ 0 → F NO es un campo de gradientesDivergencia y rotacional calculados numéricamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | divergencia_numerica, divergencia_analitica_2x+x, rotacional_numerico, rotacional_analitico_y |
| Comprobaciones (0) | — |
compmath run 176Mecánica de fluidos, electromagnetismo, laplaciano de grafos, difusión y detección de dinámicas no conservativas en entrenamiento adversarial.
9781285740621 verificado en International ISBN Agency (2026-08-19).El cálculo matricial da fórmulas cerradas para gradientes respecto a vectores y matrices.
∂(aᵀx)/∂x = a
∂(xᵀAx)/∂x = (A + Aᵀ)x, y 2Ax si A es simétrica
∂‖x‖²/∂x = 2xDerivar respecto a un vector o una matriz componente a componente es tedioso y propenso a error. El cálculo matricial ofrece fórmulas cerradas para los patrones que aparecen una y otra vez, y saberlas de memoria acelera cualquier deducción en machine learning.
Las dos más útiles son inmediatas: la derivada de una forma lineal aᵀx es a, y la de una forma cuadrática xᵀAx es (A + Aᵀ)x, que se reduce a 2Ax cuando A es simétrica —el caso habitual, porque toda forma cuadrática se puede escribir con matriz simétrica—.
El escollo práctico es la convención de layout. En la convención del denominador el gradiente es un vector columna; en la del numerador, una fila. Ambas son correctas y las fórmulas difieren en una transposición. Mezclarlas produce errores de shape que a veces no se detectan porque las dimensiones cuadran por casualidad.
La recomendación práctica es fijar una convención, declararla en el código y verificar siempre las fórmulas contra diferencias finitas. El laboratorio hace exactamente eso, y es lo mismo que hace torch.autograd.gradcheck.
Dos identidades verificadas numéricamente.
x = (1, 2), a = (4, −1), A = [[2,1],[1,3]] (simétrica)
Forma lineal aᵀx:
fórmula: ∂/∂x = a = (4, −1)
numérica: (4.000000, −1.000000) ✓
Forma cuadrática xᵀAx:
fórmula: (A + Aᵀ)x = 2Ax = (8, 14)
numérica: (8.00000, 14.00000) ✓
Convención usada: denominador (gradiente como columna)Identidades básicas de cálculo matricial.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 177Deducción de gradientes de funciones de pérdida, backpropagation analítica, métodos de segundo orden y cualquier derivación en un paper de machine learning.
9781119541202 verificado en International ISBN Agency (2026-08-19).El gradiente de la pérdida cuadrática es 2Xᵀ(Xw − y)/n: esa expresión es el gradiente de una capa lineal.
L(w) = ‖Xw − y‖²/n
∇L = 2Xᵀ(Xw − y)/nEsta clase deduce la fórmula que más se usa en todo el machine learning. La pérdida cuadrática media de un modelo lineal es ‖Xw − y‖²/n, y su gradiente respecto a los pesos es 2Xᵀr/n, donde r = Xw − y es el vector de residuos.
La estructura de esa expresión merece leerse despacio, porque es la misma en modelos mucho más complejos. El residuo mide el error de cada observación; Xᵀ lo proyecta de vuelta al espacio de parámetros, atribuyendo a cada peso la parte del error que le corresponde según su feature; y la división por n promedia.
En una red neuronal ocurre exactamente lo mismo capa a capa: se calcula el error en la salida y se «retropropaga» multiplicando por la transpuesta de la matriz de pesos. La aparición de Wᵀ en backpropagation no es un truco: es esta fórmula.
Igualar el gradiente a cero da XᵀXw = Xᵀy, las ecuaciones normales de la clase 131. Optimización iterativa y solución cerrada llegan al mismo sitio; la primera escala a millones de parámetros y la segunda no.
Gradiente de la pérdida cuadrática de un modelo lineal.
X = [[1,2],[2,1],[3,4]] y = (5, 4, 11) w = (1, 1)
predicciones: Xw = (3, 3, 7)
residuos r = Xw − y = (−2, −1, −4)
MSE = (4 + 1 + 16)/3 = 7.0
∇w = 2Xᵀr/n = 2·(−16, −21)/3 = (−10.6667, −14.0)
numérico: (−10.6667, −14.0) ✓
Igualar a cero → ecuaciones normales XᵀXw = XᵀyGradiente de una pérdida cuadrática respecto de los pesos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | perdida_MSE |
| Comprobaciones (2) | coinciden, esto_es_una_capa_lineal |
compmath run 178Gradiente de una capa lineal, regresión por descenso de gradiente, deducción de backpropagation y toda función de pérdida cuadrática.
9780262337373 verificado en International ISBN Agency (2026-08-19).La autodiferenciación en modo reverso obtiene todos los gradientes con un barrido hacia adelante y uno hacia atrás.
coste del modo reverso: O(1) barridos, independiente del número de variables
coste de diferencias finitas: 2 evaluaciones por variableLa autodiferenciación no es derivación simbólica ni numérica: es una tercera opción. Registra las operaciones elementales que se ejecutan formando un grafo de cómputo, y luego aplica la regla de la cadena sobre ese grafo. El resultado es exacto salvo redondeo, sin la explosión de expresiones del cálculo simbólico ni el error de truncamiento de las diferencias finitas.
El modo reverso es el que usan los frameworks de deep learning. Hace un barrido hacia adelante guardando valores intermedios y otro hacia atrás propagando derivadas, y obtiene todas las derivadas parciales en ese único par de barridos. Con un millón de parámetros, las diferencias finitas necesitarían dos millones de evaluaciones; el modo reverso necesita el equivalente a unas pocas.
El precio es la memoria: hay que guardar los valores intermedios del barrido hacia adelante para usarlos en el de vuelta. Esa es la razón por la que entrenar consume mucha más memoria que inferir, y por la que existe el gradient checkpointing, que recalcula partes en lugar de guardarlas.
La implementación del programa (Var en part08.py) tiene unas cien líneas y hace exactamente lo mismo que PyTorch en su núcleo: cada operación registra cómo propagar el gradiente, backward() construye el orden topológico y lo recorre al revés acumulando. Lo que añaden los frameworks reales es tensores, GPU, fusión de operaciones y compilación, no un mecanismo distinto.
Autodiferenciación de una expresión con dos variables.
z = (x·y + sin x)·y² en x = 2, y = 3
valor: 63.1852
dz/dx autodiff: 30.7482
dz/dx numérico: 30.7482 ✓
dz/dy autodiff: 60.7902
dz/dy numérico: 60.7902 ✓
Coste:
autodiff: 1 barrido adelante + 1 atrás
diferencias finitas: 2 evaluaciones por variableAutodiferenciación en modo reverso sobre el grafo de cómputo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | valor, dz/dx_autodiff, dz/dx_numerico, dz/dy_autodiff, dz/dy_numerico |
| Comprobaciones (1) | coinciden |
compmath run 179Entrenamiento de cualquier red neuronal, optimización de hiperparámetros por gradiente, física diferenciable y gradientes de simuladores.
9780898717761 verificado en International ISBN Agency (2026-08-19).Backpropagation manual y autodiferenciación dan exactamente el mismo número: autograd no es magia.
cadena hacia atrás: dL/dw = dL/da · da/dz · dz/dw
tanh': 1 − tanh²El capstone cierra la parte comparando dos caminos hacia el mismo resultado. Se define una red mínima —dos capas con tanh y pérdida cuadrática—, se derivan sus gradientes a mano aplicando la regla de la cadena paso a paso, y se calculan también con el motor de autodiferenciación. Ambos deben coincidir hasta el último dígito.
La derivación manual hace explícito lo que autograd oculta. Se empieza por dL/da₂, se multiplica por la derivada de la activación para obtener dL/dz₂, y se distribuye a los parámetros de esa capa. Después se propaga hacia atrás multiplicando por el peso, se vuelve a multiplicar por la derivada de la activación, y se distribuye a la capa anterior. Ese patrón —error, derivada de activación, distribución, propagación— se repite capa a capa.
Que los dos caminos coincidan exactamente es la comprobación que convierte autograd de caja negra en herramienta comprendida. Un practicante que ha hecho este ejercicio una vez sabe qué está calculando loss.backward(), por qué hace falta zero_grad() y por qué el gradiente se desvanece en redes profundas.
Es también la técnica de depuración estándar: cuando un gradiente personalizado parece mal, se compara contra diferencias finitas. torch.autograd.gradcheck hace exactamente esa comparación, y es la primera herramienta que hay que usar al implementar una capa nueva.
Comparar backpropagation manual y automática.
Red: x → tanh(w₁x + b₁) → tanh(w₂h + b₂) → MSE
x = 0.5, objetivo = 1.0
w₁ = 1.2, b₁ = −0.3, w₂ = 0.8, b₂ = 0.1
predicción: 0.5216
pérdida: 0.2288
parámetro manual autodiff coinciden
w₁ −0.1495 −0.1495 ✓
b₁ −0.2990 −0.2990 ✓
w₂ −0.2016 −0.2016 ✓
b₂ −0.6970 −0.6970 ✓
Conclusión: autograd es la regla de la cadena
en orden topológico inverso.Capstone: backpropagation manual y automática sobre la misma red.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | prediccion, objetivo, perdida |
| Comprobaciones (1) | coinciden |
compmath run 180Depuración de gradientes, implementación de capas personalizadas, comprensión de loss.backward() y diagnóstico de gradientes que se desvanecen.
10.1038/323533a0 verificado en Crossref (2026-08-19).torch.autograd.gradcheck — Diferenciación automática: el tema de esta clase · URL de la fuente primaria, pendiente de resolver.Axiomas, probabilidad condicional, Bayes, variables aleatorias, esperanza, varianza, distribuciones clave, LGN, TCL, Monte Carlo y cadenas de Markov.
La probabilidad es el lenguaje con el que se habla de lo que no se sabe. No mide ignorancia vaga: la mide con la misma precisión con la que el álgebra lineal mide una rotación. Esta parte construye ese lenguaje desde los axiomas hasta las cadenas de Markov, y en el camino desarma tres o cuatro confusiones que arruinan más análisis de datos que cualquier error de programación.
Las clases 181 a 186 son los cimientos. Un experimento aleatorio produce resultados de un espacio muestral, un evento es un subconjunto de ese espacio, y una probabilidad es una función que asigna números a eventos cumpliendo tres axiomas de Kolmogorov. Todo lo demás —la regla de la suma, la del producto, la probabilidad condicional, la independencia y el teorema de Bayes— se deduce de ahí. No hay nada más que memorizar.
El punto de inflexión es la clase 184, y merece detenerse: condicionar es cambiar de espacio muestral. P(A|B) no es una probabilidad distinta de A, es la probabilidad de A dentro de un mundo donde B ya ocurrió. De esa lectura sale de forma natural que P(A|B) y P(B|A) no tienen por qué parecerse en nada, y la clase 186 lo muestra con el ejemplo más costoso de la vida real: un test con 99 % de sensibilidad y 99 % de especificidad, aplicado a una enfermedad que afecta a 1 de cada 1000 personas, produce un positivo que solo acierta el 9 % de las veces. Diez falsos positivos por cada verdadero. Confundir esas dos probabilidades se llama falacia del fiscal y ha mandado gente a la cárcel.
Las clases 187 a 195 introducen las variables aleatorias y sus resúmenes. Una variable aleatoria no es una variable ni es aleatoria: es una función del espacio muestral a los números. Ese cambio de perspectiva permite hablar de esperanza, varianza, covarianza y correlación, y trabajar con distribuciones concretas —Bernoulli, binomial, Poisson, exponencial y normal— en vez de con espacios muestrales explícitos. Dos hechos hay que grabar: la esperanza es lineal siempre, incluso con variables dependientes; la varianza solo se suma bajo independencia.
Las clases 196 y 197 son los dos teoremas límite que sostienen toda la estadística. La ley de los grandes números dice que la media muestral converge a la media real; el teorema central del límite dice a qué velocidad y con qué forma. El TCL es el que explica por qué la campana de Gauss aparece en fenómenos que no tienen nada de gaussiano: si un resultado es la suma de muchos efectos pequeños e independientes, su distribución tiende a la normal, venga de donde venga.
Las clases 198 y 199 pasan a la simulación. Monte Carlo estima integrales y probabilidades muestreando, con un error que cae como 1/√n: cuadruplicar el número de muestras solo duplica la precisión, y esa lentitud es el precio a cambio de que la velocidad no dependa de la dimensión. Las cadenas de Markov formalizan los procesos sin memoria y su distribución estacionaria, que es la base de MCMC, de PageRank y del proceso de difusión que genera imágenes.
El vínculo con la inteligencia artificial es directo y no metafórico. Un modelo de lenguaje es literalmente una distribución condicional P(token | contexto); la temperatura de muestreo modifica esa distribución; un modelo de difusión es un proceso estocástico cuyo reverso se aprende; y toda función de pérdida por máxima verosimilitud es un enunciado probabilístico. Sin esta parte, el resto del programa se lee pero no se entiende.
Un modelo de lenguaje es una distribución condicional sobre el siguiente token; la difusión es un proceso estocástico con reverso aprendido.
| Término | Definición | Clase |
|---|---|---|
| Axiomas de Kolmogorov | P(A) ≥ 0, P(Ω) = 1 y aditividad para eventos disjuntos. Toda la teoría se deduce de estos tres. | 182 |
| Cadena de Markov | Proceso donde el siguiente estado depende solo del actual, no de la historia previa. | 199 |
| Conjugación | Prior y posterior de la misma familia. Beta es conjugada de la binomial y la actualización es sumar. | 200 |
| Corrección de Bessel | Dividir entre n−1 en vez de n para que la varianza muestral sea un estimador insesgado. | 190 |
| Correlación de Pearson | Covarianza normalizada por las desviaciones. Vive en [−1, 1] y solo detecta relación lineal. | 191 |
| Covarianza | E[(X−μₓ)(Y−μᵧ)]. Mide variación conjunta; su valor depende de las unidades. | 191 |
| Distribución binomial | Número de éxitos en n ensayos independientes. Media np, varianza np(1−p). | 192 |
| Distribución conjunta | Probabilidad de pares de valores. De ella se obtienen marginales sumando y condicionales dividiendo. | 195 |
| Distribución de Poisson | Cuenta eventos raros en un intervalo. Su media y su varianza valen ambas λ. | 193 |
| Distribución estacionaria | Vector π que cumple πP = π. Una cadena ergódica converge a él desde cualquier inicio. | 199 |
| Distribución marginal | Distribución de una variable obtenida sumando la conjunta sobre la otra. | 195 |
| Distribución normal | Campana simétrica definida por μ y σ. Regla 68-95-99,7 dentro de una, dos y tres desviaciones. | 194 |
| Ensayo de Bernoulli | Experimento con dos resultados y probabilidad p de éxito. Ladrillo de la binomial. | 192 |
| Error estándar | σ/√n. Desviación estándar de la media muestral; cae como la raíz del tamaño. | 197 |
| Espacio muestral | Conjunto Ω de todos los resultados posibles de un experimento. Se escribe antes que cualquier cálculo. | 181 |
| Esperanza | E[X] = Σ x·P(X=x). Media ponderada por probabilidad; es lineal incluso sin independencia. | 189 |
| Evento | Subconjunto del espacio muestral. Ocurre si el resultado observado pertenece a él. | 181 |
| Experimento aleatorio | Procedimiento cuyo resultado no se puede predecir individualmente, pero sí describir en conjunto. | 181 |
| Falacia del jugador | Creer que los resultados pasados compensan a los futuros. La moneda no tiene memoria. | 196 |
| Falta de memoria | Propiedad de la exponencial y la geométrica: P(X > s+t | X > s) = P(X > t). | 193 |
| Función de densidad | pdf. Su integral sobre un intervalo da la probabilidad. Puede superar 1 sin contradicción. | 188 |
| Función de distribución | cdf. F(x) = P(X ≤ x). Es no decreciente y va de 0 a 1. | 188 |
| Función de masa | pmf. Asigna a cada valor discreto su probabilidad; todas suman 1. | 187 |
| Inclusión-exclusión | P(A∪B) = P(A) + P(B) − P(A∩B). El término restado corrige el solapamiento contado dos veces. | 183 |
| Independencia | A y B son independientes si P(A∩B) = P(A)·P(B). Se comprueba, no se supone. | 185 |
| Ley de los grandes números | La media muestral converge a la esperanza cuando n crece. No dice nada de una muestra concreta. | 196 |
| Monte Carlo | Estimar cantidades por muestreo aleatorio. Su error cae como 1/√n en cualquier dimensión. | 198 |
| Prior y posterior | Creencia antes y después de ver datos. Bayes es la regla que lleva de una a otra. | 200 |
| Probabilidad base | Prevalencia del evento antes de ver evidencia. Ignorarla es la falacia de la tasa base. | 186 |
| Probabilidad condicional | P(A|B) = P(A∩B)/P(B). Es la probabilidad de A dentro del espacio reducido a B. | 184 |
| Puntuación z | z = (x − μ)/σ. Expresa un valor en desviaciones estándar y permite comparar escalas distintas. | 194 |
| Teorema central del límite | La media de n variables iid tiende a una normal de media μ y desviación σ/√n. | 197 |
| Teorema de Bayes | P(H|E) = P(E|H)·P(H)/P(E). Invierte el condicionamiento y actualiza una creencia con evidencia. | 186 |
| Variable aleatoria | Función que asigna un número a cada resultado del espacio muestral. Ni es variable ni es aleatoria. | 187 |
| Varianza | Var(X) = E[(X−μ)²] = E[X²] − E[X]². Mide dispersión en unidades al cuadrado. | 190 |
Antes de calcular ninguna probabilidad hay que escribir el espacio muestral.
Ω = conjunto de resultados posibles
A ⊆ Ω es un evento
modelo equiprobable: P(A) = |A| / |Ω|Un experimento aleatorio es cualquier procedimiento cuyo resultado individual no se puede predecir pero cuyo comportamiento agregado sí se puede describir. Lanzar dos dados, medir el tiempo entre dos peticiones a un servidor o muestrear el siguiente token de un modelo de lenguaje son experimentos aleatorios en ese sentido técnico.
El espacio muestral Ω es el conjunto de todos los resultados posibles, y escribirlo explícitamente es el paso que más problemas resuelve. La mayoría de los errores clásicos de probabilidad —el problema de Monty Hall, la paradoja de los dos niños, la del cumpleaños— no son errores de cálculo: son espacios muestrales mal escritos.
Un evento es un subconjunto de Ω. «La suma es 7» no es un resultado, es el conjunto de los seis pares que suman 7. Esta identificación entre eventos y conjuntos es lo que permite usar unión, intersección y complemento como operaciones lógicas: «A o B» es A∪B, «A y B» es A∩B, «no A» es Aᶜ.
El modelo equiprobable —contar casos favorables entre casos posibles— es solo un caso particular, válido cuando hay simetría física que justifique que todos los resultados pesan igual. Con dos dados, Ω tiene 36 pares ordenados, no 21 sumas: las sumas no son equiprobables, y confundir «resultados» con «valores de interés» es el error que hace que la gente calcule P(suma=7) = 1/11.
Dos dados equilibrados: el espacio muestral y dos eventos.
Ω = {(1,1), (1,2), ..., (6,6)} |Ω| = 6 × 6 = 36
A = "la suma es 7"
= {(1,6), (2,5), (3,4), (4,3), (5,2), (6,1)} |A| = 6
P(A) = 6/36 = 1/6 ≈ 0,1667
B = "ambos dados son pares"
= {2,4,6} × {2,4,6} |B| = 9
P(B) = 9/36 = 0,25
Error frecuente: tomar Ω = {2,3,...,12} y decir P(suma=7) = 1/11.
Esas 11 sumas NO son equiprobables: 7 sale de 6 formas, 2 sale de 1.Espacio muestral, eventos y su probabilidad en un modelo equiprobable.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | |Ω|, evento_suma_7, P(suma=7), evento_ambos_pares, P(ambos_pares), P(complemento_suma_7), suma_mas_probable |
| Comprobaciones (0) | — |
compmath run 181Diseño de experimentos, cálculo de tasas de colisión en tablas hash, análisis de casos en pruebas aleatorizadas y cualquier modelado que empiece por enumerar lo que puede pasar.
9780134753119 verificado en International ISBN Agency (2026-08-20).Tres axiomas de Kolmogorov generan toda la teoría de la probabilidad.
1. P(A) ≥ 0
2. P(Ω) = 1
3. A∩B = ∅ ⟹ P(A∪B) = P(A) + P(B)
consecuencias: P(∅) = 0, P(Aᶜ) = 1 − P(A)En 1933 Kolmogorov redujo la probabilidad a tres reglas. La primera dice que no hay probabilidades negativas; la segunda, que algo tiene que pasar; la tercera, que si dos eventos no pueden ocurrir a la vez, la probabilidad de que ocurra alguno es la suma. Nada más. Todo teorema de probabilidad es una consecuencia de estos tres enunciados.
De ellos se deducen inmediatamente las propiedades que se usan a diario. Como Ω y ∅ son disjuntos y su unión es Ω, resulta P(∅) = 0. Como A y Aᶜ son disjuntos y su unión es Ω, resulta la regla del complemento P(Aᶜ) = 1 − P(A), que es la herramienta más rentable del cálculo elemental: casi siempre es más fácil contar lo que no pasa.
También se deduce la monotonía: si A ⊆ B entonces P(A) ≤ P(B), y por tanto ninguna probabilidad puede pasar de 1. Un cálculo que devuelva 1,3 no está mal redondeado: está mal planteado, casi siempre por sumar eventos que se solapan sin restar la intersección.
Los axiomas no dicen qué probabilidades asignar. Esa es una decisión de modelado —por simetría, por frecuencia observada o por creencia subjetiva— y los axiomas solo garantizan que la asignación sea coherente. Esa separación entre estructura y modelo es lo que permite que frecuentistas y bayesianos usen la misma matemática y discrepen en la interpretación.
Comprobación de los axiomas sobre una distribución de tres resultados.
Ω = {a, b, c} P(a)=0,5 P(b)=0,3 P(c)=0,2
Axioma 1 no negatividad: 0,5 ≥ 0, 0,3 ≥ 0, 0,2 ≥ 0 ✓
Axioma 2 normalización: 0,5 + 0,3 + 0,2 = 1,0 ✓
Axioma 3 aditividad: P({a,b}) = 0,5 + 0,3 = 0,8 ✓
Consecuencias:
P(∅) = 0
P(aᶜ) = 1 − 0,5 = 0,5 = P(b) + P(c) ✓
A={a} ⊆ B={a,b}: 0,5 ≤ 0,8 ✓Los tres axiomas de Kolmogorov verificados sobre un modelo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | P(∅), P(Aᶜ) |
| Comprobaciones (5) | axioma_1_no_negatividad, axioma_2_P(Ω)=1, axioma_3_aditividad, monotonia, P_nunca_supera_1 |
compmath run 182Validación de distribuciones en código —comprobar que una salida softmax suma 1—, verificación de modelos probabilísticos y depuración de simuladores.
La regla de la suma resta la intersección; olvidarla infla la probabilidad.
P(A∪B) = P(A) + P(B) − P(A∩B)
si A y B son disjuntos: P(A∪B) = P(A) + P(B)
P(A∩B) = P(A)·P(B|A) (regla del producto)La regla de la suma general es inclusión-exclusión, la misma idea que apareció en combinatoria en la parte 04: al sumar P(A) y P(B) se cuentan dos veces los resultados que están en ambos, y hay que restarlos una vez. El caso simple —sumar sin más— solo vale cuando los eventos son mutuamente excluyentes, es decir, cuando su intersección es vacía.
La distinción importa porque el error es silencioso. Si dos eventos se solapan poco, la suma sin corregir da un número plausible pero equivocado, y nada avisa. Solo cuando el solapamiento es grande la suma supera 1 y el fallo se hace visible. La costumbre correcta es preguntarse siempre si los eventos pueden ocurrir a la vez.
La regla del producto es la definición de probabilidad condicional despejada: P(A∩B) = P(A)·P(B|A). Se lee como una secuencia: primero ocurre A, y después B dado que A ocurrió. Encadenada, produce la regla de la cadena probabilística P(A₁∩…∩Aₙ) = P(A₁)·P(A₂|A₁)·…·P(Aₙ|A₁…Aₙ₋₁), que es exactamente cómo un modelo de lenguaje autorregresivo factoriza la probabilidad de una frase.
Solo cuando hay independencia el producto se simplifica a P(A)·P(B). Ese atajo es tan cómodo que se aplica por inercia, y la clase 185 insiste en que la independencia es una propiedad que se verifica, no una comodidad que se asume.
Dos dados: A = "el primero es 1", B = "la suma es 7".
P(A) = 6/36 = 0,1667
P(B) = 6/36 = 0,1667
A∩B = {(1,6)} P(A∩B) = 1/36 = 0,0278
inclusión-exclusión:
P(A∪B) = 0,1667 + 0,1667 − 0,0278 = 0,3056
conteo directo: |A∪B| = 11 pares 11/36 = 0,3056 ✓
sumar sin restar daría 0,3333: un 9 % de más, sin ningún aviso.Regla de la suma con y sin exclusión mutua.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | P(A)_primer_dado_1, P(B)_suma_7, P(A∩B), P(A∪B)_inclusion_exclusion, P(A∪B)_directo, P(A)·P(B) |
| Comprobaciones (2) | son_mutuamente_excluyentes, son_independientes |
compmath run 183Cálculo de tasas de fallo en sistemas redundantes, unión de condiciones en filtros de datos y factorización autorregresiva de secuencias.
9780134753119 verificado en International ISBN Agency (2026-08-20).Condicionar es reducir el espacio muestral, no cambiar la realidad.
P(A|B) = P(A∩B) / P(B), con P(B) > 0
P(A∩B) = P(B)·P(A|B)
en general P(A|B) ≠ P(B|A)La probabilidad condicional responde a: «sabiendo que ocurrió B, ¿cuál es ahora la probabilidad de A?». La fórmula P(A|B) = P(A∩B)/P(B) se entiende mejor leída como un cambio de universo: el denominador reemplaza a P(Ω) = 1 porque el nuevo espacio muestral es B, y el numerador cuenta la parte de A que sobrevive dentro de él.
Nada cambia en el mundo al condicionar. Los dados ya cayeron; lo que cambia es la información disponible, y con ella el reparto de probabilidad. Esta lectura evita la idea mágica de que observar algo «modifica» el resultado, y explica por qué la probabilidad condicional es la herramienta natural para razonar con evidencia parcial.
La consecuencia práctica es que P(A|B) y P(B|A) son cantidades distintas. P(positivo | enfermo) es una propiedad del test; P(enfermo | positivo) es lo que le importa al paciente, y depende además de cuánta gente está enferma. Intercambiarlas es la falacia del fiscal, y la clase 186 pone los números.
Condicionar es además una técnica de cálculo. La ley de probabilidad total parte el espacio en casos disjuntos y suma: P(A) = Σ P(A|Bᵢ)·P(Bᵢ). Casi todo problema difícil de probabilidad se vuelve fácil al condicionar sobre la primera cosa que ocurre.
Dos dados: probabilidad de que la suma pase de 9, sabiendo que el primero salió 6.
A = "suma > 9" |A| = 6 P(A) = 6/36 = 0,1667
B = "primer dado = 6" |B| = 6 P(B) = 6/36 = 0,1667
A∩B = {(6,4), (6,5), (6,6)} P(A∩B) = 3/36 = 0,0833
P(A|B) = 0,0833 / 0,1667 = 0,5
Lectura directa: el espacio se reduce de 36 a 6 pares,
y 3 de esos 6 cumplen la condición → 3/6 = 0,5 ✓
La información triplicó la probabilidad: de 0,1667 a 0,5.P(A|B) cambia el espacio muestral, no la realidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | P(suma>9), P(primer_dado=6), P(suma>9 | primer=6), formula_P(A∩B)/P(B), espacio_reducido |
| Comprobaciones (1) | la_informacion_cambia_la_probabilidad |
compmath run 184Diagnóstico médico, filtros de spam, sistemas de recomendación y toda la factorización condicional que usan los modelos generativos.
9780134753119 verificado en International ISBN Agency (2026-08-20).La independencia es una igualdad que se verifica, no una suposición cómoda.
A ⫫ B ⟺ P(A∩B) = P(A)·P(B)
equivalente: P(A|B) = P(A)
independencia mutua exige la factorización para todo subconjuntoDos eventos son independientes cuando saber que uno ocurrió no cambia la probabilidad del otro. La definición operativa es la factorización P(A∩B) = P(A)·P(B), y la forma equivalente P(A|B) = P(A) deja claro el contenido intuitivo: la información no aporta nada.
Independencia no es lo mismo que exclusión mutua; de hecho son casi opuestas. Si A y B son excluyentes y ambos tienen probabilidad positiva, saber que ocurrió A garantiza que B no ocurrió, lo cual es una dependencia máxima. Confundir ambos conceptos es el error más común de esta clase.
Con más de dos eventos, la independencia por pares no basta. Existen tríos donde cada par factoriza pero el trío no, y en esos casos las conclusiones extraídas de suponer independencia mutua son falsas. La independencia mutua exige que la factorización se cumpla para todos los subconjuntos, no solo para los pares.
En la práctica, la independencia casi nunca es exacta: es una aproximación de modelado. Naive Bayes supone que las palabras de un texto son condicionalmente independientes dadas las clases, lo cual es falso, y aun así funciona razonablemente. El pecado no es suponer independencia, es suponerla sin decirlo y luego interpretar los resultados como si fuera cierta.
Tres eventos sobre dos lanzamientos de moneda.
Ω = {CC, CX, XC, XX}, equiprobables
A = "primera cara" P(A) = 0,5
B = "segunda cara" P(B) = 0,5
C = "ambas iguales" P(C) = 0,5
A∩B = {CC} P = 0,25 = 0,5 × 0,5 A ⫫ B ✓
A∩C = {CC} P = 0,25 = 0,5 × 0,5 A ⫫ C ✓
B∩C = {CC} P = 0,25 = 0,5 × 0,5 B ⫫ C ✓
A∩B∩C = {CC} P = 0,25
producto de los tres = 0,125 0,25 ≠ 0,125
Independientes por pares, NO mutuamente independientes.Independencia se comprueba, no se supone.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | P(A), P(B), P(A∩B), P(C), P(A∩C), P(A∩B∩C) |
| Comprobaciones (3) | A_y_B_independientes, A_y_C_independientes, independencia_por_pares_no_implica_conjunta |
compmath run 185Naive Bayes, análisis de fiabilidad de componentes, validación cruzada con datos temporales y todo supuesto de muestras iid en aprendizaje automático.
Un test muy preciso sobre una enfermedad rara produce sobre todo falsos positivos.
P(H|E) = P(E|H)·P(H) / P(E)
P(E) = P(E|H)·P(H) + P(E|Hᶜ)·P(Hᶜ)
posterior ∝ verosimilitud × priorEl teorema de Bayes invierte el condicionamiento: convierte P(E|H), que suele ser lo que se sabe del mecanismo, en P(H|E), que es lo que se quiere saber tras observar la evidencia. Su demostración cabe en una línea —basta escribir P(H∩E) de las dos maneras posibles— y su importancia es difícil de exagerar.
La lectura que hay que interiorizar es posterior ∝ verosimilitud × prior. La verosimilitud P(E|H) mide cuán bien la hipótesis explica lo observado; el prior P(H) mide cuán plausible era la hipótesis de entrada. Un test excelente no puede compensar un prior muy bajo, y esa es la fuente de la falacia de la tasa base.
El caso numérico canónico: enfermedad con prevalencia 0,1 %, test con 99 % de sensibilidad y 99 % de especificidad. Entre 100 000 personas hay 100 enfermas, de las que el test marca 99, y 99 900 sanas, de las que marca 999. Total de positivos: 1098, de los cuales solo 99 están enfermos. P(enfermo | positivo) ≈ 9 %. Diez falsos positivos por cada verdadero, y el test no tiene ningún defecto.
La misma estructura aparece en juicios —«la probabilidad de esta coincidencia por azar es 1 entre un millón» no es la probabilidad de inocencia—, en detección de fraude, en alertas de seguridad y en cualquier clasificador aplicado a una clase minoritaria. Por eso los sistemas de detección de eventos raros se evalúan con precisión y exhaustividad, no con exactitud.
Prevalencia 0,1 %, sensibilidad 99 %, especificidad 99 %.
Sobre 100 000 personas:
enfermos (100) sanos (99 900) total
test + 99 999 1 098
test − 1 98 901 98 902
P(enfermo | +) = 99 / 1 098 = 0,0902 ≈ 9 %
Por la fórmula:
P(+) = 0,99 × 0,001 + 0,01 × 0,999 = 0,01098
P(enfermo|+) = (0,99 × 0,001) / 0,01098 = 0,0902 ✓
falsos positivos por cada verdadero: 999 / 99 ≈ 10,1
Si la prevalencia sube al 10 %, P(enfermo|+) sube al 92 %.
Cambió el prior, no el test.Test médico: por qué un positivo no significa enfermedad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | prevalencia_previa, sensibilidad_P(+|enfermo), especificidad_P(-|sano), P(+), P(enfermo|+), falsos_positivos_por_verdadero, con_prevalencia_10% |
| Comprobaciones (0) | — |
compmath run 186Cribado médico, detección de fraude, filtros antispam, pruebas forenses y evaluación de clasificadores con clases desbalanceadas.
9781439840955 verificado en International ISBN Agency (2026-08-19).Una variable aleatoria discreta se describe por su masa de probabilidad y su acumulada.
pmf: p(x) = P(X = x), Σ p(x) = 1
cdf: F(x) = P(X ≤ x)
P(a < X ≤ b) = F(b) − F(a)Una variable aleatoria es una función que asigna un número a cada resultado del espacio muestral. El nombre es histórico y engañoso: ni es una variable en el sentido del álgebra, ni es aleatoria —la función es perfectamente determinista; lo aleatorio es su argumento—. Verla como función es lo que permite sumarlas, componerlas y tomar esperanzas.
Cuando el conjunto de valores es finito o numerable, la variable es discreta y queda descrita por su función de masa p(x) = P(X = x). Las dos condiciones que debe cumplir son las heredadas de los axiomas: valores no negativos y suma total igual a 1. Cualquier vector de números que cumpla eso es una distribución discreta válida, y una salida softmax lo es por construcción.
La función de distribución acumulada F(x) = P(X ≤ x) recoge la misma información en otra forma. Es no decreciente, empieza en 0 y termina en 1, y sirve para calcular probabilidades de intervalos restando. En la práctica, la cdf es también el mecanismo para generar muestras: aplicar su inversa a un uniforme produce muestras de la distribución, técnica que la clase 198 usa.
El paso de un espacio muestral a una variable aleatoria es una simplificación deliberada: se pierde información sobre qué resultado ocurrió y se conserva solo el número de interés. Esa pérdida es justamente lo que hace manejable el modelado.
Una variable con cinco valores: masa, acumulada y esperanza.
x 0 1 2 3 4
p(x) 0,1 0,2 0,4 0,2 0,1 suma = 1,0 ✓
F(x) 0,1 0,3 0,7 0,9 1,0 no decreciente ✓
P(X ≤ 2) = F(2) = 0,7
P(X > 2) = 1 − 0,7 = 0,3
P(1 < X ≤ 3) = F(3) − F(1) = 0,9 − 0,3 = 0,6
E[X] = 0(0,1) + 1(0,2) + 2(0,4) + 3(0,2) + 4(0,1) = 2,0
La distribución es simétrica en torno a 2, y la esperanza lo confirma.Variable aleatoria discreta: pmf, cdf y coherencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | suma_pmf, P(X<=2), P(X>2), esperanza, moda, mediana |
| Comprobaciones (0) | — |
compmath run 187Distribuciones sobre vocabularios en modelos de lenguaje, conteos de eventos, modelado de clases en clasificación y muestreo por transformada inversa.
9780134753119 verificado en International ISBN Agency (2026-08-20).En una variable continua la densidad no es probabilidad y puede superar 1.
P(a < X ≤ b) = ∫ₐᵇ f(x) dx
∫ f(x) dx = 1 sobre todo el soporte
P(X = c) = 0 para todo cUna variable continua toma valores en un intervalo, y ahí ocurre algo que sorprende: la probabilidad de cualquier valor concreto es cero. No porque sea imposible, sino porque hay infinitos valores y la probabilidad total es 1. Lo que tiene probabilidad positiva son los intervalos, y se obtiene integrando.
La función de densidad f(x) no es una probabilidad: es una probabilidad por unidad de x. Por eso puede valer más de 1 sin contradicción alguna, igual que una velocidad puede ser de 100 km/h sin que se recorran 100 km. La exponencial con λ = 2 tiene densidad 2 en el origen, y no hay nada roto.
La cdf sigue siendo F(x) = P(X ≤ x), ahora la integral de la densidad, y sigue siendo la forma cómoda de calcular: P(a < X ≤ b) = F(b) − F(a). Como los puntos no aportan probabilidad, en el caso continuo da igual usar < o ≤, algo que en el discreto sí importa.
La consecuencia práctica más olvidada aparece al comparar modelos: la verosimilitud de datos continuos es una densidad, no una probabilidad, y por eso puede ser mayor que 1 y su logaritmo puede ser positivo. Ver un log-likelihood positivo en un modelo continuo no es un error; verlo en uno discreto sí lo es.
Exponencial con λ = 2: densidad, probabilidad puntual e intervalos.
f(x) = 2·e^(−2x) para x ≥ 0
F(x) = 1 − e^(−2x)
f(0) = 2,0 densidad > 1, perfectamente válido
P(X = 0,5) = 0 todo punto tiene probabilidad cero
P(X ≤ 0,5) = 1 − e^(−1) = 0,6321
P(0,5 < X ≤ 1) = F(1) − F(0,5)
= (1 − e^(−2)) − (1 − e^(−1))
= 0,8647 − 0,6321 = 0,2325
Comprobación: el área total bajo f es 1.Variable continua: la densidad no es una probabilidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | pdf(0), P(X=0.5), P(X<=0.5), P(0.5<X<=1), integral_total, media_1/λ |
| Comprobaciones (1) | pdf_puede_superar_1 |
compmath run 188Modelado de tiempos de espera, verosimilitudes gaussianas, modelos de difusión y todo estimador de densidad.
9780387217369 verificado en International ISBN Agency (2026-08-19).La esperanza es lineal siempre, incluso cuando las variables son dependientes.
E[X] = Σ x·p(x) ó ∫ x·f(x) dx
E[aX + bY] = a·E[X] + b·E[Y] sin exigir independencia
en general E[g(X)] ≠ g(E[X])La esperanza es la media ponderada por probabilidad: el valor alrededor del cual se equilibra la distribución. No tiene por qué ser un valor posible —la esperanza de un dado es 3,5— porque describe el comportamiento agregado, no un resultado individual.
Su propiedad más útil es la linealidad, y es más fuerte de lo que suele recordarse: E[X + Y] = E[X] + E[Y] vale siempre, sin ninguna hipótesis de independencia. Esa generosidad convierte problemas aparentemente imposibles en sumas triviales: el número esperado de puntos fijos de una permutación aleatoria es 1, y se obtiene sumando indicadores fuertemente dependientes.
Lo que no vale es intercambiar la esperanza con una función no lineal. E[X²] ≠ E[X]², y la diferencia entre ambas es exactamente la varianza. Para funciones convexas, la desigualdad de Jensen dice que E[g(X)] ≥ g(E[X]), y ese detalle es el que separa la media de los logaritmos del logaritmo de la media en toda derivación de ELBO o de verosimilitud.
En aprendizaje automático la esperanza está en la definición misma del objetivo: el riesgo es E[pérdida] sobre la distribución de datos, y como esa distribución es desconocida se estima con la media empírica. Toda la teoría del aprendizaje trata de cuánto se parece esa media a la esperanza que se quería minimizar.
Uniforme en el intervalo unitario: teoría frente a simulación.
X ~ Uniforme(0,1)
teórico simulado con 10⁶ muestras
E[X] = 0,5 0,499912
E[X²] = 1/3 0,333282
E[X]² = 0,25 ≠ E[X²] = 0,3333
diferencia = 0,3333 − 0,25 = 0,0833 = 1/12 = Var(X) ✓
Linealidad sin independencia:
E[X + X] = 2·E[X] = 1,0 aunque X no es independiente de sí mismaLinealidad de la esperanza, incluso sin independencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | E[X]_teorica_uniforme, E[X]_muestral, E[X²]_teorica, E[X²]_muestral, E[X]², E[2X+3Y], 2E[X]+3E[Y] |
| Comprobaciones (2) | E[X²]≠E[X]², linealidad_sin_independencia |
compmath run 189Riesgo esperado en aprendizaje, valoración de apuestas y carteras, análisis del tiempo medio de ejecución y estimadores de gradiente por muestreo.
9780134753119 verificado en International ISBN Agency (2026-08-20).La varianza mide dispersión al cuadrado; dividir entre n−1 la vuelve insesgada.
Var(X) = E[(X − μ)²] = E[X²] − E[X]²
σ = √Var(X)
muestral insesgada: s² = Σ(xᵢ − x̄)² / (n − 1)La varianza promedia el cuadrado de las desviaciones respecto de la media. Se eleva al cuadrado, y no se toma el valor absoluto, porque así la varianza de una suma de variables independientes es la suma de varianzas —una propiedad que el valor absoluto no tiene— y porque el resultado es derivable, lo cual importa al optimizar.
El precio es que la varianza vive en unidades al cuadrado: si los datos son euros, la varianza son euros al cuadrado, y no se puede comparar con la media. Por eso se define la desviación estándar como su raíz, que vuelve a las unidades originales y sí es comparable e interpretable.
La fórmula computacional Var(X) = E[X²] − E[X]² es cómoda pero numéricamente peligrosa: resta dos números grandes y parecidos, que es exactamente la cancelación catastrófica de la parte 01. Con datos alejados del origen puede devolver varianzas negativas. Las bibliotecas serias usan el algoritmo de Welford en una pasada, no esa fórmula.
La corrección de Bessel —dividir entre n−1— compensa que las desviaciones se calculan respecto de la media muestral, que está ajustada a los propios datos y por tanto los aproxima demasiado bien. Se han gastado un grado de libertad al estimar la media, y devolverlo hace que el estimador sea insesgado.
Ocho observaciones: dos denominadores, dos resultados.
datos: 2, 4, 4, 4, 5, 5, 7, 9 n = 8
media: 40 / 8 = 5,0
desviaciones: −3, −1, −1, −1, 0, 0, 2, 4
cuadrados: 9, 1, 1, 1, 0, 0, 4, 16 suma = 32
varianza poblacional = 32 / 8 = 4,0 σ = 2,0
varianza muestral = 32 / 7 = 4,5714 s = 2,1381
Con n grande la diferencia se desvanece; con n = 8 es del 14 %.Varianza, desviación estándar y el estimador insesgado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | media, varianza_poblacional_/n, varianza_muestral_/(n-1), desviacion_estandar, statistics.pstdev, statistics.stdev, Var(aX)=a²Var(X) |
| Comprobaciones (0) | — |
compmath run 190Normalización de características, batch normalization, control de calidad, medición de riesgo financiero y análisis de estabilidad de entrenamientos.
9780387217369 verificado en International ISBN Agency (2026-08-19).La covarianza depende de las unidades; la correlación no, pero solo ve lo lineal.
Cov(X,Y) = E[(X − μₓ)(Y − μᵧ)]
ρ = Cov(X,Y) / (σₓ·σᵧ), −1 ≤ ρ ≤ 1
Var(X+Y) = Var(X) + Var(Y) + 2·Cov(X,Y)La covarianza mide si dos variables se desvían de su media en el mismo sentido. Positiva significa que suelen subir juntas; negativa, que una sube cuando la otra baja; cero, que no hay tendencia lineal conjunta. Su defecto es que su magnitud depende de las escalas: medir en milímetros en vez de metros multiplica la covarianza por mil sin que la relación haya cambiado.
La correlación de Pearson arregla eso dividiendo por las desviaciones estándar. El resultado es adimensional y está acotado en [−1, 1], con los extremos alcanzados solo si la relación es exactamente lineal. Esa acotación es la desigualdad de Cauchy-Schwarz aplicada a variables centradas, y conecta con el ángulo entre vectores de la parte 05: la correlación es el coseno del ángulo entre los datos centrados.
La limitación crítica es que la correlación solo detecta relaciones lineales. Si Y = X² con X simétrica alrededor de cero, la correlación es exactamente 0 y la dependencia es total. Correlación cero no implica independencia; la implicación solo va en un sentido, y solo bajo normalidad conjunta se convierte en equivalencia.
La fórmula de la varianza de una suma muestra por qué la covarianza importa en la práctica: diversificar una cartera, promediar predictores en un ensemble o combinar estimadores reduce la varianza solo en la medida en que las covarianzas sean bajas. Modelos muy correlacionados no se ayudan al promediarse.
Invariancia de escala: multiplicar una variable por mil.
x = 1, 2, 3, 4, 5 ... y correlacionada con x
z = 1000·y misma relación, otras unidades
Cov(x, y) = 4,925
Cov(x, z) = 4 925,0 × 1000, como la escala
corr(x, y) = 0,998830
corr(x, z) = 0,998830 idéntica ✓
Dependencia no lineal invisible:
x = −2, −1, 0, 1, 2 y = x² = 4, 1, 0, 1, 4
corr(x, y) = 0 y sin embargo y está determinada por xCovarianza depende de la escala; la correlación no.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | cov(x,y), cov(x,z)_escala_x1000, corr(x,y), corr(x,z) |
| Comprobaciones (1) | la_correlacion_es_invariante_a_escala |
compmath run 191Matrices de covarianza en PCA, selección de características, diversificación de carteras y diseño de ensembles con predictores poco correlacionados.
9780387217369 verificado en International ISBN Agency (2026-08-19).La binomial cuenta éxitos en n ensayos de Bernoulli independientes.
Bernoulli: P(X=1) = p, E[X] = p, Var(X) = p(1−p)
Binomial: P(X=k) = C(n,k)·pᵏ·(1−p)ⁿ⁻ᵏ
E[X] = np, Var(X) = np(1−p)Un ensayo de Bernoulli es el experimento más simple posible: éxito con probabilidad p, fracaso con 1−p. Su esperanza es p y su varianza p(1−p), que alcanza su máximo en p = 0,5: la máxima incertidumbre está en la moneda justa, y decae hacia cero cuando el resultado es casi seguro en cualquiera de los dos sentidos.
Repetir n ensayos independientes con la misma p y contar los éxitos da la binomial. Su fórmula tiene tres piezas que conviene leer por separado: pᵏ es la probabilidad de los k éxitos, (1−p)ⁿ⁻ᵏ la de los fracasos restantes, y C(n,k) cuenta de cuántas maneras distintas pueden ordenarse. Esa combinatoria es la de la parte 04.
La media np y la varianza np(1−p) salen sin esfuerzo de la linealidad de la esperanza y de la aditividad de la varianza bajo independencia: la binomial es una suma de n Bernoullis. Este es el ejemplo más limpio de por qué esas dos propiedades merecían clases propias.
Las condiciones importan. Si los ensayos no son independientes, o si p cambia entre ellos, la binomial no aplica: extraer cartas sin reposición da una hipergeométrica, no una binomial. En aprendizaje automático la Bernoulli aparece como salida de toda regresión logística, y su log-verosimilitud negativa es la entropía cruzada binaria.
Diez ensayos con probabilidad de éxito 0,3.
n = 10, p = 0,3
media teórica = np = 3,0
varianza teórica = np(1−p) = 2,1
P(X = 3) = C(10,3) · 0,3³ · 0,7⁷
= 120 · 0,027 · 0,0823543
= 0,266828
simulación con 10⁵ réplicas: media 2,99145 ✓
Var máxima de un Bernoulli: p = 0,5 → 0,25
Var con p = 0,3 → 0,21
Var con p = 0,01 → 0,0099De un ensayo a n ensayos: Bernoulli y binomial.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (9) | p, n, media_teorica_np, varianza_teorica_np(1-p), media_simulada, pmf_k=3, frecuencia_simulada_k=3, suma_pmf, P(X<=3) |
| Comprobaciones (0) | — |
compmath run 192Tests A/B, tasas de conversión, control de calidad por muestreo, salida de regresión logística y entropía cruzada binaria.
9780134753119 verificado en International ISBN Agency (2026-08-20).Poisson cuenta eventos raros por intervalo; la exponencial mide el tiempo entre ellos.
Poisson: P(N=k) = e^(−λ)·λᵏ / k!, E[N] = Var(N) = λ
Exponencial: f(t) = λ·e^(−λt), E[T] = 1/λ
falta de memoria: P(T > s+t | T > s) = P(T > t)La distribución de Poisson describe el número de eventos que ocurren en un intervalo cuando esos eventos son independientes y suceden a una tasa media constante λ. Surge como límite de una binomial con n grande y p pequeño manteniendo np = λ: muchísimas oportunidades, cada una muy improbable.
Su firma es que media y varianza coinciden, ambas iguales a λ. Ese hecho sirve de diagnóstico: si en unos datos de conteo la varianza supera claramente a la media, hay sobredispersión y el modelo de Poisson es inadecuado, normalmente porque la tasa no es constante o los eventos se agrupan.
La exponencial es la otra cara del mismo proceso: si los conteos son Poisson con tasa λ, los tiempos entre eventos son exponenciales con media 1/λ. Tres eventos por hora implican una espera media de veinte minutos. Es la misma información contada desde el tiempo en vez de desde la cuenta.
La propiedad de falta de memoria es lo que hace la exponencial única entre las distribuciones continuas: haber esperado ya media hora no acorta la espera restante. Es realista para procesos sin desgaste —desintegración radiactiva, llegadas a un servidor— y claramente falso para procesos con envejecimiento, donde se usan Weibull o gamma.
Tres eventos por hora: conteos y esperas.
λ = 3 eventos/hora
Poisson:
P(N = 0) = e^(−3) = 0,049787
P(N = 3) = e^(−3)·3³ / 3! = 0,224042
E[N] = 3,0 Var(N) = 3,0 iguales ✓
Exponencial:
E[T] = 1/3 hora = 20 minutos
P(T > 1 h) = e^(−3) = 0,049787
Coherencia: "ningún evento en 1 hora" es lo mismo que
"la primera espera supera 1 hora" → mismo 0,049787 ✓
Falta de memoria:
P(T > 1,5 | T > 0,5) = e^(−3) = P(T > 1) ✓Poisson cuenta eventos; la exponencial mide el tiempo entre ellos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | λ_eventos_por_hora, P(N=0), P(N=3), media_poisson, varianza_poisson, media_de_la_espera_1/λ, media_de_espera_simulada |
| Comprobaciones (0) | — |
compmath run 193Colas y capacidad de servidores, llegadas de peticiones, fiabilidad de componentes, conteos de defectos y modelos de supervivencia.
La normal queda fijada por media y desviación, y la puntuación z la vuelve universal.
f(x) = 1/(σ√(2π)) · e^(−(x−μ)²/(2σ²))
z = (x − μ) / σ ⟹ Z ~ Normal(0,1)
68,27 % · 95,45 % · 99,73 % dentro de 1σ, 2σ y 3σLa distribución normal es simétrica, unimodal y queda completamente determinada por dos números: la media μ, que fija dónde está el centro, y la desviación σ, que fija cuán ancha es. Ninguna otra distribución tan simple aparece tan a menudo, y la razón no es estética: es el teorema central del límite de la clase 197.
La estandarización z = (x − μ)/σ convierte cualquier normal en la normal estándar. Eso permite tabular una sola distribución y responder cualquier pregunta sobre todas las demás. La puntuación z se lee directamente como «a cuántas desviaciones del centro está este valor», y es la forma correcta de comparar magnitudes medidas en escalas distintas.
La regla 68-95-99,7 conviene memorizarla porque da intuición inmediata: dentro de una desviación cae el 68 % de los datos, dentro de dos el 95 % y dentro de tres el 99,7 %. Un valor a más de tres sigmas ocurre menos de tres veces de cada mil, y por eso ese umbral se usa como criterio de anomalía.
La advertencia habitual: la normal tiene colas ligeras, que decaen exponencialmente al cuadrado. Muchos fenómenos reales —retornos financieros, tamaños de archivo, popularidad de contenidos— tienen colas mucho más pesadas, y modelarlos como normales subestima gravemente los eventos extremos. Suponer normalidad sin comprobarla es un error caro.
Distribución de CI con media 100 y desviación 15.
μ = 100, σ = 15
P(85 < X < 115) = 0,6827 1σ
P(70 < X < 130) = 0,9545 2σ
P(55 < X < 145) = 0,9973 3σ
z de 130 = (130 − 100) / 15 = 2,0
P(X > 130) = (1 − 0,9545) / 2 = 0,0228 ≈ 1 de cada 44
Comparación entre escalas:
130 en CI (z = 2,0)
620 en una prueba de μ=500, σ=100 (z = 1,2)
el primero es más extremo pese al número menorNormal: regla 68-95-99.7 y estandarización.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | μ, σ, P(μ-σ < X < μ+σ), P(μ-2σ < X < μ+2σ), P(μ-3σ < X < μ+3σ), z_de_130, P(X>130), percentil_95_aprox |
| Comprobaciones (1) | simetrica |
compmath run 194Inicialización de pesos en redes, ruido gaussiano en modelos de difusión, control estadístico de procesos, intervalos de confianza y detección de anomalías.
9780387217369 verificado en International ISBN Agency (2026-08-19).De la conjunta se obtienen las marginales sumando y las condicionales dividiendo.
conjunta: p(x,y) = P(X=x, Y=y), Σ p(x,y) = 1
marginal: p(x) = Σᵧ p(x,y)
condicional: p(y|x) = p(x,y) / p(x)
independencia ⟺ p(x,y) = p(x)·p(y) para todo parCuando dos variables se observan a la vez, la descripción completa es la distribución conjunta: una probabilidad por cada par de valores. Todo lo demás se deriva de ella, y esa es la razón de que la conjunta sea el objeto fundamental y las marginales solo resúmenes.
Marginalizar es sumar sobre la variable que no interesa. El nombre viene de las tablas de doble entrada, donde esas sumas se escribían literalmente en los márgenes. Marginalizar pierde información: dos conjuntas muy distintas pueden tener exactamente las mismas marginales, y por eso conocer cada variable por separado no basta para saber cómo se relacionan.
Condicionar es dividir por la marginal correspondiente, lo cual reescala una fila o columna para que vuelva a sumar 1. La comparación entre p(x,y) y p(x)·p(y) es el test de independencia: si coinciden para todos los pares, las variables son independientes; si difieren en alguno, no lo son.
Esta es la maquinaria de los modelos gráficos y de todo el modelado probabilístico moderno. Un modelo generativo aprende una conjunta sobre datos y etiquetas; la inferencia consiste en condicionar sobre lo observado y marginalizar lo latente. En el caso continuo las sumas se vuelven integrales, y esas integrales intratables son las que motivan la inferencia variacional y los métodos de la parte 17.
Conjunta de dos variables binarias.
p(x,y) y=0 y=1 | marginal X
x=0 0,20 0,30 | 0,50
x=1 0,10 0,40 | 0,50
------------------------------------------
marginal Y 0,30 0,70 | 1,00 ✓
Condicional:
p(y=1 | x=1) = 0,40 / 0,50 = 0,80
p(y=1 | x=0) = 0,30 / 0,50 = 0,60
Test de independencia en el par (1,1):
p(1,1) = 0,40
p(1)·p(1) = 0,50 × 0,70 = 0,35
0,40 ≠ 0,35 → X e Y NO son independientesDistribución conjunta, marginales y condicional.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | suma, P(Y=1|X=1), producto_de_marginales_(1,1) |
| Comprobaciones (1) | independientes |
compmath run 195Modelos gráficos probabilísticos, inferencia bayesiana, tablas de contingencia y distribuciones latentes en modelos generativos.
La media muestral converge a la esperanza, pero a velocidad de raíz cuadrada.
x̄ₙ → μ cuando n → ∞
error típico ≈ σ/√n
cuadruplicar n reduce el error a la mitadLa ley de los grandes números es el puente entre probabilidad y realidad: garantiza que promediar muchas observaciones independientes acerca la media muestral a la esperanza teórica. Sin ella, la probabilidad sería un juego formal sin conexión con los datos, y ninguna simulación tendría sentido.
Lo que la ley no dice es igual de importante. No dice que las desviaciones se compensen: si han salido diez caras seguidas, la moneda no «debe» ahora cruces. La convergencia ocurre porque las primeras observaciones se diluyen al crecer el denominador, no porque algo las corrija. Creer lo contrario es la falacia del jugador.
Tampoco garantiza nada sobre una muestra concreta. Es un enunciado asintótico: para cualquier margen de error, existe un n a partir del cual la desviación es improbable. Ese n puede ser enorme si la varianza es grande, y para distribuciones sin media finita —como la Cauchy— la ley sencillamente no se cumple.
La velocidad es la parte que más cuesta aceptar en la práctica. El error típico cae como σ/√n, de modo que pasar de 1000 a 4000 muestras solo reduce el error a la mitad, y ganar un dígito decimal cuesta multiplicar por cien el trabajo. Esa raíz cuadrada es la que gobierna el coste de toda simulación Monte Carlo.
Media muestral de una uniforme en el intervalo unitario.
distribución: Uniforme(0,1) media real = 0,5
n media error
10 0,607062 0,107062
100 0,509220 0,009220
1 000 0,503115 0,003115
10 000 0,500987 0,000987
El error cae aproximadamente como 1/√n:
de n=100 a n=10 000 → n × 100 → error / 10 ✓
Nada garantiza que una muestra concreta se comporte:
con n = 10 el error fue del 21 %.La media muestral converge, pero lentamente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | cuadruplicar_n_reduce_el_error_a_la_mitad, no_garantiza_ninguna_muestra_concreta |
compmath run 196Justificación de la simulación, validación de estimadores, dimensionamiento de tests A/B y tamaño de lote en descenso estocástico.
La media de muchas variables tiende a una normal aunque el origen no lo sea.
x̄ₙ ≈ Normal(μ, σ²/n) para n grande
(x̄ₙ − μ)/(σ/√n) → Normal(0,1)
error estándar = σ/√nEl teorema central del límite es el resultado más sorprendente de la probabilidad elemental: la distribución de la media muestral tiende a una normal sin importar de qué distribución vengan los datos, siempre que tengan media y varianza finitas y sean independientes. La forma original se olvida; solo sobreviven su media y su varianza.
Mientras la ley de los grandes números dice hacia dónde converge la media, el TCL dice cómo se distribuye alrededor de ese límite. Esa información es lo que permite construir intervalos de confianza y contrastes de hipótesis: sin TCL no habría estadística inferencial práctica.
El error estándar σ/√n es la desviación de la media muestral, no de los datos. Confundir σ con σ/√n es el error más frecuente al reportar resultados: la primera describe cuánto varían las observaciones, la segunda cuánto varía la estimación. Sus valores difieren por un factor √n, que con n = 10 000 es cien.
La regla de «con n ≥ 30 basta» es una guía burda. La velocidad de convergencia depende de la asimetría de la distribución de origen: para una exponencial n = 30 ya es razonable, para una distribución muy sesgada o con valores extremos puede hacer falta mucho más. Y si la varianza es infinita, el TCL directamente no aplica.
Medias de muestras de tamaño 30 de una exponencial claramente asimétrica.
población: Exponencial(1) media 1, varianza 1
fuertemente asimétrica, nada normal
8 000 réplicas de muestras de tamaño n = 30:
media de las medias = 0,997036 teórico 1,0 ✓
varianza de las medias = 0,032656 teórico 1/30 = 0,0333 ✓
desviación = 0,1807 teórico 1/√30 = 0,1826 ✓
La distribución de las medias es casi simétrica y acampanada
aunque la población de origen no tenga nada de normal.
error estándar frente a desviación de los datos:
σ = 1,0 cuánto varía una observación
σ/√30 = 0,183 cuánto varía la mediaEl TCL en acción sobre una distribución claramente no normal.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | tamaño_de_muestra, replicas, media_de_las_medias, media_teorica, varianza_de_las_medias, varianza_teorica_σ²/n, error_estandar |
| Comprobaciones (1) | la_distribucion_de_medias_es_casi_normal |
compmath run 197Intervalos de confianza, contrastes de hipótesis, barras de error en experimentos y justificación del ruido gaussiano en modelos de medición.
9780387217369 verificado en International ISBN Agency (2026-08-19).Monte Carlo estima integrales muestreando, con error 1/√n en cualquier dimensión.
E[g(X)] ≈ (1/n)·Σ g(xᵢ)
error estándar = s/√n
intervalo aproximado: estimación ± 1,96·s/√nEl método de Monte Carlo resuelve un problema determinista —una integral, un área, una probabilidad— convirtiéndolo en un experimento aleatorio y promediando. Su justificación es la ley de los grandes números, y su control de error es el teorema central del límite: las dos clases anteriores existían para llegar aquí.
El ejemplo clásico estima π lanzando puntos uniformes en el cuadrado unitario y contando cuántos caen dentro del cuarto de círculo. La proporción tiende a π/4. Es un método malísimo para calcular π —hay algoritmos que dan miles de dígitos— pero perfecto para entender el mecanismo y su coste.
Ese coste es la convergencia O(1/√n), que es lenta: para un dígito decimal más hacen falta cien veces más muestras. La compensación es decisiva: esa velocidad no depende de la dimensión. Las reglas de cuadratura clásicas empeoran exponencialmente al crecer la dimensión, y por encima de unas pocas variables Monte Carlo es la única opción viable.
Dos exigencias de higiene, que la clase trata como obligatorias. Primera: fijar la semilla, porque un resultado no reproducible no es un resultado. Segunda: reportar el error estándar junto a la estimación; un número Monte Carlo sin su incertidumbre no permite saber si la diferencia observada frente a otro método es real o es ruido.
Estimación de π por muestreo uniforme, con semilla fija.
semilla = 20260819
n estimación error error estándar
1 000 3,156000 0,014407 0,0519
10 000 3,145600 0,004007 0,0164
100 000 3,142880 0,001287 0,0052
π real = 3,141593
El error cae como 1/√n:
n × 100 → error estándar / 10 ✓
Intervalo al 95 % con n = 100 000:
3,142880 ± 1,96 × 0,0052 = [3,13268, 3,15308]
contiene a π ✓
Ganar un decimal más exigiría n ≈ 10 000 000.Estimar π por Monte Carlo con su error e intervalo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | semilla, pi_real |
| Comprobaciones (1) | ventaja_en_alta_dimension |
compmath run 198Integración en alta dimensión, valoración de opciones, propagación de incertidumbre, dropout en inferencia y muestreo en modelos generativos.
9781475741452 verificado en International ISBN Agency (2026-08-19).Una cadena de Markov olvida su historia y, si es ergódica, olvida también su inicio.
P(Xₙ₊₁ | Xₙ, …, X₀) = P(Xₙ₊₁ | Xₙ)
distribución tras n pasos: v·Pⁿ
estacionaria: πP = π, con Σπᵢ = 1Una cadena de Markov es un proceso en el que el futuro depende del presente pero no del pasado. Esa propiedad de Markov es una simplificación drástica y sorprendentemente útil: basta con la matriz de transición P, donde Pᵢⱼ es la probabilidad de pasar del estado i al j, y cada fila suma 1.
La evolución es álgebra lineal pura. Si v es la distribución actual sobre los estados, tras un paso es vP y tras n pasos es vPⁿ. Toda la parte 06 se vuelve relevante aquí: las potencias de la matriz se calculan con su diagonalización, y la velocidad de convergencia la marca el segundo autovalor en módulo.
La distribución estacionaria π cumple πP = π: es un autovector izquierdo con autovalor 1, y describe el régimen de equilibrio. Si la cadena es ergódica —se puede llegar de cualquier estado a cualquier otro y no hay ciclos rígidos— entonces la estacionaria es única y la cadena converge a ella desde cualquier inicio. La condición inicial se olvida.
Esa propiedad es la base de MCMC: si se quiere muestrear de una distribución imposible de muestrear directamente, se construye una cadena cuya estacionaria sea esa distribución y se la deja correr. PageRank es exactamente lo mismo aplicado al grafo de la web, y los modelos de difusión son un proceso estocástico cuyo reverso se aprende con una red.
Cadena de dos estados y su equilibrio.
P = [[0,9 0,1] filas suman 1 ✓
[0,5 0,5]]
inicio v = [1,0 0,0] seguro en el estado A
paso 1: [0,9000 0,1000]
paso 2: [0,8600 0,1400]
paso 5: [0,8346 0,1654]
paso 20: [0,8333 0,1667]
Estacionaria exacta: resolver πP = π con π₀ + π₁ = 1
0,9π₀ + 0,5π₁ = π₀ → 0,5π₁ = 0,1π₀ → π₀ = 5π₁
π = [5/6 1/6] = [0,833333 0,166667] ✓
Desde v = [0,0 1,0] la cadena converge al mismo π.Cadena de Markov: matriz de transición y distribución estacionaria.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | filas_suman_1, converge, olvida_el_estado_inicial |
compmath run 199PageRank, MCMC, modelos ocultos de Markov, aprendizaje por refuerzo con procesos de decisión markovianos y procesos de difusión.
Con suficientes datos, el prior se diluye y bayesiano y frecuentista convergen.
posterior ∝ verosimilitud × prior
Beta(a,b) + k éxitos en n ⟹ Beta(a+k, b+n−k)
media posterior = (a+k) / (a+b+n)El capstone reúne toda la parte en un simulador: se fija un parámetro real desconocido para el observador, se generan datos, y se estima ese parámetro de dos maneras —contando frecuencias y actualizando una creencia con Bayes— para ver cómo se comportan a medida que llegan observaciones.
El prior Beta(2,2) expresa una creencia previa suave centrada en 0,5. Es conjugado de la binomial, lo que significa que el posterior pertenece a la misma familia y la actualización se reduce a sumar: Beta(a+k, b+n−k). Esa comodidad algebraica es la razón histórica de que los priores conjugados dominaran antes de que MCMC hiciera viable cualquier prior.
Lo que el experimento muestra es la dilución del prior. Con pocas observaciones la media posterior está tirada hacia 0,5 por la creencia previa; con cientos de datos se pega a la frecuencia observada, y las dos estimaciones se vuelven indistinguibles. El prior importa cuando hay poca evidencia, que es precisamente cuando hace falta que importe.
La diferencia de fondo entre ambos enfoques no es numérica sino de interpretación. El frecuentista da un punto y un intervalo con garantías de cobertura a largo plazo; el bayesiano da una distribución completa sobre el parámetro, de la que se leen media, incertidumbre e intervalo creíble. Esa distribución es lo que la parte 10 formaliza y lo que hace del enfoque bayesiano el lenguaje natural de la cuantificación de incertidumbre.
Parámetro real 0,35, prior Beta(2,2), evidencia creciente.
n obs éxitos media posterior desv. posterior
0 0 0,5000 0,2236
10 3 0,3571 0,1247
50 16 0,3333 0,0645
200 58 0,2941 0,0313
1 000 265 0,2669 0,0140
estimación frecuentista final (265/1000) = 0,2650
estimación bayesiana final = 0,2696
diferencia = 0,0046 → el prior ya casi no pesa
peso del prior: a+b = 4 observaciones equivalentes
frente a n = 10 pesa un 29 %
frente a n = 1000 pesa un 0,4 %Capstone: simulador probabilístico con actualización bayesiana.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | parametro_real, estimacion_frecuentista, estimacion_bayesiana_final, semilla |
| Comprobaciones (2) | el_prior_se_diluye_con_datos, reproducible |
compmath run 200Tests A/B bayesianos, bandidos multibrazo con Thompson sampling, calibración de modelos y estimación de tasas con pocos datos.
9781439840955 verificado en International ISBN Agency (2026-08-19).Descriptiva, muestreo, estimadores, intervalos de confianza, pruebas de hipótesis, p-value, potencia, verosimilitud, MAP, inferencia bayesiana, bootstrap y A/B testing.
La probabilidad va de la causa al efecto: dado un modelo, ¿qué datos son plausibles? La estadística recorre el camino inverso: dados unos datos, ¿qué modelo los explica y con cuánta confianza? Esa inversión es más difícil, más frágil y más fácil de hacer mal, y es donde se pierde la mayor parte de la credibilidad de los resultados publicados.
Las clases 201 a 204 preparan el terreno. La estadística descriptiva resume; el muestreo condiciona todo lo que vendrá después. La lección más cara está en la clase 202: el sesgo de selección no se corrige con más datos. Una muestra sesgada de un millón de personas es peor que una muestra aleatoria de mil, porque el error sistemático no se diluye al crecer n, y encima la mayor precisión hace más convincente la conclusión equivocada.
Las clases 205 a 209 son el núcleo de la inferencia frecuentista y contienen los tres errores de interpretación más extendidos de toda la ciencia aplicada. Un intervalo de confianza del 95 % no dice que el parámetro esté ahí con probabilidad 0,95: describe un procedimiento que, repetido muchas veces, atrapa el parámetro el 95 % de las veces. Un p-value no es la probabilidad de que la hipótesis nula sea cierta: es la probabilidad de ver datos así de extremos si la nula fuera cierta. Y un resultado no significativo en un estudio sin potencia declarada no significa nada: no distingue entre «no hay efecto» y «no había datos suficientes para verlo».
Las clases 210 a 214 son las pruebas de trabajo: t-test para medias, chi-cuadrado para tablas de contingencia, ANOVA para varios grupos y regresión lineal con su lectura estadística. Cada una tiene supuestos, y aplicarlas sin comprobarlos es la forma habitual de producir p-values que no significan lo que parece. La clase 213 se dedica entera a la confusión más famosa: correlación no implica causalidad, y un confusor basta para fabricar una correlación fuerte entre dos variables que no se tocan.
Las clases 215 a 218 introducen el punto de vista de la verosimilitud y el bayesiano. La máxima verosimilitud es el principio que fundamenta casi toda función de pérdida en aprendizaje automático; MAP le añade un prior, y ese prior es la regularización. La inferencia bayesiana devuelve una distribución entera sobre el parámetro, y su intervalo creíble sí admite la lectura probabilística que el intervalo de confianza no admite. El bootstrap cierra el bloque con una idea casi tramposa por lo simple: remuestrear los propios datos para estimar la variabilidad, sin suponer ninguna distribución poblacional.
El cierre (219 y 220) baja a la práctica: A/B testing con tamaño muestral calculado de antemano, y un estudio completo, reproducible, con semilla fija, intervalos declarados y limitaciones explícitas. Esa disciplina —fijar el análisis antes de ver los datos, reportar la incertidumbre, corregir por comparaciones múltiples y declarar lo que el estudio no puede concluir— es lo que separa un resultado de una anécdota con números.
Para quien viene de la inteligencia artificial, esta parte es la que enseña a evaluar. Comparar dos modelos por su exactitud puntual sin intervalo de confianza, elegir la mejor configuración entre veinte y reportar su rendimiento sin corregir por selección, o medir sobre datos que participaron en el ajuste, son exactamente los errores que esta parte nombra y desarma.
Evaluar un modelo es inferencia estadística: métricas con intervalo, comparaciones múltiples corregidas y detección de leakage.
| Término | Definición | Clase |
|---|---|---|
| Aleatorización | Asignar el tratamiento al azar para romper la influencia de confusores conocidos y desconocidos. | 213 |
| ANOVA | Compara varias medias descomponiendo la variabilidad entre grupos y dentro de ellos. | 212 |
| Asimetría | Sesgo de la distribución. Con cola derecha la media supera a la mediana. | 201 |
| Bootstrap | Remuestrear con reposición los propios datos para estimar la variabilidad de un estadístico. | 218 |
| Chi-cuadrado | Contraste que compara frecuencias observadas con esperadas en una tabla. | 211 |
| Coeficiente de determinación | R². Proporción de la variabilidad explicada por el modelo. Un R² alto no valida el modelo. | 214 |
| Comparaciones múltiples | Al hacer k contrastes, la probabilidad de algún falso positivo crece; exige corrección. | 212 |
| Consistencia | El estimador converge al parámetro cuando n crece. Es una garantía asintótica. | 204 |
| Distribución muestral | Distribución de un estadístico al repetir el muestreo. Es el objeto que hace posible inferir. | 203 |
| Error estándar | Desviación típica de un estimador. Para la media vale σ/√n. | 203 |
| Error tipo I | Rechazar una H0 verdadera. Su tasa es α, elegida de antemano. | 208 |
| Error tipo II | No rechazar una H0 falsa. Su tasa es β y depende del tamaño del efecto y de n. | 208 |
| Estadístico de contraste | Número calculado de la muestra cuya distribución bajo H0 se conoce. | 206 |
| Estimación MAP | Máximo de la posterior: verosimilitud por prior. El prior actúa como regularización. | 216 |
| Estimador insesgado | Aquel cuya esperanza coincide con el parámetro. No implica que sea bueno. | 204 |
| Grados de libertad | Número de valores libres tras imponer las restricciones del modelo. | 210 |
| Hipótesis nula | Enunciado de ausencia de efecto que se somete a prueba. Nunca se acepta, solo se rechaza o no. | 206 |
| Intervalo creíble | Región que contiene el parámetro con probabilidad dada bajo la posterior. Sí es una probabilidad del parámetro. | 217 |
| Intervalo de confianza | Procedimiento que, repetido, contiene el parámetro en el 95 % de los casos. No es una probabilidad del parámetro. | 205 |
| Lift | Mejora relativa de la variante frente al control en un experimento. | 219 |
| Log-verosimilitud | Logaritmo de la verosimilitud. Convierte productos en sumas y evita el subdesbordamiento. | 215 |
| Media, mediana y moda | Tres medidas de centro. La mediana resiste valores extremos; la media no. | 201 |
| Máxima verosimilitud | Elegir el parámetro que hace más probables los datos observados. | 215 |
| p-hacking | Probar variantes de análisis hasta obtener p < 0,05. Invalida el significado del p-value. | 207 |
| p-value | P(estadístico tan o más extremo | H0 cierta). Nunca es P(H0 | datos). | 207 |
| Potencia | 1 − β. Probabilidad de detectar un efecto real. Sin ella, un no significativo no informa. | 209 |
| Preinscripción del análisis | Fijar hipótesis, métrica y tamaño muestral antes de recoger datos. Bloquea el p-hacking. | 220 |
| Prior conjugado | Prior cuya posterior pertenece a la misma familia. Beta es conjugado de la binomial. | 217 |
| Rango intercuartílico | Q3 − Q1. Dispersión robusta que ignora el 25 % de cada cola. | 201 |
| Residuo | Diferencia entre valor observado y predicho. Su patrón revela los fallos del modelo. | 214 |
| Sesgo de selección | La muestra no representa a la población. No se corrige aumentando el tamaño. | 202 |
| Sesgo del superviviente | Analizar solo los casos que llegaron al final, ignorando los que desaparecieron. | 202 |
| t de Student | Contraste de medias con varianza desconocida. Sus colas son más pesadas que las de la normal. | 210 |
| Tabla de contingencia | Recuento cruzado de dos variables categóricas. | 211 |
| Tamaño del efecto | Magnitud de la diferencia en unidades de desviación, como la d de Cohen. Independiente de n. | 209 |
| Variable de confusión | Causa común de dos variables que genera correlación sin relación causal directa. | 213 |
Centro, dispersión y forma responden preguntas distintas y ninguna basta sola.
media = Σxᵢ / n; mediana = valor central ordenado
IQR = Q3 − Q1; σ = √(Σ(xᵢ − x̄)²/n)
con cola derecha: media > medianaResumir un conjunto de datos exige responder tres preguntas independientes: dónde está el centro, cuánto se dispersan los valores y qué forma tiene la distribución. Dar solo la media es responder una de tres, y muchas veces la menos informativa.
Para el centro hay tres candidatos con propiedades distintas. La media usa todos los valores y por eso un solo dato extremo la arrastra. La mediana solo mira la posición central y es robusta: cambiar el máximo por uno diez veces mayor no la mueve. La moda es la única que sirve para variables categóricas. Que los salarios se reporten por mediana y no por media no es casualidad.
Para la dispersión, la desviación estándar es la medida clásica y el rango intercuartílico la robusta. El IQR ignora el 25 % de cada cola y es la base del criterio de valores atípicos por diagrama de caja: fuera de Q1 − 1,5·IQR y Q3 + 1,5·IQR.
La forma es lo que más se olvida. La relación entre media y mediana delata la asimetría: si la media supera a la mediana, hay cola a la derecha. Y distribuciones radicalmente distintas pueden compartir media y desviación: el cuarteto de Anscombe y el Datasaurus son la demostración visual de que resumir sin graficar es peligroso.
Veinte mediciones: centro, dispersión y forma.
n = 20
media = 12,6050
mediana = 12,6500 media < mediana → ligera cola izquierda
desviación estándar = 0,8630
rango = 3,2000
Q1 = 11,9250
Q3 = 13,2000
IQR = 1,2750
Límites de atípicos (criterio 1,5·IQR):
inferior: 11,925 − 1,9125 = 10,0125
superior: 13,200 + 1,9125 = 15,1125
ningún dato queda fuera
Sensibilidad: si el máximo pasara de 14,2 a 30,0
media → 13,395 (sube un 6,3 %)
mediana → 12,650 (no cambia)Centro, dispersión y forma: tres preguntas distintas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (10) | n, media, mediana, desviacion_estandar, rango, Q1, Q3, IQR, coeficiente_de_variacion_%, asimetria_aprox |
| Comprobaciones (0) | — |
compmath run 201Exploración inicial de cualquier conjunto de datos, informes de latencia por percentiles, detección de atípicos y control de calidad.
9780387217369 verificado en International ISBN Agency (2026-08-19).El sesgo de selección no se corrige con más datos: solo se vuelve más convincente.
error total = sesgo + error aleatorio
el error aleatorio ~ 1/√n; el sesgo no depende de n
muestra aleatoria simple: toda unidad con igual probabilidadToda inferencia se apoya en un supuesto que rara vez se enuncia: que la muestra representa a la población. Cuando ese supuesto falla, ninguna técnica posterior lo arregla. La estadística sofisticada aplicada a una muestra sesgada produce conclusiones sofisticadas y falsas.
La clave está en distinguir dos fuentes de error. El error aleatorio viene de que la muestra es finita y decae como 1/√n: más datos lo reducen. El sesgo viene de que el mecanismo de selección favorece a ciertos individuos, y es constante en n: más datos no lo tocan. Peor aún, reducen el error aleatorio y estrechan el intervalo, dando más confianza a un número equivocado.
Los ejemplos históricos son elocuentes. La encuesta del Literary Digest de 1936 recogió 2,4 millones de respuestas y predijo mal las elecciones, porque muestreó de listas de propietarios de teléfono y automóvil. Gallup acertó con 50 000 respuestas bien muestreadas. El sesgo del superviviente es la variante más traicionera: estudiar solo empresas que siguen existiendo, aviones que volvieron o usuarios que no abandonaron.
La defensa es de diseño, no de análisis: aleatorizar la selección. Cuando no es posible, hay que declarar el mecanismo de selección y razonar explícitamente sobre a qué población se puede extrapolar. En aprendizaje automático el mismo problema aparece como desplazamiento de distribución entre los datos de entrenamiento y los de producción.
Misma población, dos mecanismos de muestreo.
población: 10 000 individuos, media real = 50,02
muestra aleatoria (n = 500)
media = 49,83 error = 0,20
muestra sesgada (n = 500, favorece valores altos)
media = 61,36 error = 11,34 57 veces peor
Aumentar el sesgado a n = 5 000:
error aleatorio ↓ el sesgo se mantiene en ≈ 11
el intervalo se estrecha alrededor del valor equivocado
Conclusión: 500 datos bien muestreados baten a 5 000 mal muestreados.Sesgo de selección: la muestra no representa a la población.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | media_poblacional, media_muestra_aleatoria, error_muestra_aleatoria, media_muestra_sesgada, error_muestra_sesgada |
| Comprobaciones (1) | el_tamaño_no_corrige_el_sesgo |
compmath run 202Diseño de encuestas, construcción de conjuntos de entrenamiento, auditoría de sesgo en modelos y detección de desplazamiento de distribución en producción.
9780387217369 verificado en International ISBN Agency (2026-08-19).10.1214/18-aoas1161sf verificado en Crossref (2026-08-19).El estadístico también tiene distribución, y esa distribución es la que permite inferir.
x̄ ~ Normal(μ, σ²/n) para n grande
SE = σ/√n
n × 4 ⟹ SE / 2La idea que abre la inferencia es un cambio de nivel: si se repitiera el muestreo muchas veces, cada muestra daría una media distinta, y esas medias tienen su propia distribución. Esa es la distribución muestral, y es el objeto sobre el que se construyen intervalos y contrastes.
Su desviación estándar recibe el nombre de error estándar para distinguirla de la desviación de los datos. Son cantidades distintas que se confunden constantemente: σ dice cuánto varía una observación individual, σ/√n cuánto varía la estimación de la media. Con n = 100 difieren por un factor 10.
La forma de esa distribución la garantiza el teorema central del límite de la clase 197: es aproximadamente normal aunque la población no lo sea. Por eso las mismas fórmulas funcionan para datos de origen muy variado, y por eso la normal aparece en todas partes en estadística sin que nadie suponga que los datos son normales.
La raíz cuadrada tiene consecuencias económicas directas. Reducir a la mitad el error exige cuadruplicar el tamaño muestral, y eso normalmente significa cuadruplicar el coste del experimento. Saber esto antes de diseñar un estudio evita descubrir a mitad de camino que el presupuesto no alcanza para la precisión prometida.
Muestras de una población normal de media 50 y desviación 10.
población: Normal(50, 10)
n media de medias SE observado SE teórico σ/√n
5 49,9483 4,4782 4,4721
20 50,0142 2,2380 2,2361
80 49,9911 1,1145 1,1180
320 50,0037 0,5581 0,5590
La media de las medias acierta siempre; lo que cambia es la dispersión.
n de 5 a 20 → ×4 → SE de 4,47 a 2,24 → mitad ✓
n de 20 a 80 → ×4 → SE de 2,24 a 1,11 → mitad ✓La distribución de la media muestral y su error estándar.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | cuadruplicar_n_reduce_SE_a_la_mitad |
compmath run 203Dimensionado de experimentos, barras de error en gráficos, comparación de métricas entre modelos y control de precisión en simulaciones.
9780387217369 verificado en International ISBN Agency (2026-08-19).Insesgado no significa bueno: hay que mirar también la varianza.
sesgo(θ̂) = E[θ̂] − θ
ECM = sesgo² + varianza
consistencia: θ̂ₙ → θ cuando n → ∞Un estimador es una receta para calcular un parámetro desconocido a partir de la muestra. Como depende de datos aleatorios, es él mismo una variable aleatoria, y se juzga por las propiedades de su distribución: sesgo, varianza y comportamiento asintótico.
El sesgo mide si el estimador acierta en promedio. Dividir entre n al calcular la varianza muestral produce un estimador sesgado a la baja, porque las desviaciones se miden respecto de una media ajustada a los propios datos; dividir entre n−1 corrige ese sesgo. Es la corrección de Bessel de la clase 190, vista ahora desde la teoría de estimación.
Pero insesgado no equivale a bueno. El error cuadrático medio se descompone en sesgo² + varianza, y hay estimadores sesgados con ECM mucho menor que el insesgado. Toda la regularización en aprendizaje automático se apoya en ese intercambio: introducir sesgo a cambio de reducir varianza. Es la misma descomposición sesgo-varianza que reaparecerá en la parte 14.
La consistencia es la garantía mínima que se le pide a un estimador: converger al parámetro cuando los datos crecen. Es una propiedad asintótica y no dice nada sobre el comportamiento con la muestra que realmente se tiene, que suele ser pequeña y es donde el sesgo y la varianza deciden.
Dos estimadores de la varianza con muestras de tamaño 8.
varianza real = 25,0 n = 8 10 000 réplicas
estimador dividiendo entre n:
E[σ̂²] = 21,7438 sesgo = −3,2562 (−13 %)
estimador dividiendo entre n−1:
E[s²] = 24,8501 sesgo = −0,1499 (−0,6 %)
Factor de corrección teórico: (n−1)/n = 7/8 = 0,875
21,7438 / 0,875 = 24,85 ✓
Con n = 100 el sesgo del primero baja al 1 %: ambos son
consistentes, pero solo el segundo es insesgado.Sesgo, varianza y consistencia de dos estimadores de la varianza.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | varianza_real, tamaño_muestral, E[estimador_/n], sesgo_/n, E[estimador_/(n-1)], sesgo_/(n-1), factor_teorico_(n-1)/n |
| Comprobaciones (0) | — |
compmath run 204Regularización como sesgo deliberado, estimación de varianza en normalización, evaluación de estimadores de gradiente y elección entre modelos simples y complejos.
9780387217369 verificado en International ISBN Agency (2026-08-19).9780534243128 verificado en International ISBN Agency (2026-08-20).El 95 % de un intervalo de confianza es una propiedad del procedimiento, no del parámetro.
IC 95 % ≈ x̄ ± 1,96·(s/√n)
cobertura: proporción de intervalos que contienen θ al repetir el estudio
amplitud ∝ 1/√nLa frase «hay un 95 % de probabilidad de que el parámetro esté en el intervalo» es incorrecta en el marco frecuentista, y es probablemente la frase mal dicha con más frecuencia en toda la ciencia aplicada. El parámetro es un número fijo: o está en el intervalo o no está, y no hay probabilidad en ello.
Lo que es aleatorio es el intervalo, porque se calcula a partir de datos aleatorios. La afirmación correcta es sobre el procedimiento: si se repitiera el estudio muchas veces, alrededor del 95 % de los intervalos construidos así contendrían el parámetro. El 95 % es una tasa de acierto a largo plazo del método, no una creencia sobre este caso concreto.
La distinción no es pedantería. Cambia lo que se puede concluir, y explica por qué existe el intervalo creíble bayesiano de la clase 217, que sí admite la lectura probabilística directa porque parte de tratar el parámetro como variable aleatoria. Ambos son legítimos; lo ilegítimo es dar la interpretación de uno al otro.
La cobertura real puede quedarse por debajo de la nominal cuando los supuestos fallan: muestras pequeñas, poblaciones muy asimétricas o uso de la normal donde correspondía la t. Un intervalo del 95 % que en simulación cubre el 93 % está informando de que el modelo es aproximado, y conviene reportarlo en vez de esconderlo.
Cobertura simulada de intervalos al 95 %.
3 000 réplicas del estudio completo
intervalos que contienen el parámetro: 2 791
cobertura observada: 93,03 %
cobertura nominal: 95,00 %
Un intervalo concreto (n = 20):
media = 12,6050
SE = 0,1930
IC 95% = (12,2268 , 12,9832) amplitud 0,7564
Lectura correcta:
"el procedimiento acierta el 95 % de las veces"
Lectura incorrecta:
"hay un 95 % de probabilidad de que μ esté aquí"
Con n = 80 la amplitud bajaría a la mitad: 0,378.Un IC 95 % describe el procedimiento, no una probabilidad del parámetro.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | cobertura_simulada_%, cobertura_nominal_%, replicas, muestra_de_ejemplo_media, amplitud |
| Comprobaciones (0) | — |
compmath run 205Reporte de métricas de modelos, comparación de tratamientos, estimación de tasas de conversión y cualquier resultado que deba comunicarse con incertidumbre.
9780387217369 verificado en International ISBN Agency (2026-08-19).10.3758/s13423-015-0947-8 verificado en Crossref (2026-08-19).Una prueba de hipótesis nunca acepta la nula: solo la rechaza o se queda sin evidencia.
H0: μ = μ₀ frente a H1: μ ≠ μ₀
z = (x̄ − μ₀) / (s/√n)
rechazar si |z| > z_{α/2} ó p < αUna prueba de hipótesis es un procedimiento de decisión con una estructura fija que conviene ejecutar siempre en el mismo orden: enunciar H0 y H1, fijar α, elegir el estadístico, calcular su valor y su p-value, y decidir. Fijar α antes de ver los datos no es un formalismo: es lo único que impide ajustar el umbral al resultado.
La lógica es la de la reducción al absurdo probabilística. Se supone H0 cierta, se calcula cuán raros serían los datos observados bajo ese supuesto, y si son suficientemente raros se rechaza H0. Lo que no se puede hacer es el paso simétrico: no rechazar no demuestra que H0 sea cierta, igual que no encontrar pruebas no demuestra inocencia.
Por eso el vocabulario correcto es «no se rechaza H0», nunca «se acepta H0». Un resultado no significativo es compatible con dos escenarios muy distintos: que no haya efecto, o que el estudio no tuviera potencia para detectarlo. Distinguirlos exige la clase 209.
La decisión también depende de si el contraste es de una o dos colas. La versión de dos colas contrasta «distinto de», la de una cola «mayor que» y reparte todo α en un lado. Cambiar a una cola después de ver la dirección del efecto duplica de hecho la tasa de falsos positivos, y es una de las formas más comunes de p-hacking.
Contraste bilateral sobre una media con n = 20.
H0: μ = 12,0 H1: μ ≠ 12,0 α = 0,05
media muestral = 12,6050
error estándar = 0,1930
z = (12,6050 − 12,0) / 0,1930 = 3,1353
valor crítico bilateral: ±1,96
|3,1353| > 1,96 → se rechaza H0
p-value = 2·P(Z > 3,1353) = 0,00172
Redacción correcta:
"se rechaza H0 al 5 %; la media difiere de 12,0"
Redacción incorrecta:
"queda demostrado que μ = 12,605"Estructura completa de una prueba de hipótesis.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | alfa, media_muestral, error_estandar, estadistico_z, p_value |
| Comprobaciones (1) | no_rechazar_no_es_aceptar |
compmath run 206Comparación de modelos, validación de cambios en producción, control de calidad y ensayos clínicos.
9780387217369 verificado en International ISBN Agency (2026-08-19).9780534243128 verificado en International ISBN Agency (2026-08-20).El p-value mide la rareza de los datos bajo H0, no la probabilidad de que H0 sea cierta.
p = P(estadístico tan o más extremo | H0 cierta)
p ≠ P(H0 | datos)
bajo H0, el p-value se distribuye Uniforme(0,1)El p-value responde a una pregunta muy concreta: si la hipótesis nula fuera cierta, ¿con qué frecuencia se verían datos al menos tan extremos como los observados? Es una probabilidad condicionada a H0, no una probabilidad de H0. Esa inversión ilegítima es la misma falacia del fiscal de la clase 186, aplicada a la práctica científica.
Hay un hecho que aclara todo lo demás: bajo H0, el p-value es uniforme en el intervalo unitario. Cualquier valor es igual de probable. Por eso rechazar con p < 0,05 produce exactamente un 5 % de falsos positivos cuando no hay ningún efecto; el umbral no es mágico, es simplemente la fracción de la uniforme que se decide sacrificar.
De la uniformidad se deduce el mecanismo del p-hacking. Si se prueban 20 análisis distintos sobre datos sin efecto, la probabilidad de que alguno baje de 0,05 es 1 − 0,95²⁰ ≈ 64 %. Probar variantes, subgrupos, transformaciones o momentos de parada hasta obtener significancia no es análisis exploratorio: es fabricar resultados. La defensa es preinscribir el análisis y corregir por comparaciones múltiples.
Y hay una última confusión, independiente de las anteriores: significancia no es relevancia. Con n suficientemente grande, cualquier diferencia por minúscula que sea resulta significativa. Un p-value pequeño dice que el efecto probablemente no es cero; no dice que importe. Por eso hay que reportar siempre el tamaño del efecto y su intervalo.
Distribución del p-value cuando no hay efecto alguno.
100 000 experimentos simulados con H0 cierta
media de los p-values = 0,49789 ≈ 0,5 (uniforme)
proporción con p < 0,05 = 0,05750 ≈ 5 %
proporción con p < 0,01 = 0,01417 ≈ 1 %
El 5 % de los estudios "encuentra" un efecto inexistente.
Comparaciones múltiples sin corrección:
k = 1 P(algún falso positivo) = 5 %
k = 5 = 23 %
k = 20 = 64 %
k = 100 = 99,4 %
Corrección de Bonferroni: usar α/k en cada contraste.Qué mide y qué no mide un p-value.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | proporcion_p<0.05, proporcion_p<0.01, media_de_los_p, riesgo_de_20_pruebas, correccion_de_Bonferroni_alfa |
| Comprobaciones (1) | bajo_H0_es_uniforme |
compmath run 207Interpretación de literatura científica, evaluación de experimentos A/B, comparación de modelos y auditoría de resultados publicados.
9780387217369 verificado en International ISBN Agency (2026-08-19).10.1080/00031305.2016.1154108 verificado en Crossref (2026-08-19).Bajar la tasa de falsos positivos sube la de falsos negativos: el compromiso es inevitable.
α = P(rechazar H0 | H0 cierta) error tipo I
β = P(no rechazar H0 | H0 falsa) error tipo II
potencia = 1 − βToda prueba puede fallar de dos maneras. El error tipo I es una falsa alarma: rechazar una nula que era cierta. El error tipo II es un fallo de detección: no rechazar una nula que era falsa. Sus tasas se llaman α y β, y no se pueden minimizar ambas a la vez con una muestra fija.
La razón es geométrica. Mover el umbral de decisión hacia la derecha reduce las falsas alarmas y aumenta los fallos de detección; moverlo hacia la izquierda hace lo contrario. Es exactamente el mismo compromiso que en clasificación entre precisión y exhaustividad, y la curva ROC es su representación gráfica.
Cuál de los dos errores duele más es una decisión del dominio, no de la estadística. En un cribado de cáncer un falso negativo es mucho peor que un falso positivo, y conviene un α alto. En un juicio penal la asimetría es la opuesta. El convenio de α = 0,05 es una herencia histórica de Fisher, no un resultado matemático, y en física de partículas se usa un umbral equivalente a cinco sigmas.
La única forma de reducir ambos errores simultáneamente es aumentar el tamaño muestral, porque estrecha las distribuciones y reduce su solapamiento. Ese es el contenido de la clase siguiente y la razón por la que el cálculo de potencia debe hacerse antes de recoger datos.
Tasas observadas con α nominal 0,05 y un efecto real de media desviación.
Bajo H0 cierta (efecto nulo):
tasa de error tipo I observada = 0,0683 ≈ α
Bajo H1 cierta (efecto d = 0,5):
tasa de error tipo II (β) = 0,2083
potencia (1 − β) = 0,7917
Compromiso al mover el umbral:
α β potencia
0,100 0,133 0,867
0,050 0,208 0,792
0,010 0,392 0,608
0,001 0,616 0,384
Bajar α diez veces casi duplica β. Solo subir n mejora ambos.Errores tipo I y II: el compromiso es inevitable.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | alfa_nominal, tasa_error_tipo_I_observada, efecto_real, tasa_error_tipo_II_(beta), potencia_1-beta |
| Comprobaciones (1) | bajar_alfa_sube_beta |
compmath run 208Umbrales de clasificadores, sistemas de alerta, cribado médico, detección de fraude y criterios de parada en monitorización.
9780387217369 verificado en International ISBN Agency (2026-08-19).9780203771587 verificado en International ISBN Agency (2026-08-19).Sin potencia declarada, un resultado no significativo no distingue entre no hay efecto y no hay datos.
potencia = 1 − β = P(rechazar H0 | H1 cierta)
d de Cohen = (μ₁ − μ₀) / σ
n ≈ 16/d² para 80 % de potencia con α = 0,05La potencia es la probabilidad de detectar un efecto que realmente existe. Depende de tres cosas: el tamaño del efecto, el nivel α y el tamaño muestral. Fijadas las dos primeras, es el n el que decide, y por eso el cálculo de potencia es un paso de diseño, no de análisis.
Un estudio con potencia baja tiene un problema doble, y el segundo es el que casi nadie menciona. El primero es obvio: probablemente no detectará el efecto. El segundo es más grave: si lo detecta, la magnitud estimada estará inflada, porque solo las muestras con desviación favorable superan el umbral. Es el fenómeno de la maldición del ganador, y explica buena parte de la crisis de replicación.
El tamaño del efecto —la d de Cohen, la diferencia en unidades de desviación— es la pieza que hay que estimar antes de empezar, a partir de literatura previa o de un estudio piloto. Es independiente de n, a diferencia del p-value, y es lo que debe reportarse junto a la significancia.
La regla práctica n ≈ 16/d² da el orden de magnitud para un 80 % de potencia. Detectar un efecto mediano necesita unas 64 observaciones por grupo; detectar uno pequeño de d = 0,2 necesita unas 400. Descubrir eso al terminar el experimento, y no al planificarlo, es descubrir que el estudio nunca pudo concluir nada.
Potencia frente a tamaño muestral con efecto d = 0,5 y α = 0,05.
d = 0,5 α = 0,05
n potencia
10 0,3526
30 0,7819
64 0,9666
100 0,9963
n necesario para 80 % de potencia: 32 por grupo
regla práctica 16/d² = 16/0,25 = 64 (conservadora, dos grupos)
Con n = 10 y resultado no significativo:
la probabilidad de detectar el efecto era del 35 %
no rechazar no informa casi nada
Efectos pequeños (d = 0,2) exigen n ≈ 400 por grupo.Potencia en función del tamaño muestral.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | tamaño_del_efecto_d, alfa, n_para_potencia_80% |
| Comprobaciones (0) | — |
compmath run 209Planificación de experimentos A/B, dimensionado de ensayos clínicos, diseño de estudios de usabilidad y evaluación de si una comparación de modelos puede concluir algo.
9780203771587 verificado en International ISBN Agency (2026-08-19).10.1038/nrn3475 verificado en Crossref (2026-08-19).La t de Student compara medias cuando la varianza poblacional es desconocida.
t = (x̄₁ − x̄₂) / (s_p·√(1/n₁ + 1/n₂))
s_p² = ((n₁−1)s₁² + (n₂−1)s₂²) / (n₁+n₂−2)
gl = n₁ + n₂ − 2Cuando se compara la media de dos grupos y no se conoce la varianza poblacional, sustituir σ por su estimación introduce incertidumbre adicional. La distribución t la absorbe con colas más pesadas que la normal: para el mismo nivel de confianza exige valores más extremos, y esa penalización se relaja al crecer los grados de libertad.
El estadístico tiene una lectura directa: es la diferencia observada dividida entre el ruido esperado de esa diferencia. Un t de 2,7 significa que los grupos están separados por 2,7 veces la incertidumbre de la medición, lo cual es difícil de explicar por azar.
La versión clásica supone normalidad aproximada, independencia y varianzas similares. La normalidad es la menos crítica gracias al TCL; la independencia es la más crítica y la más violada, típicamente con medidas repetidas del mismo sujeto, que exigen la versión pareada. Con varianzas muy distintas se usa la corrección de Welch, que es hoy el valor por defecto en la mayoría de bibliotecas.
El t-test da un p-value, pero lo que hay que reportar es la diferencia con su intervalo de confianza. «Los grupos difieren en 11,3 puntos, IC 95 % [2,9 , 19,6]» comunica magnitud y precisión; «p = 0,009» solo comunica que la diferencia no es cero.
Dos grupos independientes de 25 observaciones cada uno.
grupo A: media 94,2816
grupo B: media 105,5441
diferencia 11,2626
desviación combinada s_p = 14,6574
SE de la diferencia = 14,6574·√(1/25 + 1/25) = 4,1457
t = 11,2626 / 4,1457 = 2,7167 gl = 48
valor crítico bilateral al 5 %: ±2,011
|2,7167| > 2,011 → se rechaza H0
p ≈ 0,0091
IC 95 % de la diferencia:
11,2626 ± 2,011 × 4,1457 = (2,926 , 19,600)
Reportar el intervalo, no solo el p-value.t-test de dos muestras independientes.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | grupo_A_media, grupo_B_media, diferencia, desviacion_combinada, estadistico_t, grados_de_libertad, valor_critico_aprox_2.01, d_de_Cohen |
| Comprobaciones (1) | significativo_al_5% |
compmath run 210Comparación de dos variantes en A/B testing, contraste de métricas entre dos modelos, ensayos clínicos de dos brazos y estudios de rendimiento antes y después.
9780387217369 verificado en International ISBN Agency (2026-08-19).10.2307/2331554 verificado en Crossref (2026-08-19).Chi-cuadrado compara frecuencias observadas con las esperadas bajo independencia.
χ² = Σ (O − E)² / E
E_ij = (total fila i × total columna j) / n
gl = (filas − 1)·(columnas − 1)Cuando las dos variables son categóricas, la comparación de medias no aplica y el instrumento natural es la tabla de contingencia: el recuento cruzado de categorías. La pregunta es si la distribución de una variable cambia según el valor de la otra, es decir, si son independientes.
La tabla esperada bajo independencia se construye con la regla del producto de la clase 185: si las variables fueran independientes, la proporción conjunta sería el producto de las marginales, y multiplicando por n se obtiene la frecuencia esperada de cada celda. El estadístico suma las discrepancias al cuadrado normalizadas por lo esperado.
Normalizar por E es esencial: una diferencia de 5 en una celda donde se esperaban 10 es enorme, y en una donde se esperaban 1000 es ruido. Los grados de libertad, (f−1)·(c−1), cuentan cuántas celdas quedan libres una vez fijados los totales marginales.
El test tiene dos condiciones prácticas. Trabaja con frecuencias absolutas, nunca con porcentajes: aplicarlo a porcentajes convierte cualquier tabla en una de n = 100 y falsea el resultado. Y exige frecuencias esperadas razonables —la regla habitual es al menos 5 por celda—; con celdas pequeñas corresponde el test exacto de Fisher.
Tabla 2×2 con 100 observaciones.
observado C1 C2 | total
F1 30 20 | 50
F2 15 35 | 50
-----------------------------------
total 45 55 | 100
esperado bajo independencia E = fila × columna / n
F1: 50·45/100 = 22,5 50·55/100 = 27,5
F2: 22,5 27,5
χ² = (30−22,5)²/22,5 + (20−27,5)²/27,5
+ (15−22,5)²/22,5 + (35−27,5)²/27,5
= 2,5 + 2,045 + 2,5 + 2,045 = 9,0909
gl = (2−1)(2−1) = 1 valor crítico al 5 % = 3,841
9,0909 > 3,841 → se rechaza la independencia
p ≈ 0,0026Chi-cuadrado de independencia sobre una tabla de contingencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | chi_cuadrado, grados_de_libertad, valor_critico_5% |
| Comprobaciones (1) | rechaza_independencia |
compmath run 211Análisis de encuestas, matrices de confusión, comparación de tasas por segmento y detección de asociación entre variables categóricas.
9780387217369 verificado en International ISBN Agency (2026-08-19).9780470463635 verificado en International ISBN Agency (2026-08-20).ANOVA compara varias medias a la vez sin inflar la tasa de falsos positivos.
SS_total = SS_entre + SS_dentro
F = (SS_entre/gl_entre) / (SS_dentro/gl_dentro)
k grupos ⟹ C(k,2) comparaciones por paresCon tres o más grupos, hacer todos los t-tests por pares infla la tasa de falsos positivos: con 3 grupos son 3 comparaciones y la probabilidad de alguna falsa alarma sube del 5 % al 14 %; con 5 grupos son 10 comparaciones y sube al 40 %. ANOVA resuelve el problema con un único contraste global.
Su mecanismo es una descomposición de la variabilidad, y es la misma idea del teorema de Pitágoras aplicada a sumas de cuadrados. La variación total de los datos respecto de la gran media se parte exactamente en dos: la variación entre grupos, que refleja las diferencias de medias, y la variación dentro de cada grupo, que es ruido.
El estadístico F es el cociente entre ambas, cada una dividida por sus grados de libertad. Si los grupos no difieren, ambas estiman la misma varianza y F ronda 1. Si difieren, la variación entre grupos crece y F se dispara. El nombre honra a Fisher, que lo desarrolló para experimentos agrícolas.
ANOVA solo dice si hay alguna diferencia, no cuál. Para localizarla hacen falta contrastes posteriores con corrección —Tukey, Bonferroni o Holm—, y hacerlos sin corregir devuelve el problema al punto de partida. Los supuestos son los del t-test extendidos: independencia, normalidad aproximada y homogeneidad de varianzas.
Tres grupos, descomposición completa de la variabilidad.
medias de los grupos: 51,0576 54,4184 56,2285
gran media: 53,9015
SS_entre = 275,3983 gl = k − 1 = 2
SS_dentro = 1 610,7534 gl = n − k = 57
SS_total = 1 886,1516 comprobación: 275,40 + 1610,75 ✓
MS_entre = 275,3983 / 2 = 137,699
MS_dentro = 1610,7534 / 57 = 28,259
F = 137,699 / 28,259 = 4,873
valor crítico F(2,57) al 5 % ≈ 3,16
4,873 > 3,16 → al menos un grupo difiere p ≈ 0,011
Inflación sin ANOVA:
3 t-tests sin corregir → P(falso positivo) ≈ 14 %ANOVA de un factor: descomposición de la variabilidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | grupos, gran_media, SS_entre, SS_dentro, SS_total, estadistico_F, valor_critico_aprox_3.16, eta_cuadrado |
| Comprobaciones (1) | significativo |
compmath run 212Comparación de más de dos variantes en un experimento, evaluación de varias configuraciones de modelo, diseño factorial y estudios multicentro.
9780387217369 verificado en International ISBN Agency (2026-08-19).Un confusor basta para fabricar correlación fuerte entre variables que no se tocan.
corr(X,Y) alta ⇏ X → Y
confusor Z: Z → X y Z → Y
aleatorizar la asignación rompe todas las flechas hacia el tratamientoQue dos variables se muevan juntas admite al menos cuatro explicaciones distintas: X causa Y, Y causa X, una tercera variable Z causa ambas, o es coincidencia en una muestra pequeña. La correlación no distingue entre ellas, y elegir la primera por defecto es el error de interpretación más caro de la estadística aplicada.
El caso escolar —venta de helados y ahogamientos— tiene la estructura completa. Ambas variables suben con la temperatura, y por eso correlacionan entre sí sin que ninguna cause la otra. La variable de confusión es la temperatura, y basta condicionar sobre ella para que la asociación se desvanezca.
Hay dos formas de romper el problema. La primera es aleatorizar: si el tratamiento se asigna al azar, ninguna variable previa —ni las conocidas ni las que se ignoran— puede influir en quién lo recibe, y la diferencia observada sí admite lectura causal. Es la razón de ser del ensayo controlado aleatorizado. La segunda es controlar los confusores conocidos mediante estratificación o regresión, con la limitación evidente de que solo funciona con los que se han identificado.
La inferencia causal moderna —grafos causales, criterio de puerta trasera, contrafactuales— formaliza cuándo un ajuste es válido y cuándo introduce sesgo nuevo. Un resultado contraintuitivo: controlar por una variable equivocada, como un colisionador, crea asociación espuria en vez de eliminarla. Ajustar por todo lo disponible no es una estrategia segura.
Helados, ahogamientos y temperatura.
corr(helados, ahogamientos) = 0,5759
corr(temperatura, helados) = 0,9205
corr(temperatura, ahogamientos) = 0,6306
Estructura causal real:
temperatura → helados
temperatura → ahogamientos
helados ↛ ahogamientos
Al condicionar sobre temperatura, la correlación
entre helados y ahogamientos se desvanece.
Prohibir el helado no reduciría ni un ahogamiento.
Detección:
aleatorizar la asignación, o
controlar explícitamente el confusor.Una variable de confusión genera correlación sin causalidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | corr(helados, ahogamientos), corr(temperatura, helados), corr(temperatura, ahogamientos) |
| Comprobaciones (1) | hay_flecha_causal_helados→ahogamientos |
compmath run 213Evaluación de campañas y políticas, atribución de conversiones, análisis de sesgo en modelos y diseño de experimentos controlados.
9781543695267 verificado en International ISBN Agency (2026-08-19).Un R² alto no valida el modelo: los residuos son los que lo hacen.
ŷ = b₀ + b₁x, b₁ = Σ(x−x̄)(y−ȳ) / Σ(x−x̄)²
R² = 1 − SS_res / SS_tot
t = b₁ / SE(b₁), gl = n − 2La regresión lineal ajusta la recta que minimiza la suma de residuos al cuadrado. Vista desde el álgebra lineal es la proyección de la parte 05; vista desde la estadística, cada coeficiente es un estimador con su error estándar, su intervalo de confianza y su contraste de significancia.
El coeficiente de determinación R² mide qué fracción de la variabilidad de y explica el modelo. Es útil pero se sobreinterpreta: un R² alto no garantiza que el modelo sea correcto, ni que la relación sea causal, ni que sirva para predecir fuera del rango observado. Añadir variables sin sentido siempre sube el R², y por eso existe el R² ajustado.
Lo que sí valida el modelo son los residuos. Deben aparecer sin estructura: sin curvatura —que indicaría relación no lineal—, sin embudo —que indicaría varianza no constante— y sin patrón temporal —que indicaría dependencia—. El cuarteto de Anscombe construye cuatro conjuntos con idénticos coeficientes y R² de los que solo uno merece una recta.
La significancia de la pendiente contrasta H0: b₁ = 0, es decir, que x no aporta nada. Como en toda la parte, lo que hay que reportar es la pendiente con su intervalo: dice cuánto cambia y por unidad de x y con qué precisión, que es la información útil para decidir.
Ocho puntos con relación casi perfectamente lineal.
n = 8
intercepto b₀ = 0,1750
pendiente b₁ = 1,9917
R² = 0,998227 SS_residual = 0,295833
SE(b₁) = 0,034263
t = 1,9917 / 0,034263 = 58,13 gl = 6
p < 0,0001 → la pendiente es claramente distinta de cero
IC 95 % de la pendiente:
1,9917 ± 2,447 × 0,034263 = (1,9078 , 2,0755)
Lectura: cada unidad de x aumenta y en ≈ 1,99, con
una precisión de ±0,08. Eso es lo que hay que reportar.Regresión lineal con R², error estándar y significancia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | n, intercepto, pendiente, R², SS_residual, error_estandar_pendiente, t_de_la_pendiente |
| Comprobaciones (1) | significativa |
compmath run 214Modelos base en aprendizaje automático, análisis de tendencias, calibración de instrumentos y estimación de elasticidades.
9780387217369 verificado en International ISBN Agency (2026-08-19).10.1080/00031305.1973.10478966 verificado en Crossref (2026-08-19).La máxima verosimilitud elige el parámetro que hace más probables los datos observados.
L(θ) = Π f(xᵢ | θ)
ℓ(θ) = Σ log f(xᵢ | θ)
para la normal: μ̂ = x̄, σ̂² = Σ(xᵢ − x̄)²/nLa máxima verosimilitud invierte la pregunta habitual. En vez de fijar el parámetro y preguntar qué datos son probables, fija los datos observados y pregunta qué valor del parámetro los habría hecho más probables. Ese valor es el estimador MLE.
Se trabaja siempre con el logaritmo de la verosimilitud, por dos razones. La primera es algebraica: convierte productos en sumas y las derivadas se vuelven manejables. La segunda es numérica y decisiva: multiplicar mil densidades menores que 1 produce subdesbordamiento a cero en punto flotante, mientras que sumar mil logaritmos no tiene ese problema. Es la misma lección de la parte 01.
Para la normal el resultado es especialmente limpio: el MLE de la media es la media muestral, y el de la varianza es la versión que divide entre n, que es sesgada. Eso ya dice algo importante: el MLE no tiene por qué ser insesgado, aunque sí es consistente y asintóticamente eficiente bajo condiciones de regularidad.
El vínculo con el aprendizaje automático es de identidad, no de analogía. Minimizar el error cuadrático medio es maximizar la verosimilitud bajo ruido gaussiano; minimizar la entropía cruzada es maximizar la verosimilitud bajo un modelo categórico. Las funciones de pérdida no se inventan: se derivan del modelo probabilístico que se supone para los datos.
Ajuste normal por máxima verosimilitud sobre 20 observaciones.
n = 20
μ̂ (MLE) = 12,6050 coincide con la media muestral
σ̂ (MLE) = 0,8411 divide entre n, no entre n−1
log-verosimilitud máxima = −24,9182
Barrido en μ manteniendo σ̂:
μ = 11,61 → ℓ = −39,0530
μ = 12,11 → ℓ = −28,4519
μ = 12,61 → ℓ = −24,9182 ← máximo
μ = 13,11 → ℓ = −28,4519
μ = 13,61 → ℓ = −39,0530
La curva es simétrica y su máximo cae en la media muestral.
Su curvatura en el máximo determina la precisión del estimador.MLE para la normal: la media muestral maximiza la verosimilitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | n, mu_MLE, sigma_MLE, log_verosimilitud_maxima |
| Comprobaciones (1) | el_maximo_esta_en_la_media |
compmath run 215Derivación de funciones de pérdida, ajuste de modelos paramétricos, criterios AIC y BIC y entrenamiento de modelos generativos.
9780387217369 verificado en International ISBN Agency (2026-08-19).MAP es verosimilitud más prior, y ese prior es exactamente la regularización.
θ_MAP = argmax [ log L(θ) + log p(θ) ]
prior uniforme ⟹ MAP = MLE
prior gaussiano ⟹ penalización L2; prior Laplace ⟹ L1La estimación MAP añade a la verosimilitud una creencia previa sobre el parámetro y maximiza la posterior. Formalmente es un cambio pequeño —sumar log p(θ) al objetivo— pero cambia el comportamiento del estimador cuando hay pocos datos, que es justo cuando hace falta ayuda.
La equivalencia con la regularización es exacta y merece verse una vez con detalle. Un prior gaussiano centrado en cero aporta un término −λ‖θ‖² al objetivo, que es la penalización L2 o weight decay. Un prior de Laplace aporta −λ‖θ‖₁, que es Lasso y produce soluciones dispersas. Regularizar no es un truco de ingeniería: es declarar una creencia previa.
El comportamiento asintótico es el esperado: al crecer n, la verosimilitud domina y el MAP converge al MLE. El prior importa cuando la evidencia es escasa, se diluye cuando abunda, y desaparece por completo si es uniforme. Esa es la respuesta a la objeción de que el prior contamina el resultado.
La diferencia con la inferencia bayesiana completa de la clase siguiente es que MAP se queda con un punto: el máximo de la posterior. Es rápido y encaja con cualquier optimizador, pero descarta toda la información sobre incertidumbre. Y en dimensión alta el máximo puede estar en una región de probabilidad casi nula, lo que hace de MAP un resumen engañoso de la posterior.
Prior sesgado hacia 0,8 frente a un parámetro real de 0,4.
parámetro real = 0,40 prior = Beta(8,2), centrado en 0,8
n MLE MAP distancia MAP al real
5 0,6000 0,7692 0,3692
20 0,4500 0,5357 0,1357
100 0,4100 0,4340 0,0340
1000 0,4030 0,4055 0,0055
Con n = 5 el prior domina y empeora la estimación.
Con n = 1000 el prior es irrelevante: MAP → MLE.
Equivalencias:
prior uniforme → MAP = MLE
prior gaussiano → regularización L2
prior Laplace → regularización L1MAP: verosimilitud más prior, y su límite con muchos datos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | parametro_real |
| Comprobaciones (3) | MAP_converge_al_MLE, el_prior_domina_con_pocos_datos, MAP_con_prior_uniforme_es_MLE |
compmath run 216Weight decay y Lasso, suavizado de Laplace en modelos de lenguaje, estimación con datos escasos y calibración con conocimiento del dominio.
El intervalo creíble sí admite la lectura probabilística que el de confianza no admite.
p(θ | datos) ∝ p(datos | θ)·p(θ)
Beta(a,b) + k éxitos en n ⟹ Beta(a+k, b+n−k)
intervalo creíble al 95 %: región con masa posterior 0,95La inferencia bayesiana trata el parámetro como una variable aleatoria y devuelve su distribución completa dada la evidencia. No un punto con una barra de error, sino una función que asigna plausibilidad a cada valor posible. De ella se leen la media, la moda, la desviación y cualquier intervalo que interese.
Esa diferencia de objeto produce una diferencia de interpretación. El intervalo creíble al 95 % contiene el parámetro con probabilidad 0,95 según la posterior, y esa es exactamente la frase que no se podía decir del intervalo de confianza en la clase 205. La lectura intuitiva que todo el mundo quiere hacer es correcta aquí, y solo aquí.
La conjugación hace el cálculo trivial en casos favorables. Con prior Beta y verosimilitud binomial, la posterior es Beta con parámetros actualizados: sumar los éxitos a a y los fracasos a b. Un prior Beta(1,1) es uniforme y representa ignorancia previa; con él, la media posterior es (k+1)/(n+2), la regla de sucesión de Laplace.
Lo que el enfoque exige a cambio es declarar el prior. Esa exigencia se presenta a veces como debilidad, pero es transparencia: todo análisis incorpora supuestos, y el bayesiano obliga a escribirlos. La crítica seria no es filosófica sino computacional: fuera de los casos conjugados la posterior no tiene forma cerrada y hay que recurrir a MCMC o a inferencia variacional, que es adonde llega la parte 17.
Prior uniforme y evidencia creciente sobre un parámetro real de 0,62.
parámetro real = 0,62 prior = Beta(1,1) = uniforme
n posterior media desv.
0 Beta(1,1) 0,5000 0,2887
10 Beta(7,5) 0,5833 0,1370
50 Beta(32,20) 0,6154 0,0669
200 Beta(125,77) 0,6188 0,0340
1000 Beta(621,381) 0,6198 0,0153
La media se acerca al valor real y la desviación cae como 1/√n.
Intervalo creíble al 95 % con n = 1000:
aproximadamente (0,590 , 0,650)
Lectura legítima:
"hay un 95 % de probabilidad de que θ esté ahí"
Esa frase sería incorrecta para un intervalo de confianza.Actualización bayesiana conjugada Beta-Binomial.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | parametro_real |
| Comprobaciones (1) | la_incertidumbre_se_reduce |
compmath run 217Tests A/B bayesianos, bandidos multibrazo, cuantificación de incertidumbre en modelos y estimación con datos escasos.
9781439840955 verificado en International ISBN Agency (2026-08-19).9780429642319 verificado en International ISBN Agency (2026-08-19).El bootstrap estima la variabilidad remuestreando los datos, sin suponer distribución.
remuestrear n observaciones con reposición, B veces
SE_bootstrap = desviación estándar de las B réplicas
IC percentil: cuantiles 2,5 % y 97,5 % de las réplicasEl bootstrap parte de una idea que suena a trampa: usar la muestra como si fuera la población. Se extraen B muestras del mismo tamaño con reposición de los datos originales, se calcula el estadístico en cada una, y la dispersión de esas B réplicas estima la variabilidad del estadístico.
Su valor está en que funciona para estadísticos sin fórmula cerrada. Para la media existe σ/√n, pero para la mediana, el percentil 95, la razón de dos medias, el coeficiente de correlación o una métrica de evaluación de un modelo, deducir el error estándar analíticamente es difícil o imposible. El bootstrap lo obtiene igual en todos los casos, cambiando análisis por cómputo.
El intervalo percentil se lee directamente de los cuantiles de las réplicas, sin suponer normalidad ni simetría. Con distribuciones asimétricas produce intervalos asimétricos, que es lo correcto, mientras que el intervalo ±1,96·SE fuerza simetría aunque los datos no la tengan.
No es magia y tiene límites claros. Sigue exigiendo que la muestra sea representativa —el bootstrap no arregla el sesgo de selección de la clase 202— y falla con estadísticos de valores extremos, como el máximo, porque el remuestreo no puede generar valores que no estaban. Con datos dependientes hay que usar variantes por bloques.
Bootstrap de la media con 20 observaciones y 10 000 réplicas.
n = 20 B = 10 000
media observada = 12,6050
SE bootstrap = 0,188371
SE teórico = 0,192965 coinciden al 2 % ✓
IC 95 % percentil: (12,235 , 12,980)
IC 95 % paramétrico: (12,227 , 12,983)
Ventaja real: la mediana no tiene fórmula sencilla de SE,
y el bootstrap la da con el mismo procedimiento.
Límite: para el máximo el bootstrap subestima gravemente
la variabilidad, porque nunca genera valores nuevos.Bootstrap: estimar la variabilidad sin suponer la distribución.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | n, replicas, media_observada, SE_bootstrap_de_la_media, SE_teorico, SE_bootstrap_de_la_mediana |
| Comprobaciones (0) | — |
compmath run 218Intervalos de confianza para métricas de modelos, comparación de algoritmos, estimación de incertidumbre en estadísticos complejos y bagging.
9780429246593 verificado en International ISBN Agency (2026-08-19).9780387217369 verificado en International ISBN Agency (2026-08-19).Un A/B test se diseña antes de recogerlo: tamaño muestral, métrica y criterio de parada.
z = (p̂_B − p̂_A) / √(p̂(1−p̂)(1/n_A + 1/n_B))
lift relativo = (p_B − p_A) / p_A
n por grupo ≈ 16·p(1−p) / Δ² para 80 % de potenciaUn A/B test es un ensayo controlado aleatorizado aplicado a producto. La aleatorización es lo que le da valor causal: si la asignación al grupo es al azar, las diferencias observadas se atribuyen al cambio y no a características previas de los usuarios. Sin aleatorización es un estudio observacional con todos los confusores de la clase 213.
Tres decisiones deben tomarse antes de recoger datos: la métrica principal, el tamaño del efecto mínimo relevante, y el tamaño muestral que da potencia suficiente para detectarlo. Sin esas tres, el experimento no puede concluir nada aunque se ejecute perfectamente.
El error operativo más destructivo es el peeking: mirar el resultado a diario y parar cuando aparece p < 0,05. Ese procedimiento multiplica la tasa de falsos positivos por tres o más, porque da múltiples oportunidades de cruzar el umbral por azar. Las soluciones son fijar la duración de antemano o usar métodos de parada secuencial diseñados para ello.
Y hay que separar significancia de relevancia. Un lift del 17 % con p = 0,0098 es un resultado sólido; el mismo p con un lift del 0,3 % puede no justificar el coste del cambio. Lo que se decide no es si el efecto es distinto de cero, sino si merece la pena, y para eso hace falta el intervalo del efecto, no el p-value.
Experimento de conversión con 4 000 usuarios por grupo.
grupo A (control): conversión 0,10350
grupo B (variante): conversión 0,12175
diferencia absoluta: 0,01825
lift relativo: 17,63 %
n por grupo = 4 000
proporción combinada p̂ = 0,112625
SE = √(0,112625 · 0,887375 · (1/4000 + 1/4000)) = 0,007070
z = 0,01825 / 0,007070 = 2,5817
p = 0,00983 → significativo al 5 %
IC 95 % de la diferencia:
0,01825 ± 1,96 × 0,007070 = (0,00439 , 0,03211)
lift entre 4,2 % y 31,0 %
Peeking diario durante 14 días sin corrección:
tasa real de falsos positivos ≈ 20 %, no 5 %.A/B test de proporciones con tamaño muestral y significancia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | conversion_A, conversion_B, lift_relativo_%, n_por_grupo, estadistico_z, p_value, n_requerido_para_80%_de_potencia |
| Comprobaciones (1) | significativo_al_5% |
compmath run 219Experimentación de producto, comparación de modelos en producción, optimización de conversión y despliegues progresivos.
9781108601375 verificado en International ISBN Agency (2026-08-19).9780387217369 verificado en International ISBN Agency (2026-08-19).Un estudio creíble declara su semilla, su intervalo y lo que no puede concluir.
reportar: efecto, IC, n, α, potencia y semilla
IC paramétrico frente a IC bootstrap como comprobación cruzada
d de Cohen = diferencia / desviación combinadaEl capstone ejecuta un estudio completo con la disciplina de la parte entera: diseño de dos grupos independientes, semilla fija, análisis decidido de antemano, y reporte que incluye tanto lo que se concluye como lo que no. El objetivo no es obtener un resultado llamativo sino uno defendible.
La reproducibilidad empieza por la semilla. Un análisis que no se puede reejecutar y obtener los mismos números no es verificable, y no serlo es un defecto tan grave como un error de cálculo. Fijar la semilla, versionar los datos y dejar el código ejecutable es lo mínimo exigible.
El reporte debe llevar el efecto con su intervalo, no solo el p-value. Y conviene calcular el intervalo por dos vías —paramétrica y bootstrap— porque su coincidencia es evidencia de que los supuestos se sostienen, y su discrepancia es una señal de alarma que merece investigarse antes de publicar.
Por último, un estudio honesto declara sus límites: la población a la que se puede extrapolar, los supuestos que se han hecho, las comparaciones que se han realizado y las preguntas que este diseño no puede responder. Escribir esa sección obliga a mirar las debilidades, y esa mirada es lo que separa el análisis del marketing con números.
Estudio de dos grupos con n = 60 por brazo, semilla fija.
semilla = 20260827
diseño: dos grupos independientes, n = 60 cada uno
media control = 73,1961
media tratamiento = 75,2439
diferencia = 2,0478
IC 95 % paramétrico: (−0,9648 , 5,0604)
IC 95 % bootstrap: (−0,9531 , 5,0442) coinciden ✓
El intervalo contiene el cero → no se rechaza H0.
p ≈ 0,18 d de Cohen ≈ 0,25 (efecto pequeño)
Potencia para d = 0,25 con n = 60 por grupo: ≈ 30 %
→ el estudio no tenía potencia para detectarlo
Conclusión honesta: no hay evidencia suficiente; el diseño
no permite descartar un efecto de hasta 5 puntos.Capstone: estudio completo, reproducible y con límites declarados.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | semilla, media_control, media_tratamiento, diferencia, estadistico_t, d_de_Cohen, potencia_aproximada |
| Comprobaciones (2) | significativo, reproducible |
compmath run 220Informes técnicos, tarjetas de modelo, publicaciones científicas, auditorías internas y documentación de experimentos de producto.
9781108601375 verificado en International ISBN Agency (2026-08-19).10.1371/journal.pcbi.1005510 verificado en Crossref (2026-08-19).Raíces, interpolación, splines, diferenciación y cuadratura numérica, sistemas lineales iterativos, mínimos cuadrados y ecuaciones diferenciales.
Casi ninguna ecuación interesante tiene solución en forma cerrada. No hay fórmula para las raíces de un polinomio de grado cinco, ni para la integral de e^(−x²), ni para la mayoría de las ecuaciones diferenciales que describen el mundo físico. Los métodos numéricos son la respuesta a ese hecho: aproximar con error controlado en vez de resolver exactamente.
La palabra clave es controlado. Un método numérico sin estimación de error es un generador de números plausibles, y la diferencia entre un resultado y un número plausible es exactamente lo que esta parte enseña a establecer. Por eso la clase 221 abre con la tensión que gobierna todo lo demás: el error de truncamiento baja al reducir el paso h, pero el error de redondeo sube, y existe un h óptimo por debajo del cual afinar más empeora el resultado. Es la parte 01 reapareciendo con consecuencias prácticas.
Las clases 222 a 224 buscan raíces. Bisección es lenta pero garantizada: si hay cambio de signo, converge siempre. Newton es cuadrático —duplica los dígitos correctos en cada paso— pero solo cerca de la raíz, necesita la derivada y puede divergir espectacularmente desde un mal punto inicial. La secante renuncia a la derivada a cambio de un orden 1,618, el número áureo, y suele ser el mejor compromiso práctico.
Las clases 225 a 230 tratan de reconstruir funciones y de integrarlas. El fenómeno de Runge es la lección central: subir el grado del polinomio interpolador no mejora la aproximación, la empeora, con oscilaciones cada vez más violentas cerca de los extremos. La solución no es más grado sino trozos pequeños, y de ahí salen los splines. En integración aparece el concepto de orden: el trapecio es O(h²) y duplicar los subintervalos divide el error por 4; Simpson es O(h⁴) y lo divide por 16; la cuadratura gaussiana consigue con tres nodos lo que al trapecio le cuesta cientos.
Las clases 231 a 234 vuelven al álgebra lineal, ahora desde el punto de vista computacional. Los métodos directos como LU resuelven en un número fijo de operaciones; los iterativos como Jacobi y Gauss-Seidel se acercan progresivamente y son los únicos viables en sistemas enormes y dispersos. Aquí aparece la disciplina de los criterios de parada: tolerancia relativa, residuo y tope de iteraciones, los tres a la vez, siempre declarados.
Las clases 235 a 238 resuelven ecuaciones diferenciales. Euler es el método más simple y el peor: orden 1, error que solo se reduce a la mitad al duplicar el trabajo. RK4 cuesta cuatro evaluaciones por paso y es de orden 4, lo que en la práctica significa que RK4 con 5 pasos supera a Euler con 80. La estabilidad aparece como restricción independiente de la precisión, y con problemas rígidos o con ecuaciones en derivadas parciales se vuelve el factor decisivo: la condición de Courant no es una recomendación, es la frontera entre una simulación y una explosión numérica.
El cierre conecta con la práctica: qué aporta SciPy sobre una implementación propia, y por qué merece la pena haber escrito ambas. Se implementa a mano para saber cuándo la biblioteca falla o miente; se usa la biblioteca porque su estabilidad, su control de error y su rendimiento están probados. En inteligencia artificial estos métodos no son historia: los Neural ODE integran con RK4, los samplers de difusión son integradores de ecuaciones estocásticas, y los optimizadores de segundo orden son Newton con la derivada aproximada.
Los Neural ODE, los samplers de difusión y los optimizadores de segundo orden son métodos numéricos con parámetros aprendidos.
| Término | Definición | Clase |
|---|---|---|
| Bisección | Partir por la mitad un intervalo con cambio de signo. Lenta pero convergencia garantizada. | 222 |
| Condición de Courant | Restricción entre paso temporal y espacial. Violarla hace divergir el esquema explícito. | 238 |
| Convergencia cuadrática | El número de dígitos correctos se duplica en cada iteración. | 223 |
| Cuadratura | Aproximación de una integral por suma ponderada de valores de la función. | 228 |
| Cuadratura gaussiana | Nodos y pesos elegidos para ser exactos con polinomios de grado 2n−1. | 228 |
| Diagonalmente dominante | Cada elemento diagonal supera en módulo a la suma de su fila. Garantiza convergencia iterativa. | 232 |
| Diferencia central | (f(x+h) − f(x−h)) / 2h. Error O(h²) frente al O(h) de la diferencia adelantada. | 227 |
| Diferencias finitas | Sustituir derivadas por cocientes sobre una malla para discretizar una PDE. | 238 |
| Ecuaciones normales | AᵀAx = Aᵀb. Resuelven mínimos cuadrados pero elevan al cuadrado el número de condición. | 234 |
| Error de redondeo | El que introduce la aritmética finita. Aumenta al reducir h por cancelación. | 221 |
| Error de truncamiento | El que introduce el método al aproximar. Disminuye al reducir el paso h. | 221 |
| Fenómeno de Runge | Oscilaciones crecientes al interpolar con grado alto en nodos equiespaciados. | 225 |
| Gauss-Seidel | Como Jacobi pero reutilizando los valores ya actualizados. Suele converger el doble de rápido. | 232 |
| Interpolación de Lagrange | Polinomio único de grado n−1 que pasa por n puntos dados. | 225 |
| Método de Euler | Avanzar por la tangente. Orden 1 y una sola evaluación por paso. | 236 |
| Método de la secante | Newton con la derivada aproximada por diferencias. Orden 1,618. | 224 |
| Método directo | Resuelve en un número fijo de operaciones, como LU. Coste O(n³). | 231 |
| Newton-Raphson | Iteración x − f(x)/f'(x). Convergencia cuadrática cerca de la raíz. | 223 |
| Nodos de Chebyshev | Nodos concentrados en los extremos que controlan el error de interpolación. | 225 |
| Orden de convergencia | Exponente p tal que el error se comporta como O(hᵖ). Predice la ganancia al refinar. | 221 |
| Paso óptimo | Valor de h que minimiza el error total. Por debajo, afinar empeora el resultado. | 221 |
| Pivoteo parcial | Intercambiar filas para usar el pivote de mayor módulo y ganar estabilidad. | 231 |
| Problema de valor inicial | EDO más condición inicial. Determina una única trayectoria. | 235 |
| Problema rígido | El que tiene escalas de tiempo muy dispares. Exige métodos implícitos. | 237 |
| Región de estabilidad | Valores del paso para los que el método no amplifica el error. Independiente de la precisión. | 236 |
| Regla de Simpson | Aproxima por parábolas. Error O(h⁴) y exacta hasta grado 3. | 230 |
| Regla del trapecio | Aproxima por trapecios. Error O(h²): duplicar n divide el error por 4. | 229 |
| Residuo | ‖Ax − b‖. Mide cuánto incumple la ecuación la solución aproximada. | 233 |
| Runge-Kutta 4 | Cuatro evaluaciones por paso y error O(h⁴). Estándar de facto para EDO no rígidas. | 237 |
| Spline | Interpolación por tramos de grado bajo. Evita las oscilaciones del grado alto. | 226 |
| Teorema de Bolzano | Si f es continua y cambia de signo en un intervalo, hay una raíz dentro. | 222 |
| Tolerancia relativa | Criterio de parada escalado por la magnitud de la solución. Robusto ante cambios de escala. | 233 |
Reducir el paso mejora hasta que el redondeo toma el control y empeora.
error total ≈ C₁·hᵖ + C₂·ε/h
diferencia adelantada: O(h); central: O(h²)
h óptimo de la central ≈ ε^(1/3) ≈ 6·10⁻⁶Todo método numérico arrastra dos errores de naturaleza opuesta. El error de truncamiento proviene de la aproximación matemática —cortar una serie de Taylor, sustituir una curva por una recta— y se reduce al hacer el paso más pequeño. El error de redondeo proviene de la aritmética de precisión finita y crece al reducir el paso, porque restar dos números casi iguales y dividir por algo diminuto amplifica el ruido.
La suma de ambos tiene un mínimo. Existe un h óptimo, y por debajo de él afinar más empeora el resultado. Esto contradice la intuición de que «más pequeño es más preciso», y es la razón de que una derivada numérica con h = 10⁻¹⁵ sea basura mientras que con h = 10⁻⁶ sea buena.
El orden de un método es la potencia de h en el término de truncamiento, y es la cifra que permite predecir el comportamiento sin ejecutar nada. Un método de orden 1 divide el error por 2 al duplicar el trabajo; uno de orden 2 lo divide por 4; uno de orden 4, por 16. Esa diferencia es lo que decide entre segundos y horas de cómputo.
La consecuencia metodológica es que hay que medir el orden empíricamente. Ejecutar con h y con h/2, calcular el cociente de errores y comprobar que sale lo que la teoría predice, es la prueba más eficaz de que una implementación es correcta: un método de orden 4 cuyo error solo se divide por 2 tiene un error de programación.
Derivada numérica de sen en x = 1, con distintos pasos.
valor exacto: cos(1) = 0,5403023058681398
h error adelantada error central
1e-01 4,294e-02 9,00e-04
1e-03 4,207e-04 9,00e-08
1e-05 4,207e-06 9,04e-12
1e-07 4,361e-08 6,07e-10 ← empeora
1e-09 2,721e-08 2,72e-08 ← ruido
1e-11 6,004e-06 6,00e-06 ← basura
La central es O(h²): h × 0,01 → error × 0,0001 ✓
hasta que el redondeo domina cerca de h ≈ 1e-6.
h óptimo aproximado para la central: ε^(1/3) ≈ 6e-6Error de truncamiento frente a error de redondeo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | derivada_exacta, h_optimo_aprox |
| Comprobaciones (0) | — |
compmath run 221Comprobación de gradientes numéricos frente a autodiferenciación, validación de integradores y elección de pasos en simulación.
9781611975581, pendiente de resolver.9780898718027, pendiente de resolver.Bisección es la única que nunca falla si hay cambio de signo, y por eso es la red de seguridad.
si f(a)·f(b) < 0, hay raíz en (a,b)
amplitud tras n pasos: (b−a)/2ⁿ
n ≈ log₂((b−a)/tol) iteracionesLa bisección se apoya en el teorema de Bolzano: si una función continua cambia de signo entre dos puntos, hay al menos una raíz entre ellos. El método evalúa el punto medio, mira el signo, y se queda con la mitad que sigue conteniendo el cambio. Cada paso reduce exactamente a la mitad la incertidumbre.
Su virtud es la garantía. No hay condiciones adicionales, no hay puntos iniciales malos, no diverge nunca. El número de iteraciones se conoce de antemano: log₂((b−a)/tol), unas 41 para pasar de un intervalo de amplitud 2 a la precisión de la máquina. Esa previsibilidad es lo que la hace insustituible como respaldo.
Su defecto es la lentitud. Cada iteración gana un solo bit de precisión, mientras que Newton duplica los dígitos correctos. Para el mismo problema, bisección necesita 41 evaluaciones donde Newton necesita 6. Cuando la evaluación de la función es cara, la diferencia es determinante.
La limitación menos obvia es que necesita un cambio de signo, y por tanto no encuentra raíces dobles como la de x², donde la función toca el eje sin cruzarlo. Los métodos robustos de producción, como Brent, combinan bisección con interpolación: usan la rápida cuando funciona y caen a la garantizada cuando no.
Raíz de x³ − 2x − 4 en el intervalo de 1 a 3.
f(1) = −5 < 0 f(3) = 17 > 0 hay cambio de signo
iter x f(x) amplitud
1 2,0000 0,000000 1,000
5 1,9375 −0,603760 0,0625
10 2,0020 0,020000 0,00195
20 2,0000 1,9e-05 1,9e-06
41 2,0000 −4,55e-12 9,1e-13
raíz = 2,0 41 iteraciones para 12 dígitos
Predicción teórica: log₂(2 / 1e-12) ≈ 41 ✓
Newton alcanza la misma precisión en 6 iteraciones,
pero necesita la derivada y un buen punto inicial.Bisección: lenta pero garantizada si hay cambio de signo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | raiz, residuo, iteraciones_totales |
| Comprobaciones (1) | cambio_de_signo |
compmath run 222Búsqueda robusta de raíces, calibración de umbrales, respaldo dentro de métodos híbridos y búsqueda de puntos de cruce en curvas monótonas.
9781305253667 verificado en International ISBN Agency (2026-08-20).Newton duplica los dígitos correctos en cada paso, pero solo si empieza cerca.
xₙ₊₁ = xₙ − f(xₙ)/f'(xₙ)
error: eₙ₊₁ ≈ C·eₙ² (convergencia cuadrática)
falla si f'(xₙ) ≈ 0Newton-Raphson aproxima la función por su recta tangente en el punto actual y toma como siguiente candidato el corte de esa recta con el eje. Es el método de la derivada aplicado a la búsqueda de raíces, y su deducción cabe en dos líneas a partir del desarrollo de Taylor de primer orden.
Su convergencia cuadrática es espectacular cuando funciona: si en un paso hay 3 dígitos correctos, en el siguiente hay 6, y en el siguiente 12. Por eso 6 iteraciones bastan donde bisección necesita 41. La cuadraticidad se pierde en raíces múltiples, donde degenera a convergencia lineal.
Los modos de fallo son reales y variados. Si la derivada se anula cerca del iterado, el paso se dispara a infinito. Si el punto inicial está lejos, la iteración puede alejarse, oscilar en un ciclo o converger a una raíz distinta de la buscada. Los fractales de Newton son la representación gráfica de esa sensibilidad extrema al punto de partida.
Su generalización a varias dimensiones sustituye la derivada por el Jacobiano y la división por la resolución de un sistema lineal. Esa versión es la que subyace a los métodos de segundo orden en optimización: minimizar es buscar la raíz del gradiente, y Newton aplicado al gradiente usa el Hessiano. La parte 12 desarrolla esa línea.
Raíz de x³ − 2x − 4 desde x₀ = 3.
f(x) = x³ − 2x − 4 f'(x) = 3x² − 2
iter x error
1 2,320000 3,20e-01
2 2,059716 5,97e-02
3 2,003100 3,10e-03
4 2,000009 9,58e-06
5 2,000000 9,17e-11
6 2,000000 0,00e+00
Los dígitos correctos se duplican: 1 → 2 → 3 → 5 → 10 → 16
6 iteraciones frente a las 41 de bisección.
Modo de fallo: desde x₀ = 0,8 se tiene f'(0,8) = −0,08,
el paso salta a x ≈ −65 y la iteración se descontrola.Newton: convergencia cuadrática cerca de la raíz.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | punto_inicial, raiz, iteraciones, residuo |
| Comprobaciones (1) | duplica_digitos_por_iteracion |
compmath run 223Optimización de segundo orden, resolución de sistemas no lineales, cálculo de funciones inversas y calibración de modelos.
9781305253667 verificado en International ISBN Agency (2026-08-20).9780387400655 verificado en International ISBN Agency (2026-08-19).La secante alcanza orden 1,618 sin necesitar la derivada.
xₙ₊₁ = xₙ − f(xₙ)·(xₙ − xₙ₋₁) / (f(xₙ) − f(xₙ₋₁))
orden de convergencia φ = (1+√5)/2 ≈ 1,618
una sola evaluación de f por iteraciónLa secante sustituye la derivada de Newton por su aproximación mediante los dos últimos iterados. Geométricamente, en vez de la tangente usa la recta que pasa por los dos últimos puntos, y toma su corte con el eje. La fórmula es la de Newton con f' reemplazado por un cociente de diferencias.
El precio es un orden de convergencia menor, exactamente el número áureo φ ≈ 1,618. Que aparezca φ no es casualidad decorativa: la recurrencia que gobierna los exponentes del error es la de Fibonacci, y su razón límite es φ. Es uno de los sitios donde ese número surge por necesidad matemática y no por misticismo.
A cambio, cada iteración cuesta una sola evaluación de f, frente a las dos de Newton —función y derivada—. Cuando evaluar la derivada cuesta lo mismo que evaluar la función, la secante es más eficiente por unidad de trabajo: φ² ≈ 2,6 > 2. Y cuando la derivada no existe en forma cerrada, es directamente la única opción de las dos.
Sus debilidades son parientes de las de Newton: puede diverger desde puntos malos, y falla si los dos últimos valores de la función son casi iguales, porque el denominador se anula. La familia de los métodos cuasi-Newton —BFGS y L-BFGS en optimización— es esta misma idea llevada a varias dimensiones: aproximar la información de segundo orden a partir de la historia de evaluaciones.
Misma raíz que Newton, ahora sin derivada.
f(x) = x³ − 2x − 4 puntos iniciales: 1,0 y 3,0
iter x error
1 1,454545 5,45e-01
3 1,876254 1,24e-01
5 1,996327 3,67e-03
7 1,999999 6,32e-07
9 2,000000 0,00e+00
9 iteraciones frente a las 6 de Newton
pero sin necesitar f' y con una evaluación por paso.
Eficiencia por evaluación:
Newton: orden 2 con 2 evaluaciones → √2 ≈ 1,414
Secante: orden 1,618 con 1 evaluación → 1,618 mejorSecante: casi tan rápida como Newton sin necesitar la derivada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | raiz, iteraciones, orden_de_convergencia |
| Comprobaciones (1) | no_requiere_derivada |
compmath run 224Búsqueda de raíces sin derivada analítica, métodos cuasi-Newton, calibración de parámetros y ajuste de umbrales en funciones costosas de evaluar.
9781305253667 verificado en International ISBN Agency (2026-08-20).Subir el grado del polinomio interpolador empeora la aproximación en vez de mejorarla.
P(x) = Σ yᵢ · Πⱼ≠ᵢ (x − xⱼ)/(xᵢ − xⱼ)
n puntos determinan un único polinomio de grado ≤ n−1
nodos de Chebyshev: xₖ = cos((2k+1)π / 2n)Por n puntos con abscisas distintas pasa un único polinomio de grado a lo sumo n−1. La forma de Lagrange lo construye explícitamente como combinación de bases que valen 1 en su nodo y 0 en los demás. Es elegante para demostrar la existencia y unicidad, y mala para calcular: las formas de Newton o baricéntrica son numéricamente preferibles.
El resultado que hay que retener es negativo y contraintuitivo. Al aumentar el número de nodos equiespaciados, el polinomio no converge a la función: oscila cada vez más violentamente cerca de los extremos del intervalo. Es el fenómeno de Runge, y su ejemplo canónico es 1/(1+25x²), donde el error máximo crece con el grado.
La causa no es el redondeo sino la propia teoría: el término de error de interpolación contiene el producto de las distancias a todos los nodos, y con nodos equiespaciados ese producto se dispara cerca de los bordes. La consecuencia práctica es que interpolación de grado alto y nodos uniformes no se deben combinar nunca.
Hay dos salidas. La primera es cambiar los nodos: los de Chebyshev se concentran cerca de los extremos y controlan el producto, haciendo que el error sí decrezca con el grado. La segunda, más usada en la práctica, es renunciar al grado alto y usar trozos de grado bajo, que es exactamente lo que hacen los splines de la clase siguiente.
Runge sobre 1/(1+25x²): el error crece con el grado.
Interpolación por 3 puntos (1,1), (2,3), (4,7):
el polinomio evaluado da [1,75 ; 4,75] en x = 1,5 y 3
pasa exactamente por los nodos: 1, 3, 7 ✓
Función de Runge con nodos equiespaciados:
grado error máximo
5 0,438177
9 1,045174
13 3,656710
El error se multiplica por 8 al pasar de grado 5 a 13.
Más grado, peor aproximación.
Con nodos de Chebyshev el error sí decrece con el grado.Interpolación de Lagrange y el fenómeno de Runge.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | el_error_crece_con_el_grado |
compmath run 225Reconstrucción de curvas a partir de muestras, diseño de esquemas de cuadratura, aproximación de funciones costosas y remuestreo de señales.
9781611975949 verificado en International ISBN Agency (2026-08-19).9781305253667 verificado en International ISBN Agency (2026-08-20).Muchos trozos de grado bajo baten a un único polinomio de grado alto.
spline lineal: recta entre cada par de nodos consecutivos
spline cúbico: continuidad de valor, primera y segunda derivada
n nodos ⟹ n−1 tramosUn spline es una función definida a trozos, con un polinomio de grado bajo en cada intervalo entre nodos consecutivos, empalmados con condiciones de continuidad. La idea resuelve el problema de Runge por la vía directa: si el grado alto oscila, no se usa grado alto.
El spline lineal simplemente une los puntos con segmentos. Es continuo, no oscila nunca, y su error es O(h²) en cada tramo. Su defecto es visible: tiene esquinas en los nodos, la derivada salta, y para animación o diseño gráfico eso se nota.
El spline cúbico usa polinomios de grado 3 e impone continuidad del valor, de la primera derivada y de la segunda. El resultado es visualmente suave y matemáticamente notable: entre todas las funciones que pasan por los puntos, el spline cúbico natural es la que minimiza la curvatura total, que es la formalización de «la curva más suave posible». El nombre viene de las varillas flexibles que usaban los constructores navales.
Los splines están en todas partes: en las curvas de las herramientas de diseño gráfico, en la interpolación de datos científicos, en las trayectorias de robots y en los modelos aditivos generalizados. Su ventaja decisiva es la localidad: mover un punto solo afecta a los tramos vecinos, mientras que en un polinomio global un cambio en un extremo altera toda la curva.
Spline lineal sobre datos que oscilan entre 0 y 1.
nodos: 0 1 2 3 4
valores: 0 1 0 1 0
Evaluaciones del spline lineal:
s(0,50) = 0,50 dentro del tramo [0,1]
s(1,50) = 0,50 dentro del tramo [1,2]
s(2,25) = 0,25 dentro del tramo [2,3]
Pasa por todos los nodos ✓
Nunca sale del rango [0,1] de los datos ✓
Un polinomio único de grado 4 por estos 5 puntos
llega a valores por debajo de −0,3 entre los nodos.
Localidad: cambiar el valor en x = 4 no altera
el spline en el tramo [0,1].Spline lineal por tramos frente a un polinomio único.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | spline_en_0.5, spline_en_1.5, spline_en_2.25 |
| Comprobaciones (2) | pasa_por_todos_los_nodos, acotado_entre_min_y_max |
compmath run 226Curvas en diseño gráfico y CAD, interpolación de series temporales, trayectorias suaves en robótica y modelos aditivos generalizados.
9781461263333 verificado en International ISBN Agency (2026-08-19).9781305253667 verificado en International ISBN Agency (2026-08-20).La diferencia central cuesta lo mismo que la adelantada y tiene un orden más.
adelantada: (f(x+h) − f(x)) / h, error O(h)
central: (f(x+h) − f(x−h)) / 2h, error O(h²)
segunda derivada: (f(x+h) − 2f(x) + f(x−h)) / h²Aproximar derivadas por cocientes de diferencias es la traducción literal de la definición de derivada a aritmética finita. Las tres fórmulas básicas se obtienen combinando desarrollos de Taylor y eligiendo los coeficientes que cancelan los términos de orden bajo.
La diferencia central es estrictamente mejor que la adelantada: mismo número de evaluaciones, un orden más de precisión. La razón es la simetría, que hace que el término de orden h se cancele entre los desarrollos de f(x+h) y f(x−h). Cuando se puede evaluar a ambos lados, no hay motivo para usar la adelantada.
La segunda derivada por diferencias es la fórmula que discretiza el laplaciano y está en el corazón de casi todo esquema para ecuaciones en derivadas parciales. Su error también es O(h²), pero su sensibilidad al redondeo es peor porque divide entre h²: el paso óptimo es mayor que para la primera derivada.
La aplicación más útil en aprendizaje automático es la verificación de gradientes: comparar el gradiente calculado por autodiferenciación con el obtenido por diferencia central detecta errores de implementación en las derivadas manuales. Es lento y no sirve para entrenar, pero como prueba unitaria es insustituible.
Derivada de e^x en x = 0,5 con h = 1e-4.
valor exacto: e^0,5 = 1,6487212707001282
adelantada: (f(x+h) − f(x))/h = 1,6488037095
error = 8,24e-05
atrás: (f(x) − f(x−h))/h = 1,6486388374
error = 8,24e-05
central: (f(x+h) − f(x−h))/2h = 1,6487212735
error = 2,75e-09 30 000 veces menor
Mismo coste en evaluaciones, tres órdenes de magnitud de ganancia.
Segunda derivada: (f(x+h) − 2f(x) + f(x−h))/h² = 1,64872132
error = 5,4e-08, mayor por dividir entre h².Fórmulas de diferencias y su orden de error.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (9) | x, h, exacta, adelante, atras, central, error_adelante, error_central, segunda_derivada |
| Comprobaciones (1) | central_es_2_ordenes_mejor |
compmath run 227Verificación de gradientes, discretización de PDE, sensibilidad de modelos y optimización sin derivadas analíticas.
9781611975581, pendiente de resolver.9780387400655 verificado en International ISBN Agency (2026-08-19).Elegir bien los nodos vale más que multiplicarlos: Gauss lo demuestra con tres.
∫f ≈ Σ wᵢ·f(xᵢ)
Gauss con n nodos: exacta para polinomios de grado 2n−1
cambio de variable de [a,b] a [−1,1]Toda regla de cuadratura tiene la misma forma: una suma ponderada de valores de la función. Lo que distingue a unas de otras es dónde se colocan los nodos y qué pesos se les asigna. Las reglas de Newton-Cotes —trapecio, Simpson— fijan nodos equiespaciados y calculan los pesos.
La cuadratura gaussiana hace algo más ambicioso: trata también las posiciones de los nodos como incógnitas. Con n nodos hay 2n grados de libertad, y se eligen para que la regla sea exacta con polinomios de grado hasta 2n−1. Con tres nodos se integra exactamente cualquier polinomio de grado 5, lo cual es notable.
Los nodos resultantes son las raíces de los polinomios de Legendre y no son equiespaciados: se concentran hacia el centro y evitan los extremos. Los pesos se calculan una vez y se tabulan. El cambio de variable lleva cualquier intervalo [a,b] al [−1,1] donde están tabulados.
La comparación con el trapecio es demoledora y explica por qué las bibliotecas serias usan variantes de Gauss: con el mismo número de evaluaciones, el error es varios órdenes de magnitud menor. Su límite es que necesita evaluar en puntos concretos, así que no sirve cuando solo se dispone de datos tabulados en una malla fija.
Integral de e^(−x²) entre 0 y 1, sin primitiva elemental.
valor de referencia: 0,746824132812
Gauss con 3 nodos:
estimación = 0,746814584191
error = 9,55e-06
Trapecio con 3 subintervalos (4 evaluaciones):
estimación = 0,739986475277
error = 6,84e-03
Gauss es 716 veces más preciso con menos evaluaciones.
Para igualar a Gauss-3, el trapecio necesitaría
unos 27 subintervalos.Cuadratura gaussiana: máxima exactitud con mínimos nodos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | referencia, gauss_3_nodos, error_gauss, trapecio_3_subintervalos, error_trapecio, gauss_n_puntos_es_exacta_hasta_grado, evaluaciones_usadas |
| Comprobaciones (0) | — |
compmath run 228Integración en métodos de elementos finitos, cálculo de esperanzas en modelos probabilísticos, evaluación de funciones especiales y física computacional.
9781305253667 verificado en International ISBN Agency (2026-08-20).El trapecio es de orden 2: duplicar los subintervalos divide el error por cuatro.
∫ₐᵇ f ≈ (h/2)·[f(x₀) + 2f(x₁) + … + 2f(xₙ₋₁) + f(xₙ)]
error total O(h²)
n × 2 ⟹ error / 4La regla del trapecio aproxima la función por segmentos rectos entre nodos consecutivos y suma las áreas de los trapecios resultantes. Es la regla más simple que va más allá de los rectángulos, y su fórmula compuesta tiene la estructura característica: los extremos pesan la mitad que los puntos interiores.
Su error es O(h²), lo que da la regla práctica más útil para verificar una implementación: duplicar el número de subintervalos divide el error por cuatro. Si al duplicar n el error solo se divide por dos, hay un error de programación o la función no es suficientemente suave.
El signo del error es predecible: el trapecio sobreestima para funciones convexas y subestima para cóncavas, porque la cuerda queda por encima o por debajo de la curva. Esa previsibilidad permite corregir, y de ahí sale la extrapolación de Richardson y el método de Romberg, que combinan estimaciones con distintos h para cancelar términos de error.
Tiene además una propiedad que lo hace insustituible en un caso concreto: para funciones periódicas integradas sobre un periodo completo, el trapecio converge exponencialmente, mucho más rápido que Simpson. Es el fundamento de los métodos espectrales y de la precisión de la transformada discreta de Fourier.
Integral de 1/(1+x²) entre 0 y 1, que vale exactamente π/4.
valor exacto: 0,785398163397
n valor error razón
2 0,775000000 1,0398e-02 —
4 0,782794010 2,6042e-03 3,993
8 0,784747124 6,5104e-04 4,000
16 0,785235400 1,6276e-04 4,000
32 0,785357472 4,0690e-05 4,000
La razón se estabiliza en 4 → orden 2 confirmado ✓
El trapecio subestima aquí porque el integrando es cóncavo
en la mayor parte del intervalo.Regla del trapecio y su convergencia O(h²).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | valor_exacto_pi/4 |
| Comprobaciones (1) | duplicar_n_divide_el_error_por_4 |
compmath run 229Integración de datos experimentales muestreados, cálculo de áreas bajo curvas ROC, métodos espectrales con funciones periódicas y base del método de Romberg.
9781305253667 verificado en International ISBN Agency (2026-08-20).10.1137/130932132 verificado en Crossref (2026-08-19).Simpson usa parábolas y gana dos órdenes por el mismo precio.
∫ ≈ (h/3)·[f₀ + 4f₁ + 2f₂ + 4f₃ + … + fₙ]
error O(h⁴): n × 2 ⟹ error / 16
requiere n par; exacta hasta grado 3Simpson ajusta una parábola por cada par de subintervalos en vez de una recta por cada uno. El patrón de pesos 1, 4, 2, 4, …, 4, 1 sale de integrar exactamente esas parábolas, y exige que el número de subintervalos sea par.
Su error es O(h⁴), dos órdenes por encima del trapecio con esencialmente el mismo coste de evaluaciones. La regla de verificación correspondiente es que duplicar n divide el error por 16, y comprobarla es la forma estándar de validar la implementación.
Hay una sorpresa agradable: aunque se construye con parábolas, Simpson es exacto para polinomios de grado 3. El término cúbico se cancela por simetría, y ese grado extra gratuito es la razón de su excelente relación precisión-coste. Es el método por defecto cuando hay que integrar a mano y con pocos recursos.
El orden alto tiene una condición que se olvida: exige que la función tenga cuarta derivada acotada. Con integrandos poco suaves, con esquinas o con oscilaciones rápidas, Simpson pierde su ventaja y puede comportarse peor que el trapecio. Con funciones de suavidad dudosa conviene un método adaptativo que subdivida donde haga falta.
Misma integral que el trapecio, para comparar órdenes.
valor exacto: 0,785398163397
n valor error razón
2 0,783333333 2,0648e-03 —
4 0,785259259 1,3890e-04 14,87
8 0,785388765 9,3984e-06 14,78
16 0,785397555 6,0812e-07 15,46
La razón tiende a 16 → orden 4 confirmado ✓
Comparación con n = 16:
trapecio: error 1,63e-04
Simpson: error 6,08e-07 268 veces mejor
Verificación del grado 3: sobre x³ en [0,1]
Simpson con n = 2 da exactamente 0,25 ✓Simpson y su convergencia O(h⁴).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | valor_exacto |
| Comprobaciones (3) | requiere_n_par, duplicar_n_divide_el_error_por_16, exacta_para_polinomios_de_grado_3 |
compmath run 230Integración numérica de propósito general, cálculo de momentos de distribuciones, procesamiento de señales muestreadas y base de los métodos adaptativos.
9781305253667 verificado en International ISBN Agency (2026-08-20).Factorizar una vez y sustituir muchas: LU convierte O(n³) en O(n²) por sistema.
A = LU con pivoteo parcial: PA = LU
resolver Ly = Pb, luego Ux = y
coste: LU ≈ (2/3)n³; cada sustitución ≈ n²Un método directo resuelve el sistema en un número predeterminado de operaciones, sin iterar. La eliminación gaussiana es el prototipo, y su versión organizada como factorización LU separa el trabajo en dos fases: descomponer la matriz, que cuesta O(n³), y resolver por sustitución, que cuesta O(n²).
Esa separación es lo que hace valiosa la factorización. Si hay que resolver el mismo sistema con veinte lados derechos distintos —algo habitual en simulación, en control y en métodos implícitos para EDO— se factoriza una vez y se sustituye veinte, en vez de repetir la eliminación completa veinte veces.
El pivoteo parcial es obligatorio, no opcional. Intercambiar filas para que el pivote sea el elemento de mayor módulo evita dividir por números diminutos, y con ello evita la amplificación de errores que puede destruir la solución. Sin pivoteo, sistemas perfectamente resolubles dan resultados sin ningún dígito correcto.
Verificar la solución es barato y obligatorio: calcular el residuo Ax − b. Un residuo pequeño no garantiza que la solución sea precisa —en sistemas mal condicionados puede ser minúsculo con una solución muy alejada de la real— pero un residuo grande sí garantiza que algo va mal. Combinar residuo y número de condición da el diagnóstico completo.
Sistema 3×3 simétrico definido positivo, resuelto por LU.
A = [[ 4 −2 1] b = [ 11]
[−2 4 −2] [−16]
[ 1 −2 4]] [ 17]
L = [[ 1,00 0,00 0,00]
[−0,50 1,00 0,00]
[ 0,25 −0,50 1,00]]
intercambios de fila: 0 (ya es dominante)
solución x = [1, −2, 3]
residuo Ax − b = [0, 0, 0] ✓
Coste con n = 3: LU ≈ 18 operaciones
Cada nuevo lado derecho: ≈ 9 operaciones, sin refactorizar.Solvers directos: LU y sustitución, con conteo de operaciones.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | intercambios, determinante |
| Comprobaciones (0) | — |
compmath run 231Resolución de sistemas en simulación, mínimos cuadrados, métodos implícitos para EDO y cualquier problema con múltiples lados derechos.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781421407944 verificado en International ISBN Agency (2026-08-19).Gauss-Seidel usa los valores recién calculados y converge en la mitad de iteraciones.
Jacobi: xᵢ⁽ᵏ⁺¹⁾ = (bᵢ − Σⱼ≠ᵢ aᵢⱼ·xⱼ⁽ᵏ⁾) / aᵢᵢ
Gauss-Seidel: usa xⱼ⁽ᵏ⁺¹⁾ para j < i
convergencia garantizada si A es diagonalmente dominanteLos métodos iterativos parten de una solución aproximada y la refinan hasta que deja de cambiar. Su interés no es competir con LU en sistemas pequeños, sino resolver los que LU no puede: matrices de millones de incógnitas y muy dispersas, donde una factorización llenaría de ceros la memoria disponible.
Jacobi despeja cada incógnita de su ecuación usando exclusivamente los valores de la iteración anterior. Eso lo hace trivialmente paralelizable, porque todas las componentes se actualizan de forma independiente. Gauss-Seidel usa los valores ya actualizados dentro de la misma pasada, lo que suele reducir a la mitad el número de iteraciones a costa de volverse secuencial.
La condición suficiente clásica de convergencia es la dominancia diagonal: que cada elemento de la diagonal supere en módulo a la suma de los demás de su fila. Es suficiente, no necesaria, y hay sistemas no dominantes donde ambos métodos convergen igualmente. Sin alguna condición de este tipo, la iteración puede divergir.
Estos dos métodos son el punto de entrada a una familia mucho mayor —SOR, gradiente conjugado, GMRES, multigrid— que es la que realmente se usa en producción. Conviene entenderlos porque la estructura es la misma: una iteración barata, un criterio de parada y un análisis de convergencia.
Sistema 3×3 diagonalmente dominante, ambos métodos.
A = [[10 −1 2] diagonalmente dominante:
[−1 11 −1] 10 > 3, 11 > 2, 10 > 3 ✓
[ 2 −1 10]]
solución: [1,04327 ; 2,26923 ; −1,08173]
Jacobi: 22 iteraciones hasta tolerancia 1e-10
Gauss-Seidel: 11 iteraciones hasta la misma tolerancia
Gauss-Seidel converge en la mitad de pasos.
Contrapartida: Jacobi actualiza las tres componentes
en paralelo; Gauss-Seidel debe hacerlo en orden.Métodos iterativos sobre una matriz diagonalmente dominante.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | jacobi_iteraciones, gauss_seidel_iteraciones |
| Comprobaciones (3) | diagonalmente_dominante, gauss_seidel_es_mas_rapido, jacobi_es_paralelizable |
compmath run 232Resolución de sistemas dispersos enormes, discretización de PDE, PageRank y precondicionado dentro de métodos de Krylov.
9780898718003, pendiente de resolver.9781611975581, pendiente de resolver.Todo bucle iterativo necesita tres frenos: tolerancia relativa, residuo y tope de pasos.
criterio absoluto: ‖xₖ₊₁ − xₖ‖ < tol
criterio relativo: ‖xₖ₊₁ − xₖ‖ / ‖xₖ₊₁‖ < tol
criterio de residuo: ‖Axₖ − b‖ / ‖b‖ < tolEl criterio de parada no es un detalle de implementación: determina qué significa el resultado. Un método iterativo sin criterio declarado devuelve un número cuyo error nadie conoce, y eso lo invalida como resultado científico.
El criterio absoluto falla al cambiar de escala. Una tolerancia de 10⁻⁶ es exigente si la solución vale 1 y absurda si vale 10¹², donde ni siquiera es representable en doble precisión. El criterio relativo escala con la magnitud de la solución y es el que hay que usar por defecto, con la precaución de manejar el caso de solución próxima a cero.
El criterio de residuo mide algo distinto: cuánto incumple la ecuación la solución actual. Es complementario, no equivalente. En un sistema mal condicionado el cambio entre iterados puede ser minúsculo mientras el residuo sigue siendo grande, y al revés. Por eso lo prudente es combinar ambos.
Y siempre, sin excepción, un tope de iteraciones. No es una tolerancia sino una salvaguarda: si el método no converge —porque el problema es singular, porque la condición falla o porque hay un error de programación— el bucle debe terminar e informar de que no convergió, en vez de girar indefinidamente. Un solver que devuelve «no convergí» es infinitamente más útil que uno que se cuelga.
Evolución de los tres criterios en una iteración convergente.
iter cambio abs. cambio rel. norma residuo
1 0,990000 1,000000 1,40e+00
3 0,090000 0,090909 1,27e-01
5 0,009000 0,009009 1,27e-02
7 0,000900 0,000900 1,27e-03
9 1,00e-14 1,00e-14 1,41e-14
solución = [1, 1] 9 iteraciones hasta 1e-14
Criterio recomendado:
parar si (cambio relativo < tol) Y (residuo relativo < tol)
o si iter alcanza max_iter, informando de no convergencia.
Peligro del criterio solo absoluto: si la solución fuera
del orden de 1e12, tol = 1e-6 nunca se alcanzaría.Criterio de parada: absoluto, relativo y residuo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | iteraciones_hasta_1e-14 |
| Comprobaciones (1) | siempre_declarar_max_iter |
compmath run 233Cualquier solver iterativo, criterios de parada en entrenamiento de modelos, bucles de punto fijo y control de convergencia en simulación.
9780898718027, pendiente de resolver.Las ecuaciones normales elevan al cuadrado el número de condición; QR no.
ecuaciones normales: AᵀAx = Aᵀb
cond(AᵀA) = cond(A)²
vía QR: A = QR ⟹ Rx = QᵀbEl problema de mínimos cuadrados busca el x que minimiza ‖Ax − b‖ cuando el sistema tiene más ecuaciones que incógnitas. Geométricamente es la proyección de b sobre el espacio columna de A, y anular la derivada conduce a las ecuaciones normales AᵀAx = Aᵀb.
Esas ecuaciones son correctas en teoría y peligrosas en práctica. Formar AᵀA eleva al cuadrado el número de condición: una matriz con condición 10⁶, que en doble precisión es manejable, produce una AᵀA con condición 10¹², que se lleva por delante la mitad de los dígitos disponibles. El daño se hace al construir la matriz, antes de resolver nada.
La vía QR evita el problema. Descomponiendo A = QR con Q ortogonal, el sistema se reduce a Rx = Qᵀb, triangular y con la condición original de A sin elevar. Cuesta aproximadamente el doble de operaciones, y ese factor 2 es un precio muy pequeño por conservar la mitad de los dígitos.
Cuando A es además deficiente de rango o casi singular, ni siquiera QR basta y hay que recurrir a la SVD con truncamiento de valores singulares pequeños, que es la pseudoinversa de la parte 06. La regla práctica: ecuaciones normales solo para problemas pequeños y bien condicionados; QR por defecto; SVD cuando hay dudas sobre el rango.
Ajuste lineal por dos vías sobre los mismos seis puntos.
6 observaciones, modelo de 2 parámetros
ecuaciones normales: [1,03809524 ; 0,99142857]
vía QR: [1,03809524 ; 0,99142857]
coinciden a 8 dígitos ✓
cond(AᵀA) = 33,41 cond(A) = 5,78
relación: 5,78² = 33,41 ✓
Aquí el problema está bien condicionado y ambas sirven.
Si cond(A) fuera 1e6:
cond(AᵀA) = 1e12 → se pierden 12 de los 16 dígitos
QR mantendría la pérdida en 6.Mínimos cuadrados: ecuaciones normales frente a QR.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | datos, condicion_de_AᵀA, SSE |
| Comprobaciones (2) | coinciden, las_normales_elevan_al_cuadrado_la_condicion |
compmath run 234Regresión lineal, ajuste de curvas, calibración de sensores y capas lineales resueltas en forma cerrada.
9780898719574 verificado en International ISBN Agency (2026-08-19).9781421407944 verificado en International ISBN Agency (2026-08-19).Un problema de valor inicial fija una única trayectoria, y conocerla permite medir el error.
y' = f(t, y), y(t₀) = y₀
ejemplo: y' = −2y + t, y(0) = 1
solución: y(t) = 0,25(2t − 1) + 1,25·e^(−2t)Una ecuación diferencial ordinaria relaciona una función desconocida con sus derivadas. El problema de valor inicial añade el valor en un punto, y bajo condiciones suaves de f eso determina una única trayectoria: el teorema de Picard-Lindelöf garantiza existencia y unicidad local.
Las EDO son el lenguaje de casi toda la modelización dinámica: mecánica, circuitos, cinética química, poblaciones, epidemias y control. Que la mayoría no tenga solución analítica es lo que motiva las clases siguientes, y es la norma más que la excepción.
Para desarrollar y validar métodos numéricos conviene partir de un problema con solución conocida. El ejemplo de esta parte, y' = −2y + t, es lineal de primer orden y se resuelve con factor integrante. Tener la solución exacta permite medir el error real de cada método y verificar empíricamente su orden.
La estructura de la ecuación anticipa un problema que aparecerá luego. El coeficiente −2 del término lineal determina la escala de tiempo del decaimiento, y con ella el paso máximo que un método explícito puede dar sin volverse inestable. Cuando en un sistema conviven coeficientes muy dispares —−2 y −2000— aparece la rigidez, y los métodos explícitos dejan de ser viables.
El problema de referencia de esta parte.
EDO: y' = −2y + t y(0) = 1
Solución analítica por factor integrante:
y(t) = 0,25·(2t − 1) + 1,25·e^(−2t)
Comprobación en t = 0:
0,25·(−1) + 1,25·1 = −0,25 + 1,25 = 1,0 ✓
Valores de referencia:
y(0) = 1,000000000000
y(0,5) = 0,459849979076
y(1) = 0,419169104046
Pendiente inicial: f(0, 1) = −2·1 + 0 = −2,0
Toda la parte mide los métodos contra y(1) = 0,419169104046.EDO con solución analítica para medir el error de cada método.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | y(0), y(1)_exacta, condicion_inicial, f(0,1) |
| Comprobaciones (2) | es_lineal_de_primer_orden, estable |
compmath run 235Modelos dinámicos en física e ingeniería, farmacocinética, modelos epidemiológicos, sistemas de control y Neural ODE.
9781305253667 verificado en International ISBN Agency (2026-08-20).9783540788621 verificado en International ISBN Agency (2026-08-19).Euler es el método más barato por paso y el más caro por dígito de precisión.
yₙ₊₁ = yₙ + h·f(tₙ, yₙ)
error global O(h): duplicar pasos divide el error por 2
estabilidad para y' = λy: h < 2/|λ|El método de Euler avanza siguiendo la tangente: evalúa la pendiente en el punto actual y da un paso recto en esa dirección. Es la traducción directa de la definición de derivada, y su valor es pedagógico: todo método más sofisticado se entiende como una mejora sobre esta idea.
Su error local por paso es O(h²), pero al acumularse sobre 1/h pasos el error global resulta O(h). Eso significa que duplicar el trabajo solo divide el error por dos, una relación pésima. Para diez veces más precisión hacen falta diez veces más pasos, y para precisión de ingeniería el coste se vuelve prohibitivo.
La estabilidad es un problema distinto y suele confundirse con la precisión. Para y' = λy con λ negativo, la solución decae, pero Euler solo reproduce ese decaimiento si h < 2/|λ|. Con un paso mayor, la solución numérica oscila y crece sin límite aunque la real tienda a cero. No es imprecisión: es divergencia.
Existe la variante implícita, yₙ₊₁ = yₙ + h·f(tₙ₊₁, yₙ₊₁), que exige resolver una ecuación en cada paso pero es incondicionalmente estable. Ese intercambio —más trabajo por paso a cambio de pasos mucho mayores— es exactamente la razón de ser de los métodos implícitos en problemas rígidos.
Euler sobre el problema de referencia, hacia y(1) = 0,419169.
pasos h y(1) error razón
5 0,200 0,347200 7,197e-02 —
10 0,100 0,384218 3,495e-02 2,06
20 0,050 0,401953 1,722e-02 2,03
40 0,025 0,410620 8,549e-03 2,01
80 0,0125 0,414909 4,260e-03 2,01
La razón se estabiliza en 2 → orden 1 confirmado ✓
Con 80 pasos el error sigue siendo 4,3e-03.
RK4 con 5 pasos alcanza 1,0e-04: 40 veces mejor
con 16 veces menos trabajo.
Estabilidad: para λ = −2 se exige h < 1,0.
Con h = 1,1 la solución numérica oscila y diverge.Euler explícito: orden 1 y coste mínimo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | orden |
| Comprobaciones (1) | duplicar_pasos_divide_el_error_por_2 |
compmath run 236Prototipado rápido de simulaciones, comprensión conceptual de integradores, esquemas de difusión discretizados y base del descenso por gradiente visto como flujo.
9781305253667 verificado en International ISBN Agency (2026-08-20).9783642052217 verificado en International ISBN Agency (2026-08-19).RK4 cuesta cuatro evaluaciones por paso y las devuelve multiplicadas.
k₁ = f(tₙ, yₙ); k₂ = f(tₙ+h/2, yₙ+h·k₁/2)
k₃ = f(tₙ+h/2, yₙ+h·k₂/2); k₄ = f(tₙ+h, yₙ+h·k₃)
yₙ₊₁ = yₙ + (h/6)(k₁ + 2k₂ + 2k₃ + k₄)Runge-Kutta de cuarto orden promedia cuatro estimaciones de la pendiente dentro del intervalo: una al inicio, dos en el punto medio y una al final, con pesos 1, 2, 2, 1. Ese promedio ponderado cancela los términos de error hasta orden 4 del desarrollo de Taylor.
El resultado es una relación coste-beneficio excelente. Cuatro evaluaciones por paso, pero error O(h⁴): duplicar los pasos divide el error por 16. La comparación con Euler es contundente y merece verse en números: RK4 con 5 pasos —20 evaluaciones— supera a Euler con 80 pasos —80 evaluaciones— por un factor de 40 en precisión.
RK4 es el estándar de facto para problemas no rígidos, y su variante adaptativa —Dormand-Prince, el RK45 de las bibliotecas— añade una estimación del error por paso que permite ajustar h automáticamente: pasos grandes donde la solución es suave y pequeños donde cambia rápido. Es lo que se usa en producción.
Su límite es el mismo que el de Euler, solo que desplazado: sigue siendo explícito y su región de estabilidad, aunque mayor, es finita. Con problemas rígidos —donde conviven escalas de tiempo que difieren en órdenes de magnitud— el paso queda limitado por la escala más rápida aunque la solución de interés sea lenta, y hay que pasar a métodos implícitos como BDF.
RK4 sobre el mismo problema de referencia.
pasos y(1) error razón
5 0,419270018 1,0091e-04 —
10 0,419175447 6,3430e-06 15,91
20 0,419169501 3,9700e-07 15,98
40 0,419169129 2,4820e-08 16,00
La razón tiende a 16 → orden 4 confirmado ✓
Comparación por evaluaciones de f:
Euler, 80 pasos = 80 evaluaciones → error 4,26e-03
RK4, 5 pasos = 20 evaluaciones → error 1,01e-04
RK4 gana por 42 veces con la cuarta parte del trabajo.RK4: cuatro evaluaciones por paso, error O(h⁴).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | orden |
| Comprobaciones (1) | duplicar_pasos_divide_el_error_por_16 |
compmath run 237Simulación de sistemas dinámicos, mecánica orbital, Neural ODE, samplers de modelos de difusión y motores físicos.
9783540788621 verificado en International ISBN Agency (2026-08-19).La condición de estabilidad no es una recomendación: violarla hace explotar la simulación.
ecuación del calor: u_t = u_xx
esquema explícito: u_i^(n+1) = u_i^n + α(u_{i+1}^n − 2u_i^n + u_{i−1}^n)
α = Δt/Δx² ≤ 0,5 para estabilidadUna ecuación en derivadas parciales involucra derivadas respecto de varias variables, y describe fenómenos distribuidos en espacio y tiempo: calor, ondas, fluidos, difusión. El método de diferencias finitas las discretiza sustituyendo cada derivada por un cociente de diferencias sobre una malla.
Para la ecuación del calor en una dimensión, la derivada temporal se aproxima con diferencia adelantada y la espacial de segundo orden con la fórmula central de la clase 227. El resultado es un esquema explícito donde cada valor nuevo se calcula directamente a partir de tres valores viejos, sin resolver ningún sistema.
La sorpresa está en la restricción. El parámetro α = Δt/Δx² debe cumplir α ≤ 0,5, y esa condición de tipo Courant tiene una consecuencia brutal: refinar la malla espacial a la mitad obliga a dividir el paso temporal por cuatro. El coste total se multiplica por ocho, y por eso las simulaciones explícitas de difusión se vuelven caras muy deprisa.
Violar la condición no produce imprecisión sino divergencia: la solución numérica oscila con amplitud creciente hasta desbordar, y lo hace en pocos pasos. Los esquemas implícitos como Crank-Nicolson son incondicionalmente estables y permiten pasos temporales mucho mayores a cambio de resolver un sistema tridiagonal en cada paso, que es barato.
Calor en una barra con extremos fríos, esquema explícito.
u_t = u_xx u(0,t) = u(1,t) = 0
nodos = 21 Δx = 0,05 Δt = 0,001
α = Δt / Δx² = 0,001 / 0,0025 = 0,4
α = 0,4 ≤ 0,5 → esquema estable ✓
La solución decae suavemente hacia cero, como debe.
Si se subiera a Δt = 0,002:
α = 0,8 > 0,5 → oscilaciones que crecen
en 20 pasos los valores desbordan.
Coste de refinar: Δx a la mitad (41 nodos)
exige Δt / 4 → 4× más pasos × 2× más nodos = 8× coste.Discretización de la ecuación del calor en 1D (esquema explícito).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | nodos, dx, dt, numero_de_courant_alpha, pico_inicial, pico_final_numerico, pico_final_analitico, error_maximo |
| Comprobaciones (1) | estable_si_alpha<=0.5 |
compmath run 238Simulación térmica, dinámica de fluidos, propagación de ondas, modelos financieros de tipo Black-Scholes y difusión en visión por computador.
9780898717839 verificado en International ISBN Agency (2026-08-19).10.1007/bf01448839 verificado en Crossref (2026-08-19).Se implementa a mano para saber cuándo la biblioteca falla, y se usa la biblioteca para producción.
bisección → scipy.optimize.brentq
RK4 → scipy.integrate.solve_ivp
cuadratura → scipy.integrate.quadSciPy implementa versiones de todos los métodos de esta parte, y con mejor calidad de la que se puede alcanzar en un curso: control adaptativo del paso, detección de rigidez, selección automática de algoritmo, estimación de error y décadas de código Fortran probado debajo.
La pregunta legítima es entonces por qué implementarlos a mano. La respuesta es que usar un método sin entenderlo impide saber cuándo falla. solve_ivp con opciones por defecto puede devolver resultados sin sentido en un problema rígido, y solo quien sabe qué es la rigidez interpretará el aviso y cambiará a method='BDF'. La biblioteca no protege de la ignorancia del usuario.
Hay además una razón de diagnóstico. Cuando un cálculo produce números extraños, saber distinguir entre un error de modelado, un problema mal condicionado, una tolerancia mal puesta y un fallo real de la biblioteca exige entender el algoritmo. Sin ese conocimiento, el único recurso es probar opciones al azar.
La regla práctica es clara: implementar para aprender, usar la biblioteca para producir. Reescribir un integrador en código de producción es reintroducir errores que SciPy resolvió hace veinte años. El motor de esta parte no depende de SciPy precisamente para que las implementaciones didácticas sean legibles y ejecutables en cualquier entorno.
Correspondencia entre lo implementado y su equivalente en SciPy.
SciPy 1.17.1 disponible en este entorno
implementación propia equivalente en SciPy
---------------------------------------------------------
bisection scipy.optimize.brentq
newton_raphson scipy.optimize.newton
lagrange_interpolation scipy.interpolate.lagrange
splines scipy.interpolate.CubicSpline
trapezoid_rule scipy.integrate.trapezoid
simpson_rule scipy.integrate.simpson
quadrature scipy.integrate.quad
direct_linear_solvers scipy.linalg.lu_solve
jacobi_gauss_seidel scipy.sparse.linalg.cg
numerical_least_squares scipy.linalg.lstsq
euler_method / runge_kutta scipy.integrate.solve_ivp
Este motor no requiere SciPy: todas las implementaciones
son de biblioteca estándar y ejecutables sin dependencias.Qué aporta SciPy sobre una implementación propia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | scipy_instalado, este_motor_no_requiere_scipy |
compmath run 239Elección de herramientas en proyectos científicos, depuración de cálculos numéricos, validación cruzada entre implementaciones y decisiones de rendimiento.
10.1038/s41592-019-0686-2 verificado en Crossref (2026-08-19).Un solver serio reporta su método, su tolerancia, su coste y su error estimado.
comparar métodos por evaluaciones de f, no por número de pasos
orden empírico: log₂(errorₕ / error_{h/2})
reportar: método, tolerancia, iteraciones, residuoEl capstone integra la parte entera resolviendo dos problemas —una EDO y una raíz— con varios métodos, y produciendo un informe comparativo. El objetivo no es encontrar el resultado sino justificarlo: qué método, con qué tolerancia, a qué coste y con qué error estimado.
La métrica de comparación correcta es el número de evaluaciones de la función, no el número de pasos. RK4 da un paso por cada cuatro evaluaciones, y comparar «5 pasos de RK4» con «5 pasos de Euler» es comparar cuatro unidades de trabajo con una. Con la métrica correcta, RK4 sigue ganando por un margen enorme, y esa es la conclusión defendible.
El orden empírico se mide ejecutando con h y h/2 y tomando el logaritmo en base 2 del cociente de errores. Si sale 1 para Euler y 4 para RK4, la implementación es correcta; si sale otra cosa, hay un error o el problema no cumple las hipótesis de suavidad. Es la prueba unitaria natural de un integrador.
El informe final debe declarar lo mismo que declararía un artículo: método usado, tolerancia, número de iteraciones o pasos, residuo o error estimado, y las limitaciones conocidas. Un solver que devuelve un número desnudo obliga al lector a confiar; uno que devuelve el número con su diagnóstico permite verificar. Esa es toda la diferencia.
Informe comparativo de los dos problemas del capstone.
Problema 1: y' = −2y + t, y(0) = 1, objetivo y(1)
exacto: 0,419169104046
método pasos evaluaciones y(1) error
euler 10 10 0,384218 3,49e-02
euler 40 40 0,410620 8,55e-03
rk4 5 20 0,419270 1,01e-04
rk4 10 40 0,419175 6,34e-06
Con 40 evaluaciones:
euler → 8,55e-03 rk4 → 6,34e-06
rk4 es 1 349 veces más preciso al mismo coste.
Problema 2: raíz de x³ − 2x − 4
bisección: raíz 1,999999999999 41 iteraciones
newton: raíz 2,000000000000 6 iteraciones
Recomendación: rk4 para la EDO, newton con respaldo
de bisección para la raíz, tolerancia relativa 1e-10
y tope de 100 iteraciones.Capstone: solver con informe de error y criterio de parada declarado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | tolerancia_declarada, max_iteraciones_declarado |
| Comprobaciones (0) | — |
compmath run 240Informes de simulación, selección de solvers en proyectos científicos, benchmarking de integradores y documentación de resultados numéricos.
9781611975581, pendiente de resolver.Función objetivo, convexidad, descenso de gradiente y su familia completa de optimizadores, métodos de segundo orden, restricciones, KKT y optimización evolutiva.
Entrenar un modelo es resolver un problema de optimización. No es una analogía: es literalmente lo que ocurre. Se define una función objetivo que mide el error, se calcula su gradiente y se desciende. Todo lo demás —arquitecturas, regularización, planificación del learning rate— son decisiones sobre ese problema. Esta parte trata la optimización como lo que es: el motor de la inteligencia artificial moderna.
Las clases 241 a 243 fijan el vocabulario y el concepto que decide la dificultad del problema. En un problema convexo todo mínimo local es global, y eso convierte la optimización en una tarea con garantías. Fuera de la convexidad no hay ninguna: las redes neuronales son masivamente no convexas y aun así se entrenan bien, un hecho que la teoría todavía no explica del todo. Lo que sí se puede afirmar es que cualquier dirección con dᵀ∇f < 0 hace descender la función, y que el gradiente negativo es la más empinada localmente, pero no siempre la mejor globalmente.
Las clases 244 a 251 recorren la familia completa de optimizadores de primer orden, en el orden histórico en que se resolvieron sus problemas. Descenso de gradiente y su tensión con el learning rate: demasiado pequeño no avanza, demasiado grande diverge, y el umbral es 2/L con L el mayor autovalor del Hessiano. SGD cambia exactitud por coste. Momentum amortigua la oscilación en valles estrechos. Nesterov mira adelante antes de decidir. AdaGrad adapta el paso por coordenada, pero su acumulador solo crece y el aprendizaje acaba apagándose; RMSProp lo arregla con olvido exponencial; Adam combina ambos momentos con corrección de sesgo; y AdamW corrige un error sutil de Adam que tardó años en detectarse: el weight decay debe aplicarse desacoplado del gradiente adaptativo, no sumado a él.
Las clases 252 a 254 suben a segundo orden. Newton usa la curvatura y converge en un solo paso en problemas cuadráticos, pero invertir el Hessiano cuesta O(n³) y es impensable con millones de parámetros. BFGS aproxima el Hessiano inverso usando solo gradientes, y la búsqueda de línea con la condición de Armijo elimina la necesidad de fijar el paso a mano.
Las clases 255 a 258 tratan las restricciones. Regularizar es cambiar el objetivo, no añadir un truco: sumar λ‖w‖² es tan parte del problema como el término de error. Los multiplicadores de Lagrange manejan igualdades, las condiciones KKT los generalizan a desigualdades, y la holgura complementaria formaliza la intuición de que una restricción inactiva no influye en la solución.
El cierre incorpora lo que no usa gradiente —optimización evolutiva sobre funciones multimodales— y un banco comparativo con presupuesto idéntico. Ese capstone deja una lección incómoda y verdadera: el mismo learning rate que funciona en una cuadrática hace divergir en Rosenbrock, y comparar optimizadores sin fijar semilla, punto inicial y presupuesto de iteraciones no compara nada.
AdamW es el optimizador por defecto del entrenamiento moderno; entender su actualización explica el weight decay, el warmup y el gradient clipping.
| Término | Definición | Clase |
|---|---|---|
| AdaGrad | Paso adaptativo por coordenada usando la suma acumulada de gradientes al cuadrado. | 248 |
| Adam | Momentum de primer y segundo orden con corrección de sesgo inicial. | 250 |
| AdamW | Adam con weight decay desacoplado, aplicado al peso y no al gradiente. | 251 |
| Algoritmo evolutivo | Búsqueda por población con selección, cruce y mutación. No necesita gradiente. | 259 |
| BFGS | Cuasi-Newton que aproxima el Hessiano inverso solo con gradientes sucesivos. | 253 |
| Búsqueda por retroceso | Probar α, reducirlo a la mitad y repetir hasta cumplir Armijo. | 254 |
| Condiciones KKT | Estacionariedad, factibilidad, no negatividad y holgura complementaria. | 257 |
| Condición de Armijo | Exige que el paso reduzca la función al menos una fracción de lo que predice el gradiente. | 254 |
| Convexidad y óptimos | En un problema convexo todo mínimo local es global. Fuera de él no hay garantía. | 242 |
| Corrección de sesgo | División por 1 − βᵗ que compensa que los acumuladores empiezan en cero. | 250 |
| Dirección de descenso | Cualquier d con dᵀ∇f < 0. El gradiente negativo es la más empinada localmente. | 243 |
| Elitismo | Conservar los mejores individuos entre generaciones para no perder el óptimo hallado. | 259 |
| Función convexa | La que queda por debajo de cualquier cuerda entre dos de sus puntos. | 242 |
| Función objetivo | Cantidad que se minimiza o maximiza. Define qué significa mejor en el problema. | 241 |
| Hessiano definido positivo | Criterio de convexidad estricta: todos los autovalores positivos. | 242 |
| Holgura complementaria | μᵢ·gᵢ(x) = 0. Una restricción inactiva tiene multiplicador cero. | 257 |
| L-BFGS | Variante de memoria limitada que guarda solo los últimos pares de vectores. | 253 |
| Lagrangiano | L = f − Σλᵢgᵢ. Convierte un problema con restricciones de igualdad en uno irrestricto. | 256 |
| Learning rate | Tamaño del paso. El hiperparámetro que más veces explica una divergencia. | 244 |
| Límite de estabilidad | lr < 2/L con L el mayor autovalor del Hessiano. Por encima, el descenso diverge. | 244 |
| Mini-batch | Lote de muestras para estimar el gradiente. Compromiso entre ruido y coste. | 245 |
| Momentum | Media móvil de los gradientes. Acelera en direcciones consistentes y amortigua la oscilación. | 246 |
| Multiplicador de Lagrange | λ. Mide cuánto mejoraría el óptimo al relajar la restricción una unidad. | 256 |
| Método de Newton | Usa el Hessiano para elegir dirección y paso. Converge en un paso en cuadráticas. | 252 |
| Nesterov | Momentum que evalúa el gradiente en el punto adelantado x + βv. | 247 |
| Presupuesto de iteraciones | Número fijo de pasos concedido a cada método para que la comparación sea justa. | 260 |
| Problema irrestricto | Aquel sin restricciones sobre las variables. El caso de casi todo entrenamiento de redes. | 241 |
| Programa cuadrático | Objetivo cuadrático con restricciones lineales. Convexo si Q es definida positiva. | 258 |
| Regularización L1 | Sumar λ‖w‖₁. Produce soluciones dispersas anulando coeficientes. | 255 |
| Regularización L2 | Sumar λ‖w‖² al objetivo. Encoge todos los pesos sin anular ninguno. | 255 |
| RMSProp | AdaGrad con media móvil exponencial en vez de suma. Evita que el paso se apague. | 249 |
| SGD | Gradiente estimado sobre un subconjunto de datos. Más barato y más ruidoso. | 245 |
| Variables de decisión | Parámetros libres sobre los que se optimiza. | 241 |
Un problema de optimización se define por variables, objetivo, sentido y restricciones.
min f(x) sujeto a gᵢ(x) ≤ 0, hⱼ(x) = 0
maximizar f ⟺ minimizar −f
óptimo local: f(x*) ≤ f(x) en un entornoTodo problema de optimización tiene cuatro componentes que conviene nombrar antes de tocar nada: las variables de decisión sobre las que se puede actuar, la función objetivo que se quiere mejorar, el sentido —minimizar o maximizar— y las restricciones que delimitan qué soluciones son admisibles.
Maximizar y minimizar son el mismo problema: maximizar f es minimizar −f. Por convenio la literatura se escribe siempre en forma de minimización, y por eso en aprendizaje automático se habla de minimizar la pérdida en vez de maximizar la verosimilitud, aunque sean lo mismo con signo cambiado.
Un problema sin restricciones se llama irrestricto, y es el caso de casi todo el entrenamiento de redes neuronales: los pesos pueden tomar cualquier valor real. Cuando hay restricciones el problema se complica sustancialmente, y las clases 256 a 258 desarrollan la maquinaria correspondiente.
La distinción entre óptimo local y global es la que decide la dificultad. Un óptimo local es mejor que todos sus vecinos; uno global es mejor que todos los puntos. Sin convexidad, ningún algoritmo basado en información local puede distinguir uno del otro, y esa es la razón de que la clase siguiente sea la más importante de la parte.
Anatomía de un problema irrestricto de dos variables.
variables de decisión: x, y
función objetivo: f(x,y) = x² + 20y²
sentido: minimizar
restricciones: ninguna
punto inicial X₀ = (−2, 3)
f(X₀) = 4 + 180 = 184,0
∇f(X₀) = (2x, 40y) = (−4, 120)
El gradiente es 30 veces mayor en y que en x:
la función es muchísimo más sensible en esa dirección.
Óptimo: (0, 0) con f = 0.
Al ser convexo, ese mínimo local es también global.Anatomía de un problema de optimización.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | f(X0), valor_minimo |
| Comprobaciones (0) | — |
compmath run 241Formulación de problemas de entrenamiento, diseño de ingeniería, asignación de recursos y planificación logística.
9780511804441 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).La convexidad es la frontera entre optimizar con garantías y optimizar con esperanza.
f(λa + (1−λ)b) ≤ λf(a) + (1−λ)f(b)
convexa ⟺ Hessiano semidefinido positivo
convexa ⟹ todo mínimo local es globalUna función es convexa si el segmento que une dos puntos cualesquiera de su gráfica queda por encima de la curva. Esa definición geométrica se traduce en la desigualdad de la cuerda, y en el caso diferenciable equivale a que el Hessiano sea semidefinido positivo: curvatura no negativa en todas las direcciones.
La consecuencia es la que justifica toda la atención al concepto: en un problema convexo todo mínimo local es global. Un algoritmo que solo mira información local —que es lo único que hace el descenso de gradiente— tiene garantía de encontrar la solución óptima. Sin convexidad esa garantía desaparece por completo.
Hay una jerarquía útil de problemas por dificultad, y no es lineal-versus-no-lineal como suele creerse, sino convexo-versus-no-convexo. Un problema convexo de un millón de variables es tratable; uno no convexo de veinte puede ser imposible de resolver con garantías. Programación lineal, mínimos cuadrados, regresión logística y SVM son convexos, y por eso se resuelven de forma fiable.
Las redes neuronales no son convexas, y masivamente. Sin embargo se entrenan bien, y la explicación que va emergiendo es que en dimensión muy alta los mínimos locales malos son raros: lo abundante son puntos de silla, de los que el ruido de SGD escapa con facilidad. No es un teorema cerrado, y conviene decirlo así.
Test de la cuerda y criterio del Hessiano.
f(x) = x² con a = 0,5, b = 2,0, λ = 0,7
f(λa + (1−λ)b) = f(0,95) = 0,9025
λf(a) + (1−λ)f(b) = 2,9500
0,9025 ≤ 2,9500 → convexa ✓
f(x,y) = x² + 20y²
Hessiano = [[2, 0],
[0, 40]]
autovalores: 40 y 2, ambos positivos
→ definido positivo → estrictamente convexa ✓
Consecuencia: el mínimo (0,0) es global.
Cualquier método de descenso lo encontrará.Convexidad: la propiedad que convierte un mínimo local en global.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | definido_positivo |
compmath run 242Diseño de funciones de pérdida, elección de algoritmos con garantías, SVM y regresión regularizada, y análisis de por qué el entrenamiento profundo es difícil.
9780511804441 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1406.2572 verificado en DataCite (2026-08-19).El gradiente negativo es la dirección más empinada, pero no la única que sirve.
d es de descenso ⟺ dᵀ∇f < 0
la más empinada: d = −∇f
Newton: d = −H⁻¹∇f (también de descenso si H es definida positiva)El criterio para que una dirección sirva es sencillo: su producto escalar con el gradiente debe ser negativo. Eso significa que forma un ángulo mayor de 90 grados con el gradiente, y que moverse un poco en esa dirección reduce la función. Hay infinitas direcciones que lo cumplen, no solo una.
El gradiente negativo es la de máximo descenso local, en el sentido de que maximiza la reducción por unidad de longitud del paso. Pero «localmente óptima» no significa «globalmente eficiente»: en un valle alargado el gradiente apunta hacia las paredes en vez de a lo largo del valle, y el descenso zigzaguea desperdiciando la mayor parte del movimiento.
Ese defecto es exactamente lo que corrigen los métodos posteriores. Momentum promedia gradientes sucesivos y el zigzag se cancela. Newton usa la curvatura para reescalar cada dirección y apunta directamente al mínimo de la aproximación cuadrática. Los métodos adaptativos escalan por coordenada. Todos siguen siendo direcciones de descenso, solo que mejor elegidas.
Conviene retener que cualquier dirección con producto escalar negativo funciona, incluso una aleatoria. Los métodos de optimización sin gradiente explotan esa libertad probando direcciones al azar y quedándose con las que reducen el objetivo. Son lentos pero aplicables donde no hay derivada, y la clase 259 los desarrolla.
Cuatro direcciones evaluadas desde el mismo punto.
f(x,y) = x² + 20y² punto (−2, 3) f = 184,0
∇f = (−4, 120)
dirección dᵀ∇f ¿descenso? f tras un paso
−gradiente −14 416 sí 183,8800
aleatoria válida −116 sí 183,9180
eje x + 4 no 184,0040
+gradiente +14 416 no 184,1201
La más empinada es −∇f, pero la aleatoria también sirve.
Nota: el gradiente vale 120 en y y −4 en x. El descenso
corregirá sobre todo y, y avanzará muy poco en x: ese
desequilibrio es el que produce el zigzag.Cualquier dirección con dᵀ∇f < 0 hace descender la función.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | f_inicial |
| Comprobaciones (0) | — |
compmath run 243Diseño de optimizadores, métodos de región de confianza, optimización sin derivadas y análisis de convergencia.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780511804441 verificado en International ISBN Agency (2026-08-19).El learning rate tiene un umbral duro: por encima de 2/L el descenso diverge.
xₖ₊₁ = xₖ − lr·∇f(xₖ)
estabilidad: lr < 2/L, L = mayor autovalor del Hessiano
velocidad limitada por el número de condición L/μEl descenso de gradiente repite un paso elemental: calcular el gradiente y moverse en dirección contraria una cantidad proporcional al learning rate. Es el algoritmo más simple de la optimización continua y la base de todo el entrenamiento moderno.
Su comportamiento está enteramente gobernado por el learning rate, y el umbral no es difuso. Para una función cuadrática con mayor autovalor L, el descenso converge si y solo si lr < 2/L. Por debajo converge, por encima diverge con oscilaciones que crecen geométricamente. No hay zona gris: es una frontera exacta.
Dentro de la zona estable hay un segundo compromiso. Un lr demasiado pequeño converge con seguridad pero necesita un número de iteraciones prohibitivo; uno cercano al umbral es rápido pero frágil. Y la velocidad máxima alcanzable está limitada por el número de condición L/μ: cuanto más alargado sea el valle, más lento el descenso, por bien elegido que esté el paso.
En la práctica del aprendizaje profundo, L no se conoce y además cambia durante el entrenamiento. De ahí las técnicas habituales: warmup para no divergir al principio, planificadores que reducen el lr progresivamente, y gradient clipping como salvaguarda ante gradientes anómalos. Todas son maneras de mantenerse del lado bueno de un umbral que no se puede calcular.
Doscientas iteraciones sobre x² + 20y² desde (−2, 3).
Hessiano = diag(2, 40) → L = 40 → lr máximo = 2/40 = 0,05
lr f final comportamiento
0,001 1,795891 demasiado lento, no llega
0,010 1,7e-09 converge bien
0,040 3,4e-31 muy rápido, cerca del umbral
0,050 — oscila sin converger
0,060 — diverge, desborda
Con lr = 0,001 y 200 iteraciones, x sigue en −1,34:
la coordenada lenta apenas se ha movido.
Número de condición: 40/2 = 20. Ese 20 es el que
obliga al zigzag y motiva momentum.Descenso de gradiente y el efecto del learning rate.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | iteraciones, lr_maximo_estable |
| Comprobaciones (0) | — |
compmath run 244Entrenamiento de cualquier modelo, ajuste de hiperparámetros, planificadores de learning rate y diagnóstico de divergencias.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).SGD cambia exactitud del gradiente por número de actualizaciones, y suele salir ganando.
∇f ≈ (1/|B|)·Σ_{i∈B} ∇fᵢ
E[gradiente de lote] = gradiente completo
varianza del estimador ∝ 1/|B|El gradiente exacto de una función de pérdida sobre un millón de ejemplos requiere recorrer el millón. El descenso estocástico observa que un subconjunto pequeño ya da una estimación insesgada del gradiente, y que con el mismo presupuesto de cómputo se pueden dar muchísimas más actualizaciones aunque cada una sea ruidosa.
El intercambio es favorable en la práctica. Mil actualizaciones aproximadas avanzan más que una exacta, porque el error de la estimación se promedia a lo largo de las iteraciones mientras que el progreso se acumula. Ese es el resultado empírico que hizo viable el aprendizaje profundo a escala.
El ruido tiene además un efecto beneficioso que no es un accidente. Las fluctuaciones del gradiente estocástico permiten escapar de puntos de silla y de mínimos locales estrechos, y hay evidencia de que sesgan la solución hacia mínimos anchos, que generalizan mejor. Un gradiente perfecto no siempre es lo deseable.
El tamaño de lote es el mando que regula el compromiso. Lotes grandes dan gradientes precisos, aprovechan mejor la GPU y permiten más paralelismo, pero pierden el efecto regularizador del ruido y suelen necesitar ajustar el learning rate al alza. Lotes pequeños son ruidosos y lentos por muestra, pero exploran más. No hay valor universal.
Ajuste de dos parámetros con 100 datos, mismo presupuesto.
parámetros reales: [2,0 ; 3,0]
lote completo (200 épocas):
estimación = [2,038924 ; 2,996817]
MSE = 0,094537
gradientes evaluados: 20 000
SGD con 1 muestra (200 épocas):
estimación = [2,142997 ; 2,967811]
gradientes evaluados: 20 000
Con el mismo número de evaluaciones, el lote completo
da 200 actualizaciones y SGD da 20 000.
SGD llega a una solución comparable con actualizaciones
mucho más baratas, y su trayectoria es visiblemente ruidosa.SGD: gradiente ruidoso, progreso más barato.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | datos, MSE_batch, gradientes_evaluados_batch, MSE_sgd, gradientes_evaluados_sgd, ahorro_de_computo |
| Comprobaciones (0) | — |
compmath run 245Entrenamiento de redes profundas, aprendizaje en línea, sistemas de recomendación y cualquier ajuste con conjuntos de datos grandes.
10.1137/16m1080173 verificado en Crossref (2026-08-19).10.1214/aoms/1177729586 verificado en Crossref (2026-08-19).Momentum promedia gradientes: el zigzag se cancela y la componente útil se acumula.
vₖ₊₁ = β·vₖ − lr·∇f(xₖ)
xₖ₊₁ = xₖ + vₖ₊₁
paso efectivo ≈ lr/(1−β): β = 0,9 multiplica por 10Momentum añade memoria al descenso. En vez de moverse según el gradiente actual, mantiene una velocidad que es una media móvil exponencial de los gradientes pasados. La analogía física es exacta: una bola que rueda por la superficie acumula inercia en vez de reaccionar solo a la pendiente instantánea.
El efecto en valles alargados es el que justifica el método. Las componentes del gradiente que apuntan a las paredes cambian de signo en cada iteración y se cancelan al promediarse; las que apuntan a lo largo del valle son consistentes y se acumulan. El zigzag desaparece y el avance en la dirección útil se multiplica.
El paso efectivo en una dirección de gradiente constante es lr/(1−β), de modo que β=0,9 equivale a multiplicar el learning rate por 10 en esas direcciones. Ese factor explica por qué al activar momentum suele haber que bajar el learning rate: si no, se cruza el umbral de estabilidad.
El coste es mínimo: un vector de estado del tamaño de los parámetros y una operación por paso. Con esa inversión, momentum acelera prácticamente siempre en problemas mal condicionados, que son la norma. Por eso el SGD con momentum siguió siendo competitivo con Adam en visión por computador durante años.
Mismo problema y mismo learning rate, con y sin momentum.
f(x,y) = x² + 20y² lr = 0,02 β = 0,9
sin momentum:
x final = (−0,00056922 ; 0,0)
f final = 3,24e-07
con momentum:
x final = (1,741e-05 ; −6,475e-05)
f final = 8,42e-08
factor de mejora en f: 3,85×
La diferencia crece con el número de condición:
con condición 20 la mejora es de 4×; con condición 1000
momentum es la diferencia entre converger y no converger.
Paso efectivo: lr/(1−β) = 0,02/0,1 = 0,2, diez veces mayor.Momentum acumula velocidad y amortigua la oscilación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | learning_rate, beta, factor_de_mejora |
| Comprobaciones (1) | momentum_llega_mas_bajo |
compmath run 246SGD con momentum en visión, aceleración de convergencia en problemas mal condicionados y base de Adam y sus variantes.
10.1016/0041-5553(64)90137-5 verificado en Crossref (2026-08-19).Nesterov calcula el gradiente donde va a estar, no donde está.
punto adelantado: x̃ = xₖ + β·vₖ
vₖ₊₁ = β·vₖ − lr·∇f(x̃)
cota O(1/k²) frente a O(1/k) del descenso simpleEl gradiente acelerado de Nesterov introduce un cambio que parece menor y no lo es: evalúa el gradiente en el punto al que el momentum va a llevar, no en el punto actual. Primero se mira hacia dónde empuja la inercia, y allí se calcula la corrección.
La intuición es la de un conductor que frena antes de la curva en vez de al llegar a ella. Si el punto adelantado ya ha pasado el mínimo, el gradiente en él apunta hacia atrás y frena la velocidad antes de que el sobrepaso ocurra. Momentum clásico solo se entera del sobrepaso después de haberlo cometido.
El resultado no es solo empírico. Para funciones convexas suaves, Nesterov alcanza una tasa de convergencia O(1/k²) frente al O(1/k) del descenso simple, y esa tasa es óptima: ningún método de primer orden puede hacerlo mejor en esa clase de problemas. Es uno de los resultados más elegantes de la optimización convexa.
En aprendizaje profundo la ventaja es más modesta que en el caso convexo, pero real y gratuita: el coste computacional es idéntico al de momentum. Está disponible como opción en prácticamente todas las bibliotecas —nesterov=True— y activarla rara vez perjudica.
Momentum clásico frente a Nesterov, condiciones idénticas.
f(x,y) = x² + 20y² lr = 0,02 β = 0,9
momentum clásico:
x final = (1,741e-05 ; −6,475e-05)
f final = 8,4165e-08
Nesterov:
x final = (−5,6e-07 ; 0,0)
f final = 0,0 (por debajo de la precisión)
Diferencia de implementación:
clásico: ∇f evaluado en x
Nesterov: ∇f evaluado en x + β·v
Ventaja teórica en convexas suaves:
descenso simple O(1/k)
Nesterov O(1/k²) y es óptimoNAG mira adelante antes de calcular el gradiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | nesterov_mejor |
compmath run 247SGD con Nesterov en entrenamiento de redes, optimización convexa acelerada y métodos proximales acelerados.
AdaGrad da pasos grandes a coordenadas poco vistas, pero su acumulador nunca olvida.
Gₖ = Gₖ₋₁ + ∇f(xₖ)² (por coordenada)
xₖ₊₁ = xₖ − lr·∇f(xₖ) / (√Gₖ + ε)
el paso decrece monótonamenteAdaGrad abandona la idea de un learning rate único para todas las coordenadas. Acumula para cada una la suma de sus gradientes al cuadrado y divide el paso por su raíz. Las coordenadas con gradientes históricamente grandes reciben pasos pequeños; las que apenas se han movido reciben pasos grandes.
Esto resuelve un problema real en datos dispersos. En procesamiento de lenguaje, unas pocas palabras aparecen constantemente y la mayoría casi nunca. Con learning rate único, los embeddings de las palabras raras apenas se actualizan. AdaGrad les da pasos grandes precisamente porque han acumulado poco, y por eso funcionó tan bien en su momento.
El defecto es estructural y no tiene arreglo dentro del método: el acumulador es una suma de términos no negativos y por tanto solo crece. El paso efectivo decrece monótonamente hacia cero, y en entrenamientos largos el aprendizaje se detiene aunque el modelo esté lejos del óptimo. No es un problema de ajuste; es una consecuencia de la fórmula.
El diagnóstico de ese defecto llevó directamente a RMSProp, que sustituye la suma por una media móvil exponencial y por tanto olvida el pasado lejano. AdaGrad conserva interés histórico y sigue siendo razonable en problemas convexos dispersos con horizontes cortos.
Evolución del tamaño de paso a lo largo de las iteraciones.
lr base = 0,5
iteración tamaño de paso efectivo
1 0,7071
50 0,1004
100 0,0710
200 0,0502
El paso cae como 1/√k y no vuelve a subir nunca.
Resultado sobre x² + 20y²:
x final = (−0,0 ; 2,2e-07) f final = 1e-12
Aquí converge porque el problema es fácil y corto.
En un entrenamiento de 100 000 pasos, el paso efectivo
caería a menos del 1 % del inicial.AdaGrad adapta el paso por coordenada, pero se apaga.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | learning_rate_base |
| Comprobaciones (1) | el_paso_decrece_monotonamente |
compmath run 248Modelos con datos dispersos, embeddings de vocabularios grandes, sistemas de recomendación y problemas convexos con horizonte corto.
9780262337373 verificado en International ISBN Agency (2026-08-19).RMSProp sustituye la suma de AdaGrad por una media móvil, y el paso deja de apagarse.
Eₖ = ρ·Eₖ₋₁ + (1−ρ)·∇f(xₖ)²
xₖ₊₁ = xₖ − lr·∇f(xₖ) / (√Eₖ + ε)
ρ = 0,9 equivale a recordar unos 10 pasosRMSProp aplica una corrección mínima a AdaGrad con consecuencias grandes: en vez de sumar todos los gradientes al cuadrado, mantiene una media móvil exponencial. Los gradientes antiguos se descuentan geométricamente y el acumulador puede bajar además de subir.
Eso resuelve el apagado. Si una coordenada tuvo gradientes grandes al principio y luego se calmó, AdaGrad la mantiene penalizada para siempre mientras que RMSProp la libera. El método se adapta al régimen actual del entrenamiento en vez de a toda su historia, que es lo apropiado en problemas no estacionarios como el aprendizaje profundo.
El parámetro ρ fija la longitud de la memoria: con ρ = 0,9 la ventana efectiva es de unos 10 pasos, con 0,99 de unos 100. El valor por defecto funciona en la mayoría de los casos y rara vez merece ajustarse. El ε en el denominador evita divisiones por cero y típicamente vale 10⁻⁸.
RMSProp tiene una peculiaridad histórica: nunca se publicó como artículo. Apareció en una diapositiva del curso de Hinton en Coursera en 2012 y se citó así durante años. Su combinación con momentum es lo que da Adam, que es la clase siguiente.
RMSProp y AdaGrad con el mismo learning rate.
ρ = 0,9 ε = 1e-8 mismo lr para ambos
RMSProp:
x final = (0,02310943 ; 0,01786889)
f final = 0,00692
AdaGrad con el mismo lr:
x final = (−0,85543159 ; 1,78114968)
f final = 64,18
AdaGrad se quedó atascado: su paso se apagó antes
de llegar al mínimo.
Diferencia única entre ambos:
AdaGrad: G += g² suma que solo crece
RMSProp: E = ρE + (1−ρ)g² media que puede bajarRMSProp: media móvil del gradiente al cuadrado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | rho, epsilon |
| Comprobaciones (2) | rmsprop_mejor, el_paso_no_se_apaga |
compmath run 249Entrenamiento de redes recurrentes, aprendizaje por refuerzo, objetivos no estacionarios y componente de segundo momento en Adam.
9780262337373 verificado en International ISBN Agency (2026-08-19).Adam combina momentum y escalado adaptativo, y corrige el sesgo del arranque.
mₖ = β₁·mₖ₋₁ + (1−β₁)·g; vₖ = β₂·vₖ₋₁ + (1−β₂)·g²
m̂ = mₖ/(1−β₁ᵏ); v̂ = vₖ/(1−β₂ᵏ)
xₖ₊₁ = xₖ − lr·m̂ / (√v̂ + ε)Adam junta las dos ideas que funcionaban por separado: el primer momento m es la media móvil del gradiente, que es momentum, y el segundo momento v es la media móvil del gradiente al cuadrado, que es RMSProp. La actualización divide uno por la raíz del otro.
La aportación propia es la corrección de sesgo, y merece entenderse porque es la parte que más se copia sin comprender. Ambos acumuladores se inicializan a cero, así que en los primeros pasos están fuertemente sesgados hacia cero: con β₂ = 0,999, tras un paso v vale solo el 0,1 % del valor correcto. Dividir por 1 − βᵏ compensa exactamente ese arranque, y sin esa corrección los primeros pasos serían enormes.
Los valores por defecto —β₁ = 0,9, β₂ = 0,999, ε = 10⁻⁸— funcionan sorprendentemente bien en una variedad enorme de problemas, y esa robustez es la razón real de su dominio: se puede empezar a entrenar sin ajustar nada. Es el optimizador por defecto del aprendizaje profundo desde 2015.
No está libre de críticas. Hay problemas convexos donde Adam no converge, señalados por Reddi y otros en 2018, lo que motivó AMSGrad. Y en visión por computador el SGD con momentum bien ajustado suele generalizar mejor. Adam es el mejor punto de partida, no la respuesta final.
Adam sobre el problema de referencia y la corrección de sesgo.
β₁ = 0,9 β₂ = 0,999 lr = 0,1 ε = 1e-8
resultado:
x final = (−5,69e-05 ; −5,303e-05)
f final = 5,95e-08
Por qué hace falta la corrección de sesgo:
paso k 1 − β₂ᵏ v subestima por factor
1 0,001 1000×
10 0,00995 100×
100 0,0952 10×
1000 0,632 1,6×
Sin corregir, los primeros pasos dividirían por una raíz
demasiado pequeña y el paso efectivo sería desmesurado.Adam: momentum de primer y segundo orden con corrección de sesgo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | beta1, beta2, lr, eps, paso_1_sin_corregir, factor_de_correccion_en_t=1 |
| Comprobaciones (1) | es_el_optimizador_por_defecto |
compmath run 250Entrenamiento por defecto de redes profundas, ajuste fino de modelos de lenguaje, transformers y prácticamente todo el aprendizaje profundo actual.
10.48550/arxiv.1412.6980 verificado en DataCite (2026-08-19).10.48550/arxiv.1904.09237 verificado en DataCite (2026-08-19).En Adam, sumar L2 al gradiente no es lo mismo que decaer el peso: AdamW los separa.
Adam + L2: g ← g + λ·w, luego se divide por √v̂
AdamW: xₖ₊₁ = xₖ − lr·m̂/(√v̂+ε) − lr·λ·xₖ
en SGD ambas formas coinciden; en Adam noEn el descenso de gradiente clásico, añadir λ‖w‖² al objetivo y decaer los pesos multiplicándolos por (1 − lr·λ) son operaciones idénticas. Esa equivalencia es tan familiar que se dio por válida también en Adam durante años, y era falsa.
La razón es el escalado adaptativo. En Adam, el término λ·w que se suma al gradiente pasa por la división entre √v̂, igual que el resto del gradiente. El resultado es que los pesos con gradientes históricamente grandes reciben menos regularización, exactamente al revés de lo que se pretendía. La intensidad de la regularización pasa a depender del historial de gradientes de cada coordenada.
AdamW aplica el decaimiento directamente sobre el peso, fuera del mecanismo adaptativo. Cada parámetro recibe la misma proporción de decaimiento independientemente de su gradiente, que es lo que se quería desde el principio. El cambio en el código es de una línea; el efecto en el rendimiento fue lo bastante grande como para convertirlo en el estándar.
Hoy AdamW es el optimizador por defecto para transformers y modelos de lenguaje. La lección metodológica va más allá del caso: una equivalencia válida en un algoritmo puede romperse en otro, y trasladar intuiciones sin verificarlas cuesta caro. Este error concreto estuvo en producción desde 2015 hasta 2019.
Mismo objetivo y mismo weight decay, dos implementaciones.
objetivo: (x−3)² + (y−4)² óptimo sin regularizar: (3, 4)
weight decay λ = 0,05
Adam con L2 dentro del gradiente:
solución = (2,926829 ; 3,902440) norma = 4,87805
AdamW con decay desacoplado:
solución = (2,918662 ; 3,830002) norma = 4,80800
AdamW regulariza más y de forma uniforme.
La diferencia crece con la dispersión de los gradientes:
aquí es del 1,4 %, en un transformer real es suficiente
para cambiar la calidad del modelo de forma medible.AdamW desacopla el weight decay del gradiente adaptativo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | weight_decay, norma_adam_L2, norma_adamw |
| Comprobaciones (0) | — |
compmath run 251Entrenamiento de transformers, ajuste fino de modelos de lenguaje, recetas de regularización moderna y reproducción de resultados publicados.
10.48550/arxiv.1711.05101 verificado en DataCite (2026-08-19).10.48550/arxiv.1412.6980 verificado en DataCite (2026-08-19).Newton resuelve una cuadrática en un solo paso, y por eso no escala.
xₖ₊₁ = xₖ − H⁻¹·∇f(xₖ)
convergencia cuadrática cerca del óptimo
coste O(n³) por iteración, memoria O(n²)El método de Newton aplicado a optimización aproxima la función por su desarrollo de Taylor de segundo orden y salta al mínimo de esa parábola. Usa por tanto la curvatura, no solo la pendiente, y eso le permite elegir simultáneamente dirección y tamaño de paso sin learning rate.
En una función cuadrática, la aproximación de segundo orden es la función, y Newton alcanza el mínimo exacto en una única iteración desde cualquier punto de partida. En funciones generales conserva convergencia cuadrática cerca del óptimo: el número de dígitos correctos se duplica en cada paso, igual que en la búsqueda de raíces de la clase 223.
El obstáculo es el coste. El Hessiano tiene n² entradas e invertirlo cuesta O(n³). Con un modelo de mil millones de parámetros, el Hessiano tendría 10¹⁸ entradas: no cabe en ninguna memoria existente. Por eso los métodos de segundo orden puros son inviables en aprendizaje profundo, por muy atractiva que sea su tasa de convergencia.
Hay un segundo problema, cualitativo: si el Hessiano no es definido positivo —lo cual ocurre en puntos de silla, abundantes en dimensión alta— la dirección de Newton puede apuntar cuesta arriba. Las variantes prácticas añaden regularización al Hessiano o usan regiones de confianza para evitarlo.
Newton sobre una cuadrática: un paso y termina.
f(x,y) = x² + 20y² punto inicial (−2, 3)
Hessiano = [[2, 0], H⁻¹ = [[0,5, 0 ],
[0, 40]] [0 , 0,025]]
Paso 1: x = (−2,3) − H⁻¹·(−4,120) = (0, 0)
f = 0,0 ✓
Paso 2: ya está en el óptimo, no se mueve.
Un paso frente a las 200 iteraciones del descenso.
Coste: invertir H es O(n³). Con n = 10⁹ el Hessiano
tendría 10¹⁸ entradas: imposible de almacenar.Newton en optimización: usa curvatura, converge en un paso si es cuadrática.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | converge_en_1_paso |
compmath run 252Optimización de pocos parámetros, ajuste de modelos estadísticos, IRLS en regresión logística y base conceptual de los métodos cuasi-Newton.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780511804441 verificado en International ISBN Agency (2026-08-19).BFGS construye una aproximación del Hessiano inverso usando solo gradientes.
sₖ = xₖ₊₁ − xₖ; yₖ = ∇f(xₖ₊₁) − ∇f(xₖ)
condición secante: Bₖ₊₁·yₖ = sₖ
coste O(n²) frente al O(n³) de NewtonLos métodos cuasi-Newton buscan la velocidad de Newton sin su coste. La idea es que la diferencia entre dos gradientes consecutivos ya contiene información sobre la curvatura en la dirección recorrida, y acumulando esa información a lo largo de las iteraciones se puede construir una aproximación del Hessiano inverso.
La condición secante B·y = s es la formalización: la aproximación debe reproducir la relación observada entre el desplazamiento y el cambio de gradiente. Es la generalización multidimensional exacta del método de la secante de la clase 224, donde la derivada se aproximaba con dos evaluaciones.
BFGS es la fórmula de actualización que mejor funciona en la práctica, y tiene la propiedad valiosa de preservar la definición positiva de la aproximación, con lo que la dirección resultante siempre es de descenso. El coste baja a O(n²) y no hace falta calcular ninguna segunda derivada.
Para dimensiones grandes existe L-BFGS, que no almacena la matriz sino los últimos m pares (s, y) —típicamente 10 o 20— y reconstruye el producto con el gradiente sobre la marcha. Su coste es O(mn) y es el algoritmo de referencia para optimización suave a gran escala fuera del aprendizaje profundo. En redes neuronales rinde menos porque el gradiente estocástico rompe las hipótesis de suavidad que necesita.
BFGS reconstruye el Hessiano inverso sin calcularlo.
f(x,y) = x² + 20y² BFGS con línea de retroceso
iter f |∇f|
1 14,765625 30,2335
5 1,3e-03 0,2189
10 2,1e-09 9,1e-05
x final = (−0,0 ; −0,0) ✓
Aproximación construida: Hessiano inverso real:
[[0,501698 0,000276] [[0,5 0 ]
[0,000276 0,025045]] [0 0,025]]
Coincide a tres decimales sin haber evaluado
ni una sola segunda derivada.BFGS: aproxima el Hessiano inverso solo con gradientes.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | no_calcula_el_hessiano |
compmath run 253Ajuste de modelos estadísticos, optimización en ingeniería, problemas inversos y minimización de energía en química computacional.
9780387400655 verificado en International ISBN Agency (2026-08-19).10.1007/bf01589116 verificado en Crossref (2026-08-19).Armijo pide una reducción proporcional a lo que el gradiente prometía, no cualquier reducción.
condición de Armijo: f(x + αd) ≤ f(x) + c₁·α·∇fᵀd
retroceso: empezar en α = 1 y multiplicar por 0,5 hasta cumplirla
c₁ típico: 10⁻⁴Elegir el tamaño de paso a mano es frágil: demasiado grande diverge, demasiado pequeño malgasta iteraciones. La búsqueda de línea automatiza esa elección probando valores y quedándose con uno que garantice progreso suficiente.
El criterio ingenuo —aceptar cualquier α que reduzca f— no basta. Se pueden construir sucesiones de pasos que reducen la función cada vez y aun así no convergen al mínimo, porque la reducción se hace arbitrariamente pequeña. Hace falta exigir un progreso proporcional al prometido por el gradiente.
Esa exigencia es la condición de Armijo: la reducción debe ser al menos una fracción c₁ de la que predice la aproximación lineal. Con c₁ = 10⁻⁴ la exigencia es muy laxa —se pide capturar la diezmilésima parte del descenso prometido— y aun así basta para garantizar convergencia.
La implementación estándar es el retroceso: empezar con α = 1, y mientras no se cumpla Armijo multiplicar por 0,5. Termina en pocas iteraciones y solo requiere evaluar la función. Las condiciones de Wolfe añaden una segunda desigualdad sobre la curvatura para evitar pasos demasiado cortos, y son las que necesita BFGS para mantener válida su aproximación.
Retroceso desde un punto con gradiente muy desequilibrado.
punto (−2, 3) f = 184,0
dirección d = −∇f = (4, −120) c₁ = 1e-4
α f(x + αd) ¿Armijo?
1,000 273 784,0 no
0,500 64 900,0 no
0,250 15 016,0 no
0,125 3 271,0 no
0,0625 634,0 no
0,03125 146,3 sí ← aceptado
6 evaluaciones de f y ningún hiperparámetro que ajustar.
Sin línea de búsqueda, α = 1 habría multiplicado
la función por 1 488.Búsqueda de línea con la condición de Armijo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | f(x), c1, alpha_aceptado |
| Comprobaciones (0) | — |
compmath run 254Métodos cuasi-Newton, optimización sin ajuste manual de paso, entrenamiento con paso adaptativo y solvers de propósito general.
9780387400655 verificado en International ISBN Agency (2026-08-19).10.2140/pjm.1966.16.1 verificado en Crossref (2026-08-19).Regularizar es cambiar la función objetivo, no modificar el algoritmo.
objetivo regularizado: J(w) = L(w) + λ·R(w)
L2: R(w) = ‖w‖² → encoge todos los pesos
L1: R(w) = ‖w‖₁ → anula coeficientesLa regularización se presenta a menudo como un truco para evitar el sobreajuste, y esa descripción oscurece lo que realmente es: una modificación explícita de la función objetivo. Se está optimizando un problema distinto, con un término adicional que penaliza la complejidad, y todo el análisis de optimización sigue aplicándose sin cambios.
El parámetro λ fija el precio de la complejidad. Con λ = 0 se minimiza solo el error de ajuste y los pesos crecen sin límite si eso ayuda. Con λ grande domina la penalización y los pesos se encogen hacia cero a costa de un ajuste peor. Es una frontera de Pareto entre dos objetivos en conflicto, y elegir λ es elegir un punto sobre ella.
La elección de norma cambia cualitativamente la solución. L2 encoge todos los coeficientes de forma proporcional pero no anula ninguno, porque su gradiente se hace pequeño cerca de cero. L1 tiene gradiente constante y empuja los coeficientes exactamente a cero, produciendo soluciones dispersas que sirven como selección automática de variables.
La conexión con la parte 10 es directa y merece recordarse: L2 equivale a un prior gaussiano sobre los pesos y L1 a un prior de Laplace, y minimizar el objetivo regularizado es exactamente la estimación MAP. Regularizar no es un truco de ingeniería sino la formulación de una creencia previa.
Mismo problema con tres valores de λ.
λ pesos MSE ‖w‖₂
0,00 [1,010977 ; 9,927716] 0,0151 9,979
0,01 [1,634097 ; 5,663765] 0,2503 5,895
0,50 [1,618590 ; 0,480769] 1,8027 1,688
Al subir λ:
la norma de w baja de 9,98 a 1,69
el error de ajuste sube de 0,015 a 1,803
Es un intercambio explícito, no un efecto secundario.
El segundo peso, que valía 9,93 sin regularizar,
queda reducido a 0,48: el modelo decide que no
merece la pena pagarlo.Regularizar es cambiar el objetivo, no el algoritmo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 255Ridge y Lasso, weight decay en redes, selección de variables, compressed sensing y control del sobreajuste.
9780387848570 verificado en International ISBN Agency (2026-08-19).10.1111/j.2517-6161.1996.tb02080.x verificado en Crossref (2026-08-19).El multiplicador de Lagrange mide cuánto vale relajar la restricción una unidad.
L(x,λ) = f(x) − λ·(g(x) − c)
en el óptimo: ∇f = λ·∇g
λ = ∂f*/∂c (precio sombra)Con una restricción de igualdad, el mínimo ya no está donde el gradiente se anula sino donde el gradiente del objetivo es paralelo al de la restricción. La razón geométrica es clara: si tuvieran una componente distinta, se podría avanzar a lo largo de la restricción reduciendo el objetivo.
El Lagrangiano convierte esa condición en un sistema de ecuaciones. Se construye restando la restricción multiplicada por una incógnita nueva λ, y se anulan todas las derivadas parciales, incluida la de λ, que reproduce la restricción original. El problema restringido se transforma en uno irrestricto con una variable más.
El multiplicador tiene un significado económico preciso y muy útil: es el precio sombra de la restricción, la derivada del óptimo respecto del nivel c. Si λ = 3, relajar la restricción una unidad mejora el óptimo en 3 unidades. Eso convierte a λ en la respuesta cuantitativa a «¿cuánto pagaría por más presupuesto?».
En aprendizaje automático el Lagrangiano aparece en la formulación dual de las SVM, en la derivación de la distribución de máxima entropía —de donde sale softmax—, y en el entrenamiento con restricciones de equidad o de presupuesto. La versión con desigualdades es la clase siguiente.
Punto de la recta x + y = 4 más cercano al origen.
minimizar f(x,y) = x² + y²
sujeto a x + y = 4
L = x² + y² − λ(x + y − 4)
∂L/∂x = 2x − λ = 0 → 2x = λ
∂L/∂y = 2y − λ = 0 → 2y = λ
∂L/∂λ = x + y − 4 = 0
De las dos primeras: x = y. Sustituyendo: 2x = 4, x = 2.
solución = (2, 2) valor óptimo = 8,0
λ = 4
Interpretación de λ: si la restricción pasara a x+y = 5,
el óptimo subiría aproximadamente en 4 unidades.Restricción de igualdad resuelta con el Lagrangiano.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | valor_optimo, lambda |
| Comprobaciones (1) | es_el_minimo |
compmath run 256SVM en su forma dual, distribución de máxima entropía, asignación óptima de recursos y entrenamiento con restricciones.
9780511804441 verificado en International ISBN Agency (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).La holgura complementaria formaliza que una restricción inactiva no influye.
estacionariedad: ∇f + Σμᵢ·∇gᵢ = 0
factibilidad: gᵢ(x) ≤ 0; no negatividad: μᵢ ≥ 0
holgura complementaria: μᵢ·gᵢ(x) = 0Las condiciones de Karush-Kuhn-Tucker extienden Lagrange a restricciones de desigualdad, y son las condiciones necesarias de optimalidad que fundamentan toda la optimización con restricciones. En problemas convexos con cualificación de restricciones son además suficientes.
La novedad conceptual es que una desigualdad puede estar activa —el óptimo está justo sobre la frontera— o inactiva —el óptimo cae en el interior y la restricción no estorba—. La holgura complementaria μᵢ·gᵢ(x) = 0 codifica exactamente esa alternativa: o la restricción se cumple con igualdad, o su multiplicador es cero.
La lectura es directa e intuitiva: una restricción que no aprieta no tiene precio. Si el presupuesto sobra, un euro más no vale nada; si está agotado, su precio sombra es positivo. Esa dicotomía es lo que hace de KKT una herramienta de análisis y no solo de cálculo.
La condición de no negatividad de los multiplicadores es la que distingue las desigualdades de las igualdades: la restricción solo puede empujar en un sentido. Cuando todas las restricciones son de igualdad, KKT se reduce exactamente a Lagrange, y esa reducción confirma que es la generalización correcta.
La misma función con dos restricciones distintas.
objetivo: minimizar (x − 3)²
Caso A — restricción activa: x ≤ 1
óptimo sin restricción: x = 3, no factible
x* = 1 (sobre la frontera)
gradiente del objetivo en x*: −4
μ = 4 > 0
holgura: μ·g(x*) = 4·(1−1) = 0 ✓
Caso B — restricción inactiva: x ≤ 5
óptimo sin restricción: x = 3, factible
x* = 3 (en el interior)
gradiente del objetivo en x*: 0
μ = 0
holgura: μ·g(x*) = 0·(3−5) = 0 ✓
En ambos casos la holgura complementaria se cumple,
pero por motivos opuestos.KKT: restricciones de desigualdad activas e inactivas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | holgura_complementaria_activo, holgura_complementaria_inactivo |
| Comprobaciones (0) | — |
compmath run 257SVM con margen blando, programación no lineal, optimización de carteras con límites y diseño de ingeniería con especificaciones.
9780511804441 verificado en International ISBN Agency (2026-08-19).9780520411586, pendiente de resolver.Un programa cuadrático con Q definida positiva se resuelve por un solo sistema lineal.
min (1/2)xᵀQx + cᵀx sujeto a Ax = b
sistema KKT: [[Q, Aᵀ], [A, 0]]·[x; λ] = [−c; b]
convexo si Q es semidefinida positivaLa programación cuadrática es la clase de problemas con objetivo cuadrático y restricciones lineales. Es la siguiente en complejidad después de la lineal, y sigue siendo tratable: si Q es semidefinida positiva el problema es convexo y tiene solución global.
Con restricciones de igualdad, las condiciones KKT son lineales en las incógnitas, y el problema entero se reduce a resolver un único sistema que agrupa variables y multiplicadores. No hace falta iterar: se plantea el sistema aumentado y se resuelve con los métodos de la parte 11.
Con restricciones de desigualdad aparece la dificultad combinatoria de decidir qué restricciones están activas en el óptimo. Los algoritmos de conjunto activo prueban combinaciones sistemáticamente; los de punto interior siguen una trayectoria por el interior de la región factible y son los que mejor escalan.
Los programas cuadráticos aparecen en sitios importantes: la formulación dual de las SVM es exactamente uno, la optimización de carteras de Markowitz es otro, y el control predictivo por modelo resuelve uno en cada instante de muestreo. Reconocer que un problema es un QP es reconocer que se puede resolver de forma fiable y rápida.
QP de dos variables con una restricción de igualdad.
minimizar x² + y² − 2x − 5y
sujeto a x + y = 3
Q = [[2, 0] c = (−2, −5) A = [1 1] b = 3
[0, 2]]
Q definida positiva → problema convexo ✓
Sistema KKT:
[[2 0 1] [x] [ 2]
[0 2 1] · [y] = [ 5]
[1 1 0]] [λ] [ 3]
solución: x = 1,25 y = 1,75 λ = −0,5
Comprobación: 1,25 + 1,75 = 3 ✓
El óptimo sin restricción sería (1 ; 2,5), que suma 3,5:
la restricción sí aprieta.Programa cuadrático resuelto por su sistema KKT.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | multiplicador_lambda, restriccion_satisfecha, valor_objetivo |
| Comprobaciones (2) | Q_definida_positiva, problema_convexo |
compmath run 258SVM, optimización de carteras, control predictivo por modelo, ajuste con restricciones y problemas de mínimos cuadrados restringidos.
9780387400655 verificado en International ISBN Agency (2026-08-19).9780511804441 verificado en International ISBN Agency (2026-08-19).Sin gradiente y sobre funciones con muchos mínimos, una población busca mejor que un punto.
población → selección → cruce → mutación → nueva población
elitismo: conservar los k mejores intactos
coste: sin gradiente, muchas evaluaciones de fLos algoritmos evolutivos mantienen una población de soluciones candidatas y la hacen evolucionar por selección, recombinación y mutación. No necesitan gradiente ni continuidad, solo poder evaluar la función objetivo, y eso los hace aplicables donde los métodos basados en derivadas no llegan.
Su ventaja aparece en funciones multimodales, con muchos mínimos locales. La función de Rastrigin, con su rejilla de mínimos, atrapa al descenso de gradiente en el primer valle que encuentre. Una población dispersa explora simultáneamente muchas regiones y la selección concentra el esfuerzo donde hay señal.
El elitismo es un detalle de implementación con efecto grande: conservar intactos los mejores individuos garantiza que el óptimo encontrado no se pierda por azar en la siguiente generación. Sin él, el algoritmo puede empeorar entre generaciones y la convergencia deja de ser monótona.
El precio es el número de evaluaciones. Donde el descenso de gradiente necesita cientos, un evolutivo necesita decenas de miles, porque cada generación evalúa la población entera. La regla práctica es clara: si hay gradiente fiable, usarlo. Los evolutivos son para cuando no lo hay —búsqueda de arquitecturas, hiperparámetros discretos, simuladores como caja negra— o cuando la multimodalidad es severa.
Algoritmo evolutivo sobre Rastrigin en dos dimensiones.
función: Rastrigin 2D, mínimo global en (0,0) con f = 0
población 60, generaciones 120, elitismo 12
generación mejor f
1 2,468792
20 0,183441
60 0,004127
120 0,000062
mejor solución: (0,001375 ; 0,005583)
Rastrigin tiene un mínimo local aproximadamente en cada
punto de coordenadas enteras. El descenso de gradiente
desde un punto aleatorio se queda en el más cercano.
Coste: 60 × 120 = 7 200 evaluaciones de f
para un problema de 2 variables.Optimización evolutiva: sin gradiente, sobre una función multimodal.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | poblacion, generaciones, elitismo, mejor_valor |
| Comprobaciones (1) | sin_gradiente |
compmath run 259Búsqueda de arquitecturas neuronales, ajuste de hiperparámetros discretos, diseño de ingeniería con simuladores y optimización de funciones no derivables.
9783662448748 verificado en International ISBN Agency (2026-08-19).10.1162/106365601750190398 verificado en Crossref (2026-08-19).El mismo learning rate que converge en una cuadrática diverge en Rosenbrock.
protocolo: mismo punto inicial, mismo lr, mismas iteraciones
reportar f final, ‖∇f‖ y si divergió
no existe un optimizador uniformemente mejorEl capstone somete a siete optimizadores al mismo presupuesto —300 iteraciones, lr común, punto inicial idéntico— sobre dos problemas de dificultad muy distinta: una cuadrática bien condicionada y la función de Rosenbrock, con su valle curvo y estrecho.
El resultado principal es incómodo y verdadero: ningún optimizador gana en ambos. Momentum es el mejor en la cuadrática y diverge en Rosenbrock con el mismo paso. RMSProp gana en Rosenbrock precisamente porque su escalado adaptativo reduce el paso efectivo en las direcciones de gradiente grande. El descenso simple también diverge.
Que la divergencia aparezca en el banco no es un defecto del experimento: es su hallazgo más útil. Un lr = 0,02 perfectamente razonable en una cuadrática con L = 40 es suicida en un valle donde la curvatura local supera con creces ese valor. Esa es exactamente la situación de una red neuronal real, donde L cambia durante el entrenamiento.
La lección metodológica es que comparar optimizadores exige un protocolo: misma semilla, mismo punto inicial, mismo presupuesto de iteraciones y reporte explícito de los que divergieron. Un banco que oculta las divergencias, o que ajusta el lr de cada método por separado sin decirlo, produce rankings que no significan nada.
Banco con presupuesto idéntico sobre dos problemas.
protocolo: 300 iteraciones, lr = 0,02, punto inicial fijo
método cuadrática f Rosenbrock
gd 9,2e-11 divergió
momentum ~1e-14 divergió
nesterov ~1e-14 convergió
adagrad 2,3e-04 convergió
rmsprop 6,9e-03 mejor
adam 5,9e-08 convergió
adamw 6,1e-08 convergió
mejor en cuadrática: momentum
mejor en Rosenbrock: rmsprop
divergieron en Rosenbrock: gd, momentum
El mismo lr no sirve para ambos problemas.
Reportar las divergencias es parte del resultado.Capstone: banco comparable de optimizadores con presupuesto idéntico.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | el_mismo_lr_no_sirve_para_ambos_problemas, ningun_optimizador_gana_siempre |
compmath run 260Selección de optimizador para un proyecto, benchmarking reproducible, diagnóstico de divergencias en entrenamiento y diseño de experimentos de ablación.
10.48550/arxiv.2007.01547 verificado en DataCite (2026-08-19).9780387400655 verificado en International ISBN Agency (2026-08-19).Entropía, entropía cruzada, divergencias, información mutua, codificación, muestreo, convolución, Fourier, FFT, filtros y series temporales.
Esta parte contesta dos preguntas que parecen inconexas y resultan ser la misma. La primera: ¿cuánta información hay en un mensaje, y cuánto se puede comprimir sin perder nada? La segunda: ¿qué hay dentro de una señal, y cómo se extrae? Shannon respondió la primera en 1948 y Fourier la segunda en 1822, y ambas convergen en el aprendizaje automático moderno, donde la función de pérdida es una divergencia entre distribuciones y las capas son convoluciones.
Las clases 261 a 268 construyen la teoría de la información desde su ladrillo: la sorpresa −log p. Un evento seguro no sorprende, uno improbable sorprende mucho, y el logaritmo garantiza que la sorpresa de dos eventos independientes sea la suma de las suyas. La entropía es la sorpresa esperada, y el teorema de codificación de Shannon le da un significado operativo que no es metafórico: es el límite inferior exacto de bits por símbolo de cualquier compresión sin pérdida.
De ahí salen las medidas que usa el aprendizaje automático a diario. La entropía cruzada es el coste de codificar la distribución real con un código diseñado para otra, y minimizarla es exactamente maximizar la verosimilitud: la función de pérdida de casi todo clasificador no es una elección de diseño, es una consecuencia. La divergencia KL mide el exceso sobre el óptimo, y su asimetría no es un defecto sino información: KL(p‖q) y KL(q‖p) penalizan errores distintos, y esa diferencia decide el comportamiento de un VAE frente a una GAN. La información mutua cuantifica cuánto dice una variable sobre otra, y vale cero si y solo si son independientes, que es más de lo que la correlación puede garantizar.
Las clases 269 a 275 pasan a las señales. El teorema de Nyquist impone una frontera dura: hay que muestrear a más del doble de la frecuencia máxima presente, y por debajo de ese límite el aliasing es irreversible —no hay procesamiento posterior que recupere lo que se perdió—. La convolución aparece como el operador central, primero como filtrado y luego como el núcleo de las CNN, y Fourier revela que toda señal es una suma de sinusoides y que convolucionar en el tiempo es multiplicar en frecuencia. La FFT hace ese cambio de dominio computable: O(n log n) en vez de O(n²), lo que para un millón de muestras es la diferencia entre milisegundos y semanas.
El cierre (276 a 280) trata las series temporales: estacionariedad como supuesto que casi todo el análisis clásico necesita, autocorrelación para descubrir periodicidad oculta, ventaneo y la fuga espectral que provoca analizar un trozo finito, y densidad espectral. El capstone recorre el camino completo: de una señal cruda a un vector de características temporales y espectrales listo para alimentar un modelo.
El puente con la inteligencia artificial es explícito en cada bloque. La entropía cruzada es la pérdida de todo clasificador; el VAE optimiza un ELBO con un término KL; las GAN se analizaron originalmente en términos de divergencia de Jensen-Shannon; las CNN son convoluciones con núcleos aprendidos; la atención es una correlación normalizada; y la codificación posicional de un Transformer son senos y cosenos de frecuencias distintas.
La función de pérdida de casi todo clasificador es entropía cruzada; el VAE optimiza un ELBO con un término KL; las CNN son convoluciones aprendidas.
| Término | Definición | Clase |
|---|---|---|
| Aliasing | Frecuencias altas que aparecen como bajas al muestrear demasiado lento. Es irreversible. | 270 |
| Asimetría de KL | KL(p‖q) ≠ KL(q‖p). Cada dirección penaliza un tipo distinto de error. | 264 |
| Autocorrelación | Correlación de la serie consigo misma desplazada. Revela periodicidad oculta. | 277 |
| Bit y nat | Unidades de información según se use log₂ o logaritmo natural. 1 nat ≈ 1,4427 bits. | 261 |
| Centroide espectral | Frecuencia media ponderada por potencia. Descriptor del brillo de una señal. | 280 |
| Convolución | Deslizar un núcleo invertido sobre una señal y sumar productos. Base del filtrado y de las CNN. | 271 |
| Correlación cruzada | Como la convolución pero sin invertir el núcleo. Es lo que implementan las CNN. | 272 |
| Código de Huffman | Código de longitud variable óptimo entre los de prefijo, con símbolos frecuentes más cortos. | 268 |
| Código de prefijo | Ningún código es prefijo de otro, lo que permite decodificar sin separadores. | 268 |
| Densidad espectral de potencia | Reparto de la energía de la señal entre sus frecuencias. | 279 |
| Diferenciación | Restar el valor anterior a cada término. Elimina tendencias polinómicas. | 276 |
| Distribución uniforme y entropía | Entre distribuciones sobre n símbolos, la uniforme es la de máxima entropía: log n. | 262 |
| Divergencia de Jensen-Shannon | Media de las KL a la mezcla. Simétrica, acotada y su raíz es una métrica. | 265 |
| Divergencia KL | KL(p‖q) = H(p,q) − H(p). No negativa, cero solo si p = q, y no simétrica. | 264 |
| Entropía cruzada | H(p,q) = −Σ p·log q. Coste de codificar p con un código óptimo para q. | 263 |
| Entropía de Shannon | H(p) = −Σ p·log p. Sorpresa esperada y límite inferior de compresión sin pérdida. | 262 |
| Epsilon de estabilidad | Constante minúscula que evita log(0) al calcular pérdidas logarítmicas. | 263 |
| Estacionariedad | Media, varianza y autocovarianza que no cambian con el tiempo. | 276 |
| FFT | Algoritmo que calcula la DFT en O(n log n) en vez de O(n²). | 274 |
| Filtro paso-bajo | Atenúa las frecuencias altas y conserva las bajas. Una media móvil es el caso más simple. | 275 |
| Frecuencia de muestreo | Número de muestras por segundo tomadas de una señal continua. | 269 |
| Fuga espectral | Energía que se dispersa a frecuencias vecinas al analizar un trozo finito de señal. | 278 |
| Independencia e información | I(X;Y) = 0 si y solo si X e Y son independientes. Detecta relaciones no lineales. | 266 |
| Información mutua | I(X;Y) = H(X) − H(X|Y). Reducción de incertidumbre sobre X al conocer Y. | 266 |
| Núcleo o kernel | Vector o matriz pequeña que define la operación local de una convolución. | 271 |
| Principio de máxima entropía | Entre las distribuciones compatibles con lo conocido, elegir la de mayor entropía. | 267 |
| Respuesta en frecuencia | Cuánto atenúa o amplifica un filtro cada frecuencia. | 275 |
| Retardo o lag | Desplazamiento temporal aplicado a la serie al calcular la autocorrelación. | 277 |
| Sorpresa | −log p(x). Información que aporta observar un evento. Cero si era seguro. | 261 |
| Teorema de convolución | Convolucionar en el tiempo equivale a multiplicar en frecuencia. | 274 |
| Teorema de Nyquist | Hay que muestrear a más del doble de la frecuencia máxima presente en la señal. | 270 |
| Teorema de Parseval | La energía en el dominio del tiempo es igual a la energía en el dominio de la frecuencia. | 273 |
| Transformada de Fourier | Descompone una señal en sus componentes de frecuencia. Cambio de base a senos y cosenos. | 273 |
| Ventaneo | Multiplicar por una función que decae en los bordes antes de transformar. | 278 |
La información de un evento es su sorpresa, y el logaritmo la hace aditiva.
I(x) = −log₂ p(x) en bits
p = 1 ⟹ I = 0; p → 0 ⟹ I → ∞
eventos independientes: I(x,y) = I(x) + I(y)Antes de definir entropía hay que definir cuánta información aporta un solo evento. La respuesta de Shannon es que la información es sorpresa: enterarse de algo que ya se daba por seguro no aporta nada, y enterarse de algo improbable aporta mucho.
La función que cumple eso es −log p. Vale cero cuando p = 1 y tiende a infinito cuando p tiende a cero, con la forma correcta. Y no es una elección arbitraria: es la única función continua que satisface la propiedad de aditividad, salvo un factor de escala.
La aditividad es la exigencia clave. Si dos eventos son independientes, la información de observar ambos debe ser la suma de las informaciones individuales. Como las probabilidades se multiplican y los logaritmos convierten productos en sumas, el logaritmo es la única vía. Es la misma razón por la que se trabaja con log-verosimilitud.
La base del logaritmo fija la unidad. Con base 2 la información se mide en bits, y un bit es exactamente la información de un lanzamiento de moneda justa. Con logaritmo natural se mide en nats, y es lo habitual en aprendizaje automático porque su derivada es más limpia. Comparar entropías calculadas en bases distintas sin convertir es un error frecuente: el factor es 1,4427.
Sorpresa de cuatro eventos con probabilidades muy distintas.
evento p I = −log₂ p
casi seguro 0,99 0,0145 bits
frecuente 0,50 1,0000 bits
raro 0,01 6,6439 bits
rarísimo 0,001 9,9658 bits
Un evento de p = 1 aporta exactamente 0 bits.
Aditividad: dos lanzamientos independientes de moneda
I(cara, cara) = −log₂(0,25) = 2,0 bits
I(cara) + I(cara) = 1,0 + 1,0 = 2,0 bits ✓
Conversión de unidades:
1 nat = 1,4427 bits 1 bit = 0,6931 natsLa sorpresa de un evento es -log de su probabilidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | un_evento_de_p=1_no_sorprende, aditiva_para_independientes, suma_de_sorpresas |
| Comprobaciones (0) | — |
compmath run 261Diseño de códigos, medida de sorpresa de un modelo ante datos nuevos, detección de anomalías y cuantificación de la incertidumbre de una predicción.
10.1002/j.1538-7305.1948.tb01338.x verificado en Crossref (2026-08-19).La entropía es el número mínimo de bits por símbolo que cualquier compresor puede lograr.
H(p) = −Σ p(x)·log₂ p(x)
0 ≤ H(p) ≤ log₂ n
H = 0 si es determinista; H = log₂ n si es uniformeLa entropía es la sorpresa esperada: la media de −log p ponderada por las propias probabilidades. Mide la incertidumbre media de una fuente antes de observar su salida, y es el concepto central de toda la teoría.
Su interpretación operativa es la que le da fuerza. El teorema de codificación de fuente de Shannon dice que ningún código sin pérdida puede usar menos de H bits por símbolo en promedio, y que existen códigos que se acercan arbitrariamente a ese límite. No es una cota heurística: es una imposibilidad demostrada.
Los dos extremos son informativos. Una fuente determinista tiene entropía cero: no hace falta transmitir nada porque el receptor ya sabe qué viene. Una fuente uniforme sobre n símbolos tiene entropía log₂ n, la máxima posible: no hay estructura que explotar y no se puede comprimir por debajo de la codificación de longitud fija.
Toda compresión vive entre esos extremos, y explota que las distribuciones reales no son uniformes. En aprendizaje automático la entropía aparece además como medida de incertidumbre de una predicción: una salida softmax casi uniforme tiene entropía alta y el modelo está dudando, lo que sirve como señal para aprendizaje activo o para rechazar la predicción.
Entropía de cuatro distribuciones sobre el mismo alfabeto.
distribución H (bits)
uniforme sobre 4 símbolos 2,0000 ← máxima
sesgada [0,7 ; 0,15 ; 0,1 ; 0,05] 1,2568
moneda justa (2 símbolos) 1,0000
determinista 0,0000 ← mínima
Máximo teórico para 4 símbolos: log₂ 4 = 2,0 ✓
La misma uniforme en nats: ln 4 = 1,3863 nats
Conversión: 1,3863 × 1,4427 = 2,0 bits ✓
Lectura: la fuente sesgada necesita 1,26 bits por símbolo
en el mejor código posible, frente a los 2 de la uniforme.La entropía es la sorpresa esperada y el límite de compresión.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | maxima_para_4_simbolos, entropia_en_nats_uniforme |
| Comprobaciones (2) | la_uniforme_maximiza, la_determinista_es_0 |
compmath run 262Compresión de datos, medida de incertidumbre en predicciones, criterio de división en árboles de decisión y aprendizaje activo.
10.1002/047174882x verificado en Crossref (2026-08-19).10.1002/j.1538-7305.1948.tb01338.x verificado en Crossref (2026-08-19).Minimizar entropía cruzada es exactamente maximizar la verosimilitud.
H(p,q) = −Σ p(x)·log q(x)
H(p,q) = H(p) + KL(p‖q) ≥ H(p)
con p one-hot: H(p,q) = −log q(clase correcta)La entropía cruzada mide el coste medio de codificar mensajes que vienen de p usando un código diseñado para q. Si q = p el coste es el óptimo H(p); si q se aleja, el coste sube. Nunca puede bajar del óptimo, y esa desigualdad es la que garantiza que minimizarla lleve en la dirección correcta.
Su descomposición H(p,q) = H(p) + KL(p‖q) es la clave para entender qué se está optimizando. La entropía H(p) es una propiedad de los datos y no depende del modelo, así que minimizar entropía cruzada es minimizar la divergencia KL entre la distribución real y la predicha. Son el mismo problema.
En clasificación, la distribución real es one-hot —toda la masa en la clase correcta— y la fórmula colapsa a −log q(clase correcta). La pérdida solo depende de la probabilidad asignada a la respuesta correcta, y crece sin límite cuando esa probabilidad tiende a cero. De ahí que un modelo muy seguro y equivocado reciba un castigo enorme.
La consecuencia teórica es que la pérdida de casi todo clasificador no se elige: se deduce. Suponer un modelo categórico y maximizar verosimilitud da entropía cruzada; suponer ruido gaussiano da error cuadrático medio. Y la consecuencia práctica es el epsilon: sin él un log(0) produce infinito y destruye el entrenamiento en un paso.
Pérdida de tres predicciones ante la misma etiqueta real.
etiqueta real: [1, 0, 0] H(p) = 0
predicción pérdida
[0,90 ; 0,05 ; 0,05] 0,105361 muy buena
[0,50 ; 0,30 ; 0,20] 0,693147 mediocre
[0,05 ; 0,60 ; 0,35] 2,995732 mala y segura
predicción perfecta [1,0,0]: pérdida = 0,0
Como H(p) = 0, aquí la entropía cruzada ES la KL.
Sin epsilon:
predicción 0,0 para la clase correcta → log(0) = −∞
el gradiente se vuelve NaN y el entrenamiento muere.Entropía cruzada: el coste de codificar p con un código para q.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | prediccion_perfecta, H(p) |
| Comprobaciones (2) | CE = H(p) + KL(p||q), es_la_perdida_de_todo_clasificador |
compmath run 263Pérdida de clasificación en cualquier red, modelos de lenguaje, calibración de probabilidades y evaluación de modelos probabilísticos.
9780262337373 verificado en International ISBN Agency (2026-08-19).10.1002/047174882x verificado en Crossref (2026-08-19).KL no es simétrica, y cada dirección castiga un error distinto.
KL(p‖q) = Σ p·log(p/q) ≥ 0
KL(p‖q) = 0 ⟺ p = q
KL(p‖q) ≠ KL(q‖p); no cumple la desigualdad triangularLa divergencia de Kullback-Leibler mide cuánta información se pierde al usar q en lugar de p. Es el exceso de entropía cruzada sobre la entropía: los bits desperdiciados por usar el código equivocado. Es no negativa y vale cero solo si las distribuciones coinciden.
Pese a llamarse divergencia y comportarse en parte como una distancia, no lo es. Le fallan dos propiedades: no es simétrica y no cumple la desigualdad triangular. Escribir «la distancia KL» es un error de vocabulario que arrastra errores de razonamiento.
La asimetría no es un defecto: es información. KL(p‖q) penaliza mucho que q asigne casi cero donde p tiene masa, así que fuerza a q a cubrir todo el soporte de p. Al revés, KL(q‖p) penaliza que q ponga masa donde p no la tiene, y produce soluciones que se concentran en un modo. Se conocen como comportamiento de cobertura y de búsqueda de modo.
Esa diferencia tiene consecuencias visibles. La inferencia variacional minimiza KL(q‖p) y por eso los VAE tienden a producir muestras borrosas concentradas en el modo dominante. Elegir la dirección de la KL no es un detalle técnico: determina el comportamiento cualitativo del modelo resultante.
Las dos direcciones sobre las mismas distribuciones.
p = [0,5 ; 0,3 ; 0,2]
q = [0,3 ; 0,4 ; 0,3]
KL(p‖q) = 0,08801517
KL(q‖p) = 0,08346467
No coinciden → no es simétrica ✓
KL(p‖p) = 0,0 ✓
Asimetría extrema: si q asignara 0,001 donde p tiene 0,5,
KL(p‖q) se dispara (castiga no cubrir)
KL(q‖p) apenas cambia (no le importa)
Por eso KL(p‖q) fuerza cobertura y KL(q‖p) busca modo.KL: no simétrica y no es una distancia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | KL(p||q), KL(q||p), KL(p||p) |
| Comprobaciones (3) | simetrica, siempre_no_negativa, no_cumple_desigualdad_triangular |
compmath run 264Regularización de VAE, inferencia variacional, destilación de conocimiento, detección de desplazamiento de distribución y PPO en aprendizaje por refuerzo.
10.1214/aoms/1177729694 verificado en Crossref (2026-08-19).Jensen-Shannon simetriza la KL midiendo ambas contra la mezcla.
M = (p + q)/2
JS(p,q) = ½·KL(p‖M) + ½·KL(q‖M)
0 ≤ JS ≤ 1 bit; √JS es una métricaLa divergencia de Jensen-Shannon arregla los dos defectos de la KL con una idea simple: construir la mezcla de ambas distribuciones y medir la divergencia de cada una a esa mezcla, promediando. El resultado es simétrico por construcción.
Además está acotada: nunca supera 1 bit, sea cual sea el par de distribuciones. La KL puede ser infinita cuando q asigna cero donde p no lo hace; JS no tiene ese problema porque la mezcla siempre cubre el soporte de ambas. Eso la hace numéricamente mucho más estable como medida de comparación.
Y su raíz cuadrada sí es una métrica: cumple simetría, desigualdad triangular y se anula solo en la identidad. Eso permite usarla como distancia genuina para agrupar, indexar o comparar distribuciones, cosa que con KL no es legítima.
Su papel histórico en aprendizaje automático es notable: el artículo original de las GAN demostró que el discriminador óptimo hace que el generador minimice la divergencia JS entre la distribución real y la generada. Que esa divergencia sature cuando los soportes no se solapan es parte de la explicación de la inestabilidad de las GAN, y la razón de que WGAN cambiara a la distancia de Wasserstein.
JS sobre el mismo par que la clase anterior.
p = [0,5 ; 0,3 ; 0,2]
q = [0,3 ; 0,4 ; 0,3]
mezcla M = [0,4 ; 0,35 ; 0,25]
JS(p,q) = 0,0306589 bits
JS(q,p) = 0,0306589 bits
simétrica ✓
Comparación con KL:
KL(p‖q) = 0,0880 KL(q‖p) = 0,0835
JS = 0,0307 menor y única
Cota: JS ≤ 1 bit siempre.
Para distribuciones con soportes disjuntos, JS = 1 exacto,
mientras que KL sería infinita.Jensen-Shannon: simétrica y acotada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | JS(p,q)_bits, JS(q,p)_bits, distribuciones_disjuntas, cota_superior_en_bits |
| Comprobaciones (2) | simetrica, sqrt(JS)_es_una_metrica |
compmath run 265Análisis de GAN, comparación de distribuciones de datos, agrupamiento de documentos y medida de similitud entre modelos.
10.1109/18.61115 verificado en Crossref (2026-08-19).10.48550/arxiv.1406.2661 verificado en DataCite (2026-08-19).La información mutua vale cero solo si hay independencia, y detecta lo que la correlación no ve.
I(X;Y) = H(X) − H(X|Y) = H(Y) − H(Y|X)
I(X;Y) = KL(p(x,y) ‖ p(x)·p(y))
I(X;Y) = 0 ⟺ X ⫫ YLa información mutua mide cuánto se reduce la incertidumbre sobre una variable al conocer la otra. Es simétrica —saber Y informa sobre X tanto como al revés— y se expresa como la diferencia entre la entropía y la entropía condicional.
Su lectura más profunda es la tercera fórmula: es la divergencia KL entre la distribución conjunta y el producto de las marginales. Como la KL vale cero solo si las distribuciones coinciden, y coincidir con el producto de marginales es la definición de independencia, la información mutua es cero si y solo si las variables son independientes.
Esa equivalencia es lo que la hace superior a la correlación como medida de dependencia. La correlación de la clase 191 solo detecta relaciones lineales, y vale cero para una dependencia cuadrática perfecta. La información mutua detecta cualquier dependencia, lineal o no, monótona o no.
El precio es la estimación. Con variables discretas y datos suficientes se calcula directamente contando; con variables continuas hay que estimar densidades, y eso es difícil en dimensión alta. Los estimadores neuronales como MINE son un área activa, precisamente porque la información mutua aparece en el objetivo del aprendizaje autosupervisado contrastivo.
Dos conjuntas con las mismas marginales y dependencia distinta.
Caso dependiente:
p(0,0)=0,4 p(0,1)=0,1
p(1,0)=0,1 p(1,1)=0,4
H(X) = 1,0 bits H(Y) = 1,0 bits
I(X;Y) = 0,278072 bits
Caso independiente (mismas marginales):
p(x,y) = p(x)·p(y) = 0,25 en las cuatro celdas
I(X;Y) = 0,0 ✓
Ventaja sobre la correlación:
con Y = X² y X simétrica, corr = 0 pero I > 0.
La información mutua ve la dependencia; la correlación no.Información mutua: cuánto reduce Y la incertidumbre de X.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | H(X), H(Y), I(X;Y), I_en_el_caso_independiente |
| Comprobaciones (2) | I=0_sii_independientes, I(X;Y)=H(X)-H(X|Y) |
compmath run 266Selección de características, aprendizaje autosupervisado contrastivo, análisis del cuello de botella de información y registro de imágenes médicas.
10.1002/047174882x verificado en Crossref (2026-08-19).10.48550/arxiv.1801.04062 verificado en DataCite (2026-08-19).Entre todas las distribuciones compatibles con lo que se sabe, elegir la que menos añade.
maximizar H(p) sujeto a las restricciones conocidas
sin restricciones ⟹ uniforme
media y varianza fijadas ⟹ normalEl principio de máxima entropía responde a una pregunta de modelado: si solo se conocen algunas propiedades de una distribución, ¿cuál elegir entre todas las compatibles? La respuesta es la de máxima entropía, porque es la que menos supuestos añade a lo que realmente se sabe.
Cualquier otra elección introduce estructura que los datos no respaldan. Elegir una distribución de entropía menor equivale a afirmar que se sabe más de lo que se sabe, y esa información inventada puede sesgar todas las conclusiones posteriores. Es el principio de honestidad epistémica traducido a matemáticas.
Las soluciones bajo distintas restricciones son notablemente reconocibles, y no por casualidad. Sin restricciones sale la uniforme. Fijando media y varianza sale la normal. Fijando solo la media en el semieje positivo sale la exponencial. Las distribuciones «naturales» de la estadística son las de máxima entropía bajo las restricciones más simples.
El resultado más relevante para la inteligencia artificial es que la distribución de máxima entropía sujeta a restricciones lineales tiene forma exponencial, y de ahí sale softmax. La capa de salida de todo clasificador es la distribución de máxima entropía compatible con los logits. Softmax no es una normalización conveniente: es la respuesta a un problema de optimización con restricciones.
Tres distribuciones sobre un dado y sus entropías.
candidata H (bits) media
uniforme 2,584963 3,5
sesgada al 6 2,160964 4,5
casi determinista 0,xxx 1,3
Máximo teórico para 6 símbolos: log₂ 6 = 2,584963 ✓
Sin restricciones, gana la uniforme.
Si se supiera que la media es 4,5, la uniforme dejaría de
ser admisible y la de máxima entropía sería una exponencial
truncada, no la sesgada arbitraria.
Con media y varianza fijadas sobre la recta real:
la distribución de máxima entropía es la normal.Principio de máxima entropía: la distribución menos comprometida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | entropia_maxima_teorica |
| Comprobaciones (1) | sin_restricciones_gana_la_uniforme |
compmath run 267Justificación de softmax, modelos de máxima entropía en procesamiento de lenguaje, elección de priores no informativos y física estadística.
10.1103/physrev.106.620 verificado en Crossref (2026-08-19).10.1002/047174882x verificado en Crossref (2026-08-19).Huffman da códigos cortos a lo frecuente y se acerca al límite de Shannon.
longitud media = Σ p(x)·len(código(x))
H(p) ≤ longitud media < H(p) + 1
código de prefijo: ninguno es prefijo de otroLa compresión sin pérdida explota que los símbolos no son equiprobables. Un código de longitud fija gasta ⌈log₂ n⌉ bits por símbolo sea cual sea su frecuencia; uno de longitud variable puede gastar menos en los frecuentes y más en los raros, reduciendo el promedio.
La condición para que eso funcione sin separadores es que sea un código de prefijo: ningún código puede ser el comienzo de otro. Así el decodificador sabe dónde termina cada símbolo sin marcadores adicionales. La construcción de Huffman garantiza esa propiedad por diseño, fusionando repetidamente los dos símbolos menos probables en un árbol binario.
Huffman es óptimo entre los códigos de prefijo de símbolo a símbolo, y su longitud media queda siempre a menos de un bit por encima de la entropía. Esa cota es ajustada: la pérdida viene de que las longitudes deben ser enteras, y las probabilidades rara vez son potencias de dos.
Para acercarse más al límite hay que codificar bloques de símbolos o abandonar la restricción de longitudes enteras, que es lo que hace la codificación aritmética. Los compresores modernos combinan modelado estadístico con codificación aritmética, y los modelos de lenguaje son, vistos desde aquí, modelos de compresión: minimizar la pérdida es minimizar los bits necesarios para transmitir el texto.
Código de Huffman para cinco símbolos con frecuencias dispares.
símbolo p código Huffman longitud
a 0,45 0 1
b 0,25 10 2
c 0,15 110 3
d 0,10 1111 4
e 0,05 1110 4
longitud media = 0,45·1 + 0,25·2 + 0,15·3 + 0,10·4 + 0,05·4
= 2,0 bits/símbolo
entropía = 1,977235 bits/símbolo
cota: 1,9772 ≤ 2,0 < 2,9772 ✓
longitud fija necesaria: ⌈log₂ 5⌉ = 3 bits
ahorro: 33,3 %
Prefijo: ningún código empieza por otro → decodificable.Código de Huffman frente a codificación de longitud fija.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | longitud_media_bits, entropia_bits, longitud_fija_necesaria, ahorro_vs_longitud_fija_% |
| Comprobaciones (2) | cumple_la_cota_de_Shannon, codigo_libre_de_prefijos |
compmath run 268Compresión de archivos y de imágenes, tokenización BPE, codificación de entropía en vídeo y evaluación de modelos de lenguaje por bits por carácter.
10.1109/jrproc.1952.273898 verificado en Crossref (2026-08-19).10.1002/047174882x verificado en Crossref (2026-08-19).Muestrear convierte una función continua en una lista de números con la que se puede calcular.
x(t) = A·sin(2πft + φ)
x[n] = x(n/fs), n = 0,1,…,N−1
duración = N / fsUna señal es una magnitud que varía con el tiempo o el espacio. En el mundo físico es continua: definida para todo instante y con precisión infinita. Un ordenador solo puede manejar señales discretas: una secuencia finita de números.
El paso de una a otra tiene dos etapas independientes. El muestreo discretiza el tiempo, tomando valores a intervalos regulares. La cuantización discretiza la amplitud, redondeando cada valor a un número finito de niveles. El muestreo tiene una teoría exacta —Nyquist—; la cuantización introduce un ruido que se caracteriza estadísticamente.
Tres parámetros describen una sinusoide y merecen distinguirse bien. La amplitud es la altura del pico, la frecuencia es cuántos ciclos ocurren por segundo, y la fase es el desplazamiento horizontal. La transformada de Fourier de la clase 273 devuelve amplitud y fase para cada frecuencia, y la fase es la parte que casi siempre se ignora al graficar y que resulta ser esencial para reconstruir la señal.
La frecuencia de muestreo es la decisión de diseño más importante y la que no se puede corregir después. Muestrear de más gasta memoria y cómputo; muestrear de menos destruye información de forma irreversible, y la clase siguiente explica por qué.
Una sinusoide muestreada durante un segundo.
señal: x(t) = 2,0 · sin(2π · 5,0 · t + 0,785398)
amplitud A = 2,0
frecuencia f = 5,0 Hz → 5 ciclos en 1 segundo
fase φ = 0,785398 rad = π/4 = 45°
muestreo:
fs = 100,0 Hz duración = 1,0 s
muestras = 100
muestras por ciclo: 100 / 5 = 20 holgado
Frecuencia de Nyquist: 100/2 = 50 Hz
La señal de 5 Hz está muy por debajo: sin aliasing.Señal continua muestreada: amplitud, frecuencia y fase.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (9) | frecuencia_de_muestreo_Hz, duracion_s, muestras, frecuencia_de_la_señal_Hz, amplitud, fase_rad, maximo_observado, energia, periodo_en_muestras |
| Comprobaciones (0) | — |
compmath run 269Audio digital, sensores e IoT, adquisición de datos biomédicos y preprocesamiento de series para modelos.
9780131988422 verificado en International ISBN Agency (2026-08-20).Por debajo de Nyquist la información se pierde y ningún procesamiento la recupera.
fs > 2·f_max (criterio de Nyquist)
frecuencia de Nyquist = fs / 2
f aparente = |f − k·fs| para el k que la lleve bajo fs/2El teorema de muestreo de Nyquist-Shannon establece que una señal cuyo contenido no supera f_max puede reconstruirse exactamente a partir de muestras tomadas a más de 2·f_max por segundo. Es un resultado sorprendentemente fuerte: no una aproximación, sino reconstrucción perfecta desde datos discretos.
Por debajo de ese umbral aparece el aliasing: las frecuencias altas se hacen pasar por bajas. Una señal de 11 Hz muestreada a 20 Hz produce exactamente las mismas muestras que una de 9 Hz, y ninguna operación posterior puede distinguirlas porque los datos son idénticos. La información no está degradada: está ausente.
El efecto es visible en la vida cotidiana. Las ruedas que parecen girar hacia atrás en el cine son aliasing temporal a 24 fotogramas por segundo. Los patrones de muaré en fotos de tejidos o pantallas son aliasing espacial. En todos los casos el sistema muestrea más lento que la frecuencia del patrón observado.
La única defensa es un filtro antialiasing analógico antes de muestrear, que elimine físicamente las frecuencias por encima de fs/2. Es imprescindible que sea antes: una vez tomadas las muestras, el daño está hecho. En redes convolucionales, hacer submuestreo sin suavizado previo produce exactamente el mismo problema, y es una de las causas conocidas de falta de invariancia a traslaciones.
Muestreo a 20 Hz de señales de distintas frecuencias.
fs = 20 Hz frecuencia de Nyquist = 10 Hz
señal ¿cumple Nyquist? frecuencia aparente
3 Hz sí 3 Hz
9 Hz sí 9 Hz
11 Hz no 9 Hz ← alias
19 Hz no 1 Hz ← alias
21 Hz no 1 Hz ← alias
11 Hz y 9 Hz producen muestras idénticas: son
indistinguibles a partir de los datos.
El aliasing es irreversible.
Solución: filtro paso-bajo analógico antes del conversor.Nyquist: muestrear por debajo del límite crea una señal falsa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | frecuencia_de_muestreo_Hz, frecuencia_de_nyquist_Hz |
| Comprobaciones (2) | 11Hz_se_ve_como_9Hz, el_aliasing_es_irreversible |
compmath run 270Diseño de sistemas de adquisición, audio y vídeo digital, submuestreo en redes convolucionales y remuestreo de series temporales.
10.1109/jrproc.1949.232969 verificado en Crossref (2026-08-19).10.48550/arxiv.1904.11486 verificado en DataCite (2026-08-19).Convolucionar es deslizar un núcleo y sumar productos: filtrar y detectar son lo mismo.
(f * g)[n] = Σₖ f[k]·g[n−k]
media móvil: núcleo [1/3, 1/3, 1/3]
detector de bordes: núcleo [−1, 0, 1]La convolución desliza un núcleo sobre una señal y en cada posición calcula una suma ponderada de los valores vecinos. Es la operación fundamental del procesamiento de señales y, desde 2012, la operación fundamental de la visión por computador.
Lo notable es cuánto cambia el comportamiento con el núcleo, siendo la operación idéntica. Un núcleo de valores iguales y positivos promedia y por tanto suaviza, eliminando ruido de alta frecuencia. Un núcleo antisimétrico como [−1, 0, 1] resta vecinos y por tanto detecta cambios: es una derivada discreta y responde a los bordes.
La diferencia entre convolución y correlación cruzada es que la primera invierte el núcleo antes de deslizarlo. Esa inversión importa en teoría de sistemas, donde garantiza propiedades como la conmutatividad. En aprendizaje profundo no importa: como el núcleo se aprende, aprender el invertido es equivalente, y por eso lo que las bibliotecas llaman convolución es técnicamente correlación cruzada.
La razón de que las CNN funcionen está en dos propiedades de la convolución. Los parámetros se comparten: el mismo núcleo se aplica en toda la señal, así que un detector de bordes aprendido sirve en cualquier posición. Y la conectividad es local: cada salida depende solo de un vecindario. Ambas cosas reducen drásticamente el número de parámetros e incorporan la invariancia a traslaciones como sesgo inductivo.
Dos núcleos sobre la misma señal triangular.
señal: [0, 1, 2, 3, 2, 1, 0]
núcleo media móvil [1/3, 1/3, 1/3]:
resultado: [1,0 ; 2,0 ; 2,333 ; 2,0 ; 1,0]
la señal se suaviza, los picos se rebajan
núcleo detector de bordes [−1, 0, 1]:
resultado: [−2, −2, 0, 2, 2]
responde donde la señal cambia, y cero en el pico
longitud de salida en modo válido: 7 − 3 + 1 = 5
Misma operación, comportamientos opuestos:
todo depende de los coeficientes del núcleo.Convolución discreta: el operador de las CNN.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | longitud_valida, longitud_completa |
| Comprobaciones (2) | es_conmutativa, en_frecuencia_es_multiplicacion |
compmath run 271Redes convolucionales, filtrado de imágenes, procesamiento de audio, suavizado de series y detección de patrones.
9780262337373 verificado en International ISBN Agency (2026-08-19).9780131988422 verificado en International ISBN Agency (2026-08-20).La correlación cruzada localiza dónde aparece un patrón dentro de una señal.
(f ⋆ g)[n] = Σₖ f[k]·g[n+k]
sin inversión del núcleo
el máximo indica la posición de mejor coincidenciaLa correlación cruzada mide el parecido entre una señal y un patrón desplazado. Es idéntica a la convolución salvo que no invierte el núcleo, y su interpretación es directa: en cada posición calcula el producto escalar entre el patrón y el trozo de señal que hay allí.
Ese producto escalar es exactamente la medida de alineación de la parte 05: grande cuando los vectores apuntan en la misma dirección. Por eso el máximo de la correlación indica dónde está el patrón, y su valor mide cuán buena es la coincidencia. Es la base del emparejamiento de plantillas.
Hay una precaución importante: la correlación sin normalizar favorece las zonas de mayor energía. Un tramo de señal con valores grandes puede dar más correlación que una coincidencia perfecta con valores pequeños. Por eso en la práctica se usa la correlación normalizada, que divide por las normas y es invariante a la escala.
La conexión con la inteligencia artificial actual es directa: el mecanismo de atención calcula productos escalares entre consultas y claves, los normaliza y los pasa por softmax. Es una correlación entre representaciones, con el mismo principio de que el producto escalar mide alineación. Reconocerlo hace mucho más legible la fórmula de la atención.
Localización de un patrón dentro de una señal más larga.
patrón buscado: [1, 2, 1]
señal: [0, 0, 1, 2, 1, 0, 0,5, 1, 0,5, 0]
correlación: [1,0 ; 4,0 ; 6,0 ; 4,0 ; 1,5 ; 2,0 ; 3,0 ; 2,0]
pico en la posición 2, con valor 6,0
Comprobación: en la posición 2 la señal vale [1,2,1],
exactamente el patrón. Producto escalar = 1+4+1 = 6. ✓
En la posición 6 hay el mismo patrón a mitad de escala:
correlación 3,0, la mitad. Sin normalizar, una copia
atenuada puntúa menos que la original.Correlación cruzada: convolución sin invertir el kernel.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | posicion_del_pico, valor_del_pico, coincidencia_exacta_en |
| Comprobaciones (1) | convolucion_invierte_el_kernel |
compmath run 272Emparejamiento de plantillas, sincronización de señales, radar y sonar, alineación de series y mecanismo de atención.
9780131988422 verificado en International ISBN Agency (2026-08-20).10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).Toda señal es una suma de sinusoides, y Fourier dice cuáles y con qué peso.
X[k] = Σₙ x[n]·e^(−2πikn/N)
magnitud = |X[k]|, fase = arg(X[k])
Parseval: Σ|x[n]|² = (1/N)·Σ|X[k]|²La transformada de Fourier descompone una señal en sinusoides de distintas frecuencias, cada una con su amplitud y su fase. Es un cambio de base en el sentido exacto de la parte 06: la señal no cambia, cambia el sistema de coordenadas desde el que se describe.
Ese cambio de perspectiva es útil porque muchas propiedades que están escondidas en el dominio del tiempo son evidentes en el de la frecuencia. Una señal que parece ruido puede revelar dos picos limpios; el ruido de red eléctrica aparece como una línea en 50 o 60 Hz; y un filtro que en el tiempo es una convolución compleja se convierte en una simple multiplicación.
El teorema de Parseval garantiza que la energía se conserva: la suma de los cuadrados en el tiempo es igual a la suma en frecuencia, salvo normalización. Comprobarlo numéricamente es la mejor prueba unitaria de una implementación de la transformada.
La fase es la parte que sistemáticamente se ignora. Casi todas las visualizaciones muestran solo la magnitud, pero la fase contiene la información sobre dónde ocurren las cosas. Un experimento clásico: intercambiar las magnitudes de dos imágenes conservando sus fases produce imágenes reconocibles como las originales de la fase. La estructura está en la fase.
Señal con dos componentes conocidas, analizada por Fourier.
64 muestras, señal construida con:
componente de 4 Hz con amplitud 3,0
componente de 9 Hz con amplitud 1,5
picos detectados: 4 Hz y 9 Hz ✓
magnitudes: 3,0 y 1,5 ✓
Parseval:
energía en el tiempo = 360,0
energía en frecuencia = 360,0 ✓
La transformada recuperó exactamente las amplitudes
y las frecuencias que se usaron para construir la señal.Descomponer una señal en senos y cosenos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | muestras, energia_en_el_tiempo, energia_en_frecuencia |
| Comprobaciones (2) | teorema_de_Parseval, cualquier_periodica_es_suma_de_senoidales |
compmath run 273Análisis de audio y vibraciones, compresión JPEG y MP3, filtrado en frecuencia y codificación posicional en Transformers.
9780131988422 verificado en International ISBN Agency (2026-08-20).9780073039381 verificado en International ISBN Agency (2026-08-20).La FFT da el mismo resultado que la DFT y convierte n² en n log n.
coste DFT: O(n²) coste FFT: O(n log n)
n = 10⁶: 10¹² frente a 2·10⁷ operaciones
teorema de convolución: f * g = IFFT(FFT(f)·FFT(g))La transformada discreta de Fourier calculada de forma directa necesita n² operaciones complejas. Para un millón de muestras eso son 10¹² operaciones: horas o días. La FFT obtiene exactamente el mismo resultado en O(n log n), unas 2·10⁷ operaciones: una fracción de segundo.
El algoritmo, publicado por Cooley y Tukey en 1965 —aunque Gauss ya lo conocía en 1805—, explota que la transformada de una señal se puede construir a partir de las transformadas de sus muestras pares e impares. Aplicar esa descomposición recursivamente da el logaritmo. Es un divide y vencerás de manual.
Su impacto es difícil de exagerar. La FFT es lo que hace posible el audio digital, las telecomunicaciones modernas, la resonancia magnética, el análisis sísmico y la multiplicación rápida de polinomios y de enteros grandes. Está en la lista habitual de algoritmos más influyentes del siglo XX.
El teorema de convolución convierte esa velocidad en una herramienta general: convolucionar en el tiempo es multiplicar en frecuencia, así que para núcleos grandes es más rápido transformar, multiplicar punto a punto y volver, que convolucionar directamente. El punto de cruce está alrededor de núcleos de 50 a 100 elementos, y por eso las CNN con núcleos de 3×3 no usan FFT.
FFT y DFT sobre la misma señal de 256 muestras.
256 muestras con componentes en 10 Hz y 40 Hz
picos detectados: [10, 40]
frecuencias reales: [10, 40] coinciden ✓
FFT y DFT dan resultados idénticos ✓
Coste:
DFT: 256² = 65 536 operaciones
FFT: 256 · log₂ 256 = 256 · 8 = 2 048 operaciones
ganancia: 32×
Para n = 10⁶ la ganancia sería de 50 000×:
la diferencia entre imposible y instantáneo.FFT frente a DFT: mismo resultado, coste muy distinto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | muestras, operaciones_DFT, operaciones_FFT, factor_de_ahorro |
| Comprobaciones (2) | coinciden, fft_y_dft_coinciden |
compmath run 274Procesamiento de audio en tiempo real, telecomunicaciones, imagen médica, convoluciones rápidas y multiplicación de enteros grandes.
10.1090/s0025-5718-1965-0178586-1 verificado en Crossref (2026-08-19).Filtrar es decidir qué frecuencias sobreviven, y una media móvil ya es un filtro.
media móvil de ventana k: núcleo de k valores 1/k
paso-bajo conserva bajas, paso-alto conserva altas
compromiso: más suavizado, menos detalleUn filtro atenúa unas frecuencias y deja pasar otras. Su descripción completa es la respuesta en frecuencia: qué factor aplica a cada componente. Diseñar un filtro es elegir esa curva y encontrar los coeficientes que la producen.
Los tipos básicos se nombran por lo que dejan pasar. Paso-bajo conserva las frecuencias bajas y elimina las altas, que es lo que se necesita para quitar ruido. Paso-alto hace lo contrario y sirve para eliminar tendencias o el nivel continuo. Paso-banda conserva una franja, y es lo que hace un ecualizador.
La media móvil es el filtro paso-bajo más simple, y ya ilustra el compromiso central: una ventana más ancha suaviza más ruido pero también borra más detalle real. No hay ajuste óptimo universal; depende de qué frecuencias son señal y cuáles son ruido en el problema concreto.
Hay una tensión inevitable entre el dominio del tiempo y el de la frecuencia. Un filtro con corte muy abrupto en frecuencia necesita una respuesta muy larga en el tiempo, lo que introduce retardo y oscilaciones en los bordes. Es una manifestación del principio de incertidumbre aplicado al análisis de señales, y explica por qué los filtros reales siempre son un compromiso.
Media móvil sobre una señal con ruido de alta frecuencia.
128 muestras, ventana del filtro = 7
RMSE antes del filtro: 0,282735
RMSE después: 0,066077
mejora: 76,6 %
El ruido de alta frecuencia se promedia a casi cero;
la señal de baja frecuencia sobrevive casi intacta.
Compromiso de la ventana:
ventana 3 → poco suavizado, poco retardo
ventana 7 → buen equilibrio aquí
ventana 31 → suaviza mucho, borra los picos reales
Una media móvil es un filtro FIR paso-bajo con
todos los coeficientes iguales.Filtro paso-bajo aplicado a una señal con ruido de alta frecuencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | muestras, ventana_del_filtro, RMSE_antes_del_filtro, RMSE_despues_del_filtro, mejora_% |
| Comprobaciones (0) | — |
compmath run 275Eliminación de ruido en sensores, ecualización de audio, suavizado de series financieras y preprocesamiento de señales biomédicas.
9780131988422 verificado en International ISBN Agency (2026-08-20).Casi todo el análisis clásico de series supone estacionariedad, y diferenciar la consigue.
estacionaria: media, varianza y autocovarianza constantes en el tiempo
diferenciación: y[t] = x[t] − x[t−1]
una diferencia elimina tendencia lineal; dos, cuadráticaUna serie es estacionaria cuando sus propiedades estadísticas no cambian con el tiempo: la media, la varianza y la relación entre valores separados por un retardo dado son las mismas al principio y al final. Intuitivamente, la serie no va a ninguna parte.
El supuesto importa porque casi toda la teoría clásica lo necesita. Ajustar un modelo ARMA, interpretar una autocorrelación o estimar un espectro presuponen que hay algo estable que estimar. Aplicar esas herramientas a una serie con tendencia produce resultados que parecen significativos y no lo son: la regresión espuria entre dos series con tendencia da correlaciones altísimas sin ninguna relación real.
El diagnóstico más simple es partir la serie en dos y comparar medias y varianzas. Si difieren claramente, hay no estacionariedad. Las pruebas formales —Dickey-Fuller aumentada, KPSS— formalizan ese contraste.
El remedio habitual es diferenciar: sustituir cada valor por su diferencia con el anterior. Una diferencia elimina una tendencia lineal, dos eliminan una cuadrática. Es la «I» de ARIMA. Para varianza no constante se aplica antes una transformación logarítmica o de Box-Cox. Diferenciar de más introduce estructura artificial, así que conviene quedarse con el mínimo necesario.
Tres series: estacionaria, con tendencia, y diferenciada.
serie estacionaria:
media 1ª mitad = 0,0574 varianza 1ª = 1,12
media 2ª mitad = 0,0223 varianza 2ª ≈ 1,10
estables → estacionaria ✓
serie con tendencia:
media 1ª mitad = 1,9728 varianza 1ª = 2,40
media 2ª mitad = 5,9658 varianza 2ª ≈ 2,45
la media se triplica → no estacionaria ✗
tras diferenciar la serie con tendencia:
media 1ª mitad = 0,0204 varianza 1ª = 2,05
media 2ª mitad = 0,0140 varianza 2ª ≈ 2,03
estable de nuevo ✓
Una sola diferencia bastó para una tendencia lineal.Serie estacionaria frente a serie con tendencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | diferenciar_elimina_la_tendencia_lineal |
compmath run 276Modelos ARIMA, predicción de demanda, análisis financiero y preprocesamiento de series para modelos de aprendizaje automático.
9781118619193 verificado en International ISBN Agency (2026-08-19).Un pico en la autocorrelación en el retardo k delata un periodo de k muestras.
ACF(k) = corr(x[t], x[t−k])
ACF(0) = 1 siempre
pico positivo en k ⟹ periodicidad de periodo kLa autocorrelación es la correlación de una serie consigo misma desplazada un retardo k. Responde a la pregunta de cuánto se parece la serie a su propio pasado, y su gráfico —el correlograma— es la herramienta de diagnóstico más informativa de las series temporales.
Su lectura es sistemática. En el retardo 0 vale siempre 1, porque toda serie es idéntica a sí misma. Un decaimiento rápido indica poca memoria. Un decaimiento lento indica tendencia o no estacionariedad. Y un pico en un retardo concreto indica periodicidad con ese periodo, que es lo que la hace tan útil.
La periodicidad detectada así puede ser invisible a simple vista. Con ruido fuerte, una señal periódica se pierde en el gráfico temporal, pero el ruido se descorrelaciona a cualquier retardo mientras que la componente periódica no. La autocorrelación separa una de otra sin necesidad de transformar al dominio de la frecuencia.
Es también el instrumento estándar para elegir el orden de un modelo autorregresivo, junto con la autocorrelación parcial, y para validarlo: si los residuos de un modelo ajustado conservan autocorrelación significativa, queda estructura sin explicar y el modelo es mejorable.
Serie con periodo 20 oculto bajo ruido.
200 muestras, periodo real = 20
retardo ACF
0 1,000000 siempre 1
5 0,014817 casi nula (cuarto de ciclo)
10 −0,879342 fuerte negativa (medio ciclo)
20 0,835547 fuerte positiva (ciclo completo)
Lectura:
pico positivo en 20 → periodo de 20 muestras ✓
pico negativo en 10 → medio periodo, en antifase ✓
nula en 5 → cuadratura, sin correlación ✓
El periodo se detecta sin haber transformado a frecuencia.Autocorrelación revela la periodicidad oculta.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | muestras, periodo_real, acf_lag_0, acf_lag_5, acf_lag_10, acf_lag_20, primer_pico_positivo_en_lag |
| Comprobaciones (2) | detecta_el_periodo, acf_en_lag_0_siempre_es_1 |
compmath run 277Detección de estacionalidad, selección de orden en modelos ARIMA, validación de residuos y análisis de señales biomédicas.
9783319524528 verificado en International ISBN Agency (2026-08-19).Analizar un trozo finito de señal esparce su energía a frecuencias vecinas.
ventana rectangular: cortar sin más
ventana de Hann: w[n] = 0,5·(1 − cos(2πn/N))
compromiso: menos fuga, peor resoluciónLa transformada de Fourier supone señales infinitas. En la práctica solo se dispone de un trozo, y cortarlo equivale a multiplicar la señal por una ventana rectangular. Esa multiplicación en el tiempo se convierte en convolución en frecuencia, y ahí está el problema.
El resultado es la fuga espectral: la energía de una componente se dispersa hacia las frecuencias vecinas. El efecto es máximo cuando la frecuencia real no cae exactamente en uno de los bins del análisis, porque entonces el corte introduce discontinuidades en los extremos que la transformada interpreta como contenido de alta frecuencia.
Las ventanas suaves —Hann, Hamming, Blackman— multiplican la señal por una función que decae a cero en los bordes, eliminando la discontinuidad. La fuga se reduce sustancialmente, y el pico principal queda mucho más limpio.
El precio es la resolución. Suavizar los bordes ensancha el pico principal, así que dos frecuencias muy próximas pueden dejar de distinguirse. La elección de ventana es un compromiso entre resolución —distinguir frecuencias cercanas— y rango dinámico —ver componentes débiles junto a fuertes—. Hann es el compromiso razonable por defecto.
Señal de 8,5 Hz analizada con 64 muestras: el peor caso.
frecuencia real: 8,5 Hz, justo entre dos bins
ventana rectangular:
pico detectado en el bin 8
fuga espectral: 50,02 %
ventana de Hann:
pico detectado en el bin 9
fuga espectral: 12,45 %
La fuga se reduce a la cuarta parte.
Ninguna de las dos acierta exactamente 8,5:
la resolución del análisis es de 1 bin, y la frecuencia
real cae en medio. Para resolverla haría falta
más duración de señal, no más muestras por segundo.Ventaneo: el precio de analizar un trozo finito de señal.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | muestras, frecuencia_real, pico_con_ventana_rectangular, pico_con_ventana_de_Hann, fuga_espectral_rectangular_%, fuga_espectral_hann_% |
| Comprobaciones (1) | hann_reduce_la_fuga |
compmath run 278Espectrogramas de audio, análisis de vibraciones, detección de tonos y preprocesamiento para modelos de reconocimiento de voz.
10.1109/proc.1978.10837 verificado en Crossref (2026-08-19).9780131988422 verificado en International ISBN Agency (2026-08-20).La potencia va con el cuadrado de la amplitud: doble amplitud es cuádruple potencia.
PSD[k] = |X[k]|² / N
potencia relativa = PSD[k] / Σ PSD
amplitud ×2 ⟹ potencia ×4La densidad espectral de potencia describe cómo se reparte la energía de una señal entre sus frecuencias. Se obtiene del cuadrado de la magnitud de la transformada, y a diferencia del espectro de amplitud descarta la fase, quedándose solo con cuánta energía hay en cada banda.
La relación cuadrática entre amplitud y potencia tiene consecuencias que sorprenden al leer un espectro. Una componente con el doble de amplitud aporta cuatro veces más potencia, y por tanto domina el reparto mucho más de lo que sugiere el espectro de amplitud. Las componentes pequeñas quedan aplastadas, y por eso la PSD suele graficarse en decibelios, que es escala logarítmica.
La PSD es la herramienta habitual para caracterizar ruido y para diagnosticar sistemas. El ruido blanco tiene potencia uniforme en todas las frecuencias, el ruido rosa decae como 1/f, y muchos procesos naturales exhiben ese comportamiento. Comparar la PSD medida con la esperada revela componentes anómalas: un pico a 50 Hz delata acoplamiento con la red eléctrica.
En aprendizaje automático, la PSD por bandas es un descriptor clásico. En señales biomédicas las bandas alfa, beta y theta del EEG se definen así; en audio, el reparto de potencia por bandas es la base de los coeficientes MFCC que alimentaron el reconocimiento de voz durante décadas.
Dos componentes con amplitudes 2 y 1, y su reparto de potencia.
128 muestras
componente de 5 Hz con amplitud 2,0
componente de 20 Hz con amplitud 1,0
bins dominantes: [5, 20] ✓
potencia relativa 5 Hz: 80,0 %
potencia relativa 20 Hz: 20,0 %
razón de potencias: 4,0
Las amplitudes están en razón 2:1
Las potencias están en razón 4:1 ✓
Aunque la segunda componente tiene la mitad de amplitud,
solo aporta la cuarta parte de la energía.Densidad espectral de potencia y reparto de la energía.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | muestras, potencia_relativa_5Hz_%, potencia_relativa_20Hz_%, razon_de_potencias, razon_teorica_amplitudes², energia_total_tiempo, energia_total_frecuencia |
| Comprobaciones (0) | — |
compmath run 279Caracterización de ruido, análisis de EEG por bandas, MFCC en reconocimiento de voz y diagnóstico de maquinaria por vibraciones.
9780131988422 verificado en International ISBN Agency (2026-08-20).10.1109/tau.1967.1161901 verificado en Crossref (2026-08-19).Un vector de características resume la señal en números que un modelo puede usar.
temporales: media, varianza, RMS, cruces por cero
espectrales: frecuencia dominante, centroide, entropía espectral
centroide = Σ f·P(f) / Σ P(f)Alimentar un modelo con una señal cruda de miles de muestras rara vez es la mejor opción: la dimensión es enorme, la información está diluida y el modelo tiene que aprender de cero lo que el procesamiento de señales ya sabe. La extracción de características condensa la señal en pocos números interpretables.
Las características temporales son baratas y describen la forma de la onda. La media detecta desplazamientos del nivel base, la varianza y el RMS miden la energía, y los cruces por cero son un estimador rudimentario pero muy usado del contenido de frecuencia: cuantos más cruces, más rápida es la señal.
Las características espectrales describen el contenido de frecuencia. La frecuencia dominante identifica la componente principal; el centroide espectral es la frecuencia media ponderada por potencia y se corresponde con la percepción de brillo en audio; la entropía espectral distingue una señal tonal —energía concentrada, entropía baja— de una ruidosa —energía repartida, entropía alta—. Esa última reutiliza la entropía de la clase 262 aplicada al espectro normalizado.
La disyuntiva frente al aprendizaje profundo es real y no tiene respuesta única. Las características diseñadas a mano son interpretables, baratas y funcionan con pocos datos; las aprendidas por una red superan a las manuales cuando hay datos abundantes. En la práctica se combinan, y entender las manuales sigue siendo necesario para diagnosticar qué está capturando el modelo.
Vector de características extraído de una señal de 256 muestras.
256 muestras a 256 Hz, componentes reales en 7 Hz y 23 Hz
características temporales:
media = −0,000308
varianza = 1,316705
RMS = 1,147478
cruces por cero = (proporcional al contenido rápido)
características espectrales:
frecuencia dominante = 7 Hz ✓ correcta
centroide espectral = 10,287014
entropía espectral = (concentración de la energía)
El centroide cae entre 7 y 23, más cerca de 7 porque
esa componente aporta más potencia.
De 256 números a un vector de 7: eso es lo que
recibe el modelo.Capstone: de una señal cruda a un vector de características.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | muestras, frecuencia_de_muestreo_Hz, vector_de_features |
| Comprobaciones (1) | dominante_detectada_correctamente |
compmath run 280Clasificación de audio, reconocimiento de actividad con acelerómetros, diagnóstico de maquinaria, análisis de EEG y detección de anomalías en sensores.
9780131988422 verificado en International ISBN Agency (2026-08-20).Derivación matemática de los algoritmos clásicos: regresión, regularización, clasificación, kernels, árboles, ensambles, clustering, EM y compromiso sesgo-varianza.
Los algoritmos clásicos de aprendizaje automático se suelen presentar como una colección de recetas con nombres propios. No lo son. Cada uno es una función objetivo más un método de optimización, y una vez visto así el catálogo deja de ser una lista que memorizar y pasa a ser un conjunto de decisiones de diseño comparables entre sí. Esta parte deriva esos algoritmos desde sus objetivos, usando exactamente la matemática de las partes anteriores.
Las clases 281 a 284 empiezan por la regresión y su regularización. Regresión lineal es mínimos cuadrados, que ya se resolvió en la parte 05 como proyección y en la parte 11 como problema numérico. Ridge y Lasso resuelven el mismo problema con normas distintas, y la diferencia no es cosmética: la bola L2 es redonda y encoge todos los coeficientes sin anularlos; la bola L1 tiene vértices sobre los ejes y por eso el óptimo cae en ellos, produciendo ceros exactos. Esa geometría explica por qué Lasso selecciona variables y Ridge no, y es una de las conexiones más limpias entre álgebra y estadística de todo el programa.
Las clases 285 a 290 tratan la clasificación. La regresión logística se deriva de la log-verosimilitud, y su gradiente resulta ser (p − y)·x: idéntico en forma al de la regresión lineal, que es lo que permite tratar ambos casos con el mismo código. La entropía cruzada penaliza sin cota la confianza equivocada, a diferencia del error cuadrático, y eso es exactamente lo que se quiere. Naive Bayes declara un supuesto de independencia que casi siempre es falso y funciona igual, porque la decisión solo necesita el orden de las probabilidades y no su valor. k-NN no tiene entrenamiento pero depende críticamente de la métrica y del escalado. Y SVM introduce el margen máximo y el kernel trick: calcular productos escalares en un espacio de dimensión enorme sin construirlo jamás.
Las clases 291 a 293 recorren los métodos basados en árboles, que siguen siendo el estado del arte en datos tabulares. Un árbol elige cortes minimizando impureza; el bagging promedia modelos decorrelacionados y reduce la varianza según una fórmula explícita que muestra por qué la decorrelación importa más que el número de árboles; y el boosting es descenso de gradiente en el espacio de funciones, donde cada modelo nuevo corrige el residuo del conjunto anterior.
Las clases 294 a 297 pasan al aprendizaje no supervisado. k-means es minimización de inercia con asignación dura; las mezclas de gaussianas la hacen blanda y probabilística; y EM es el algoritmo general que las entrena, alternando expectativa y maximización con la garantía de que la verosimilitud nunca baja. PCA cierra el bloque como preprocesamiento y como aplicación directa de la SVD de la parte 06.
Las dos últimas clases antes del capstone son las que más determinan si un proyecto real funciona. La descomposición sesgo-varianza explica por qué un modelo más complejo no es mejor, y se mide aquí por simulación en vez de enunciarse. Y el leakage es el error que produce métricas excelentes y modelos inútiles: la demostración usa datos donde X e y no guardan ninguna relación y aun así se obtiene un 70 % de acierto si se evalúa mal. Ese 70 % sobre ruido puro es la advertencia más útil de la parte.
Estos algoritmos siguen siendo la línea base honesta contra la que se debe comparar cualquier modelo profundo.
| Término | Definición | Clase |
|---|---|---|
| Algoritmo de Lloyd | Alternar asignación de puntos y recálculo de centroides hasta converger. | 294 |
| Algoritmo EM | Alternar expectativa de las latentes y maximización de los parámetros. La verosimilitud nunca baja. | 296 |
| Aprendiz débil | Modelo apenas mejor que el azar. Un tocón de decisión es el ejemplo típico. | 293 |
| Aprendizaje supervisado | Aprender una función de entrada a salida a partir de pares etiquetados. | 281 |
| Bagging | Entrenar modelos sobre remuestras bootstrap y promediar. Reduce la varianza. | 292 |
| Boosting | Añadir modelos secuencialmente, cada uno ajustando el residuo del conjunto anterior. | 293 |
| Calibración | Grado en que las probabilidades predichas coinciden con las frecuencias observadas. | 286 |
| Decorrelación | Hacer que los modelos del ensemble se equivoquen de formas distintas. Es lo que da la ganancia. | 292 |
| Dirección discriminante | Dirección que mejor separa los centroides de las clases. | 281 |
| Dispersión | Solución con muchos coeficientes nulos. Equivale a selección automática de variables. | 284 |
| Ecuación normal | w = (XᵀX)⁻¹Xᵀy. Solución cerrada de la regresión lineal. | 282 |
| Error irreducible | Ruido de los datos que ningún modelo puede eliminar. | 298 |
| Frontera de decisión | Superficie que separa las regiones asignadas a cada clase. | 281 |
| Función kernel | K(a,b) que equivale a φ(a)ᵀφ(b) para alguna transformación φ. | 290 |
| Función sigmoide | σ(z) = 1/(1+e⁻ᶻ). Convierte un número real en una probabilidad. | 285 |
| Ganancia de información | Reducción de impureza que produce un corte. Criterio de división del árbol. | 291 |
| Impureza | Medida de mezcla de clases en un nodo. Entropía y Gini son las habituales. | 291 |
| Independencia condicional | P(x₁,x₂|c) = P(x₁|c)·P(x₂|c). Supuesto falso en la práctica y útil igualmente. | 287 |
| Inercia | Suma de distancias al cuadrado de cada punto a su centroide. Objetivo de k-means. | 294 |
| k-Nearest Neighbors | Clasificar por mayoría entre los k vecinos más cercanos. Sin entrenamiento. | 288 |
| Kernel trick | Calcular productos escalares en un espacio expandido sin construirlo explícitamente. | 290 |
| Lasso | Regresión con penalización L1. Produce coeficientes exactamente cero. | 284 |
| Leakage | Información del test que se filtra al entrenamiento. Produce métricas excelentes y modelos inútiles. | 299 |
| Logit | Logaritmo de la razón de probabilidades. Es la inversa de la sigmoide. | 285 |
| Maldición de la dimensionalidad | En dimensión alta todas las distancias se parecen y el concepto de vecino pierde sentido. | 288 |
| Margen | Distancia entre la frontera y los puntos más cercanos. SVM lo maximiza. | 289 |
| Mezcla de gaussianas | Modelo generativo con varias componentes normales y asignación blanda. | 295 |
| Mínimos cuadrados ordinarios | Minimizar la suma de residuos al cuadrado. Tiene solución cerrada. | 282 |
| Naive Bayes | Clasificador que supone independencia condicional de las variables dada la clase. | 287 |
| Pérdida logarítmica | Entropía cruzada aplicada a clasificación. Penaliza sin cota la confianza equivocada. | 286 |
| Responsabilidad | Probabilidad de que una componente haya generado un punto concreto. | 295 |
| Ridge | Regresión con penalización L2. Encoge los coeficientes y estabiliza el mal condicionamiento. | 283 |
| Sesgo del modelo | Error por suponer una forma demasiado simple. Un modelo rígido tiene sesgo alto. | 298 |
| Validación cruzada anidada | Bucle interno para elegir hiperparámetros y externo para estimar el rendimiento. | 299 |
| Variable latente | Variable no observada que explica la estructura de los datos. | 296 |
| Varianza del modelo | Sensibilidad de la predicción a la muestra concreta de entrenamiento. | 298 |
| Varianza explicada | Fracción de la varianza total que capturan las componentes retenidas. | 297 |
| Vector de soporte | Punto que toca el margen y determina la frontera. Los demás no influyen. | 289 |
Aprender de forma supervisada es encontrar una frontera en el espacio de características.
cada observación es un punto de ℝᵈ
dirección discriminante ∝ μ₁ − μ₀
frontera lineal: wᵀx + b = 0Todo conjunto de datos supervisado admite la misma lectura geométrica: cada observación es un punto en un espacio de tantas dimensiones como características, y la etiqueta es un color. Aprender es encontrar una superficie que separe los colores, o una función que los prediga.
Esa visión unifica algoritmos que parecen ajenos entre sí. Regresión logística busca un hiperplano; SVM busca el hiperplano de margen máximo; k-NN construye una frontera irregular a partir de los vecinos; un árbol construye una frontera de escalones paralelos a los ejes; y una red neuronal construye una frontera curva arbitraria. Todos resuelven el mismo problema geométrico con distintas restricciones sobre la forma de la frontera.
El punto de partida más simple es el clasificador por centroides: calcular la media de cada clase y asignar cada punto al centroide más cercano. La frontera resultante es el hiperplano perpendicular al segmento que une los centroides, y la dirección de ese segmento es la dirección discriminante. Es lo mínimo que se puede hacer, y sirve de línea base honesta.
Lo que hace difícil el problema en la práctica no es la forma de la frontera sino la dimensión. Con dos características se puede dibujar y la intuición funciona; con quinientas, todas las distancias se parecen, el volumen se concentra en los bordes, y la intuición geométrica de dos dimensiones deja de ser fiable. Esa es la maldición de la dimensionalidad, que reaparece en la clase 288.
Dos clases separables y su dirección discriminante.
80 observaciones en 2 dimensiones
centroide clase 1: ( 2,1592 ; 1,8087)
centroide clase 0: (−1,1503 ; −1,0020)
diferencia = (3,3095 ; 2,8107)
distancia entre centroides = 4,342
dirección discriminante normalizada:
(0,7622 ; 0,6473)
La frontera del clasificador por centroides es el
hiperplano perpendicular a esa dirección, situado
en el punto medio: (0,5045 ; 0,4034).
Es la línea base contra la que comparar todo lo demás.Aprendizaje supervisado como búsqueda de una frontera en el espacio.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | observaciones, dimension, distancia_entre_centroides, accuracy_del_clasificador_de_centroides |
| Comprobaciones (0) | — |
compmath run 281Comprensión unificada de clasificadores, análisis discriminante lineal, diagnóstico visual de separabilidad y elección de la familia de modelos.
9780387848570 verificado en International ISBN Agency (2026-08-19).Regresión lineal tiene solución cerrada, y el descenso de gradiente llega al mismo sitio.
ŷ = Xw; J(w) = ‖Xw − y‖²
solución cerrada: w = (XᵀX)⁻¹Xᵀy
gradiente: ∇J = 2Xᵀ(Xw − y)La regresión lineal minimiza la suma de residuos al cuadrado. Es el algoritmo más antiguo del catálogo —Gauss y Legendre, principios del siglo XIX— y sigue siendo la línea base obligada porque es interpretable, rápido y difícil de superar cuando la relación es realmente lineal.
Tiene la propiedad rara de admitir solución cerrada. Anular el gradiente da las ecuaciones normales, y su solución es la fórmula de la proyección de la parte 05. Casi ningún otro modelo permite eso: la regresión logística, sin ir más lejos, ya requiere iterar.
Aun así, en la práctica se usa el descenso de gradiente cuando hay muchas observaciones o muchas características, porque invertir XᵀX cuesta O(d³) y la matriz puede estar mal condicionada. Que ambos caminos converjan al mismo punto es la comprobación numérica que valida las dos implementaciones a la vez.
Elegir el error cuadrático no es arbitrario: equivale a suponer ruido gaussiano y maximizar la verosimilitud, como se vio en la clase 215. Sus consecuencias son conocidas: penaliza los errores grandes de forma desproporcionada y por tanto es muy sensible a valores atípicos. Si esa sensibilidad molesta, la respuesta correcta es cambiar el modelo de ruido —pérdida de Huber, regresión cuantílica— y no parchear el algoritmo.
Sesenta observaciones, tres características, dos métodos.
parámetros reales: [2,0 ; 1,5 ; −0,4]
solución cerrada: [2,032145 ; 1,488677 ; −0,353039]
descenso de gradiente: [2,031712 ; 1,489061 ; −0,353651]
coinciden a 3 decimales ✓
MSE de la solución cerrada: 0,0757
La diferencia con los parámetros reales viene del ruido
de las 60 observaciones, no del método.
Coste: cerrada O(d³) por la inversión;
gradiente O(n·d) por iteración.Regresión lineal: solución cerrada y descenso de gradiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | observaciones, features, MSE_cerrada, MSE_gradiente |
| Comprobaciones (1) | coinciden |
compmath run 282Línea base en cualquier problema de regresión, análisis de tendencias, calibración de instrumentos y capa final de muchos modelos.
9780387848570 verificado en International ISBN Agency (2026-08-19).Ridge encoge los coeficientes y con ello arregla el mal condicionamiento.
J(w) = ‖Xw − y‖² + λ‖w‖²
solución: w = (XᵀX + λI)⁻¹Xᵀy
sumar λI mejora el número de condiciónRidge añade a la regresión una penalización proporcional a la suma de los cuadrados de los coeficientes. El efecto es encoger todos los coeficientes hacia cero, con más intensidad cuanto mayor sea λ, sin anular ninguno.
La solución cerrada revela algo elegante: el término de regularización aparece como λI sumado a XᵀX. Eso desplaza todos los autovalores hacia arriba en λ, lo que mejora el número de condición y garantiza que la matriz sea invertible aunque XᵀX fuera singular. Ridge resuelve un problema numérico y un problema estadístico con la misma operación.
El problema estadístico es la colinealidad. Cuando dos características están muy correlacionadas, sus coeficientes individuales quedan mal determinados: pueden compensarse con valores enormes y de signo opuesto sin que el ajuste empeore. Ridge penaliza esa magnitud y reparte el peso entre ambas de forma estable.
Dos precauciones que importan. Primera: hay que estandarizar antes, porque la penalización depende de la escala y una característica medida en milímetros recibiría un trato distinto que la misma en metros. Segunda: el término independiente no se regulariza, porque encogerlo no tiene sentido —solo desplaza el nivel— y sesgaría las predicciones.
Efecto de λ sobre coeficientes, error y condicionamiento.
λ pesos ‖w‖₂
0,0 [2,032145 ; 1,488677 ; −0,353039] 2,5437
0,1 [2,022454 ; 1,490112 ; −0,351255] 2,5366
1,0 [1,944037 ; 1,497998 ; −0,328931] 2,4762
10,0 [1,473261 ; 1,486815 ; −0,080571] 2,0947
Ningún coeficiente llega a ser exactamente cero.
Número de condición:
sin regularizar: 364,65
con λ = 1: 258,72
La regularización estabiliza el problema numérico
además de controlar el sobreajuste.Ridge: L2 encoge los coeficientes y estabiliza el mal condicionamiento.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | condicion_sin_regularizar, condicion_con_λ=1 |
| Comprobaciones (1) | ridge_nunca_anula_coeficientes |
compmath run 283Regresión con características correlacionadas, weight decay en redes, estabilización de problemas mal condicionados y regularización por defecto.
10.1080/00401706.1970.10488634 verificado en Crossref (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).La bola L1 tiene vértices sobre los ejes, y por eso Lasso produce ceros exactos.
J(w) = ‖Xw − y‖² + λ‖w‖₁
sin solución cerrada: descenso por coordenadas o subgradiente
λ mayor ⟹ más coeficientes exactamente ceroLasso penaliza la suma de valores absolutos en vez de la de cuadrados. El cambio parece menor y produce un comportamiento cualitativamente distinto: los coeficientes no solo se encogen, sino que llegan a valer exactamente cero, lo que convierte a Lasso en un selector automático de variables.
La explicación es geométrica y merece verse. La restricción ‖w‖₂ ≤ t es una bola redonda; la restricción ‖w‖₁ ≤ t es un rombo con vértices sobre los ejes. La solución es el punto donde las curvas de nivel del error tocan por primera vez la región admisible, y una curva de nivel elíptica toca un rombo con muchísima más probabilidad en un vértice que en una arista. Un vértice del rombo tiene coordenadas nulas.
El precio es que el valor absoluto no es derivable en cero, así que no hay solución cerrada y hay que recurrir al descenso por coordenadas o a métodos de subgradiente. Es un coste computacional asumible y ampliamente resuelto en las bibliotecas.
La elección entre Ridge y Lasso depende de lo que se crea del problema. Si se sospecha que solo unas pocas variables importan, Lasso las encuentra. Si se cree que todas contribuyen un poco, Ridge es mejor. Con variables muy correlacionadas Lasso elige una arbitrariamente y descarta el resto, lo que puede ser inestable, y por eso existe elastic net, que combina ambas penalizaciones.
Cuatro valores de λ y el número de ceros exactos.
λ pesos ceros
0,00 [2,031169 ; 1,489542 ; −0,354419] 0
0,05 [2,155953 ; 1,300580 ; −0,006201] 0
0,30 [1,795790 ; 1,377911 ; 0,000000] 1
1,00 [0,774479 ; 1,605474 ; 0,000000] 1
Con λ = 0,30 el tercer coeficiente es exactamente 0,
no un número pequeño: la variable queda eliminada.
Ridge con el mismo λ dejaría −0,0806: pequeño pero no nulo.
Geometría: la bola L1 tiene vértices en los ejes,
y el óptimo cae sobre ellos con alta probabilidad.Lasso: L1 produce ceros exactos gracias a su geometría.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | L2_produce_ceros, L1_selecciona_features |
compmath run 284Selección automática de variables, modelos dispersos, compressed sensing y análisis con muchas más características que observaciones.
10.1111/j.2517-6161.1996.tb02080.x verificado en Crossref (2026-08-19).10.1111/j.1467-9868.2005.00503.x verificado en Crossref (2026-08-19).El gradiente de la regresión logística es (p − y)·x, idéntico en forma al de la lineal.
σ(z) = 1/(1 + e⁻ᶻ)
P(y=1|x) = σ(wᵀx + b)
∇ = (σ(wᵀx) − y)·xLa regresión logística resuelve el problema de que una salida lineal puede valer cualquier número real mientras que una probabilidad debe estar entre 0 y 1. La sigmoide hace esa conversión de forma suave y monótona, y su inversa —el logit— tiene una interpretación limpia: el logaritmo de la razón de probabilidades es lineal en las características.
Los parámetros se estiman por máxima verosimilitud. Bajo un modelo Bernoulli, la log-verosimilitud negativa es exactamente la entropía cruzada de la clase 263, así que la pérdida no se elige: se deduce del modelo probabilístico. A diferencia de la regresión lineal, no hay solución cerrada y hay que iterar.
El resultado más útil de la derivación es la forma del gradiente: (p − y)·x, donde p es la probabilidad predicha. Es idéntico en forma al de la regresión lineal con error cuadrático, sustituyendo la predicción por la probabilidad. Esa coincidencia no es casualidad —ambos son modelos lineales generalizados— y permite implementar los dos casos con el mismo bucle.
Pese al nombre, es un clasificador y no un regresor. Y pese a su simplicidad sigue siendo una línea base extraordinariamente competitiva: es interpretable, entrena en segundos, da probabilidades bien calibradas y en muchos problemas tabulares queda a pocos puntos del mejor modelo complejo. Empezar por otra cosa suele ser un error.
Ochenta observaciones separables en dos dimensiones.
pesos aprendidos: [−3,354299 ; 4,597644 ; 5,088564]
(sesgo, w₁, w₂)
accuracy = 1,0
log loss = 0,006853
σ(0) = 0,5 → la frontera está en wᵀx + b = 0
Gradiente: (σ(wᵀx) − y)·x
si p = 0,99 y y = 1 → factor 0,01, corrección mínima
si p = 0,01 y y = 1 → factor −0,99, corrección máxima
La misma forma que el gradiente de la regresión lineal,
con p en lugar de ŷ.Regresión logística derivada desde la log-verosimilitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | observaciones, accuracy, log_loss, sigmoid(0) |
| Comprobaciones (1) | modelo_lineal_en_el_log_odds |
compmath run 285Clasificación binaria, scoring crediticio, línea base en cualquier problema tabular y capa de salida de redes neuronales.
9780387848570 verificado en International ISBN Agency (2026-08-19).Estar seguro y equivocado cuesta sin límite con entropía cruzada, y poco con error cuadrático.
CE = −log p(clase correcta)
MSE = (p − y)² ≤ 1 siempre
CE → ∞ cuando p → 0Comparar entropía cruzada con error cuadrático en clasificación revela por qué la primera es la elección correcta, y la razón es cuantitativa antes que teórica: cómo penalizan la confianza equivocada.
El error cuadrático está acotado. Con probabilidades entre 0 y 1, el error máximo posible es 1, así que un modelo completamente seguro y completamente equivocado recibe una penalización finita y modesta. La entropía cruzada, en cambio, crece sin límite: si la probabilidad asignada a la respuesta correcta tiende a cero, la pérdida tiende a infinito.
Ese comportamiento es exactamente el deseable. Un modelo que dice «99 % seguro» y falla merece un castigo mucho mayor que uno que dice «55 % seguro» y falla, porque la afirmación era mucho más fuerte. La entropía cruzada codifica esa asimetría y el error cuadrático la aplana.
Hay además una razón de optimización. Con sigmoide y error cuadrático, el gradiente contiene la derivada de la sigmoide, que se satura y se hace casi nula cuando la predicción es extrema: el modelo equivocado y seguro deja de aprender. Con entropía cruzada esa derivada se cancela algebraicamente y el gradiente queda (p − y), proporcional al error. La elección de pérdida arregla un problema de gradientes, no solo de interpretación.
Cuatro situaciones, dos funciones de pérdida.
caso p predicha CE MSE
correcto y seguro 0,99 0,01005 0,0001
correcto y dudoso 0,55 0,59784 0,2025
incorrecto y dudoso 0,45 0,79851 0,2025
incorrecto y seguro 0,01 4,60517 0,9801
Razón entre incorrecto-seguro e incorrecto-dudoso:
entropía cruzada: 5,77×
error cuadrático: 3,24×
La entropía cruzada castiga mucho más la seguridad
equivocada, que es exactamente lo que se busca.
Y su gradiente no se satura: (p − y), sin factor σ'.Cross-entropy penaliza la confianza equivocada de forma no acotada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | razon_CE_seguro_vs_dudoso, razon_MSE_seguro_vs_dudoso |
| Comprobaciones (1) | CE_castiga_mucho_mas |
compmath run 286Función de pérdida de todo clasificador, calibración de modelos, entrenamiento de modelos de lenguaje y evaluación probabilística.
9780262337373 verificado en International ISBN Agency (2026-08-19).Naive Bayes supone algo falso y clasifica bien, porque solo necesita el orden.
P(c|x) ∝ P(c)·Π P(xᵢ|c)
supuesto: independencia condicional dada la clase
se trabaja en logaritmos para evitar subdesbordamientoNaive Bayes aplica el teorema de Bayes de la clase 186 a la clasificación, y para hacer el cálculo tratable supone que las características son independientes dada la clase. Ese supuesto permite factorizar la verosimilitud conjunta en un producto de términos unidimensionales, que sí se pueden estimar con pocos datos.
El supuesto casi nunca es cierto. En un texto, la aparición de una palabra está claramente correlacionada con la de otras; en datos médicos, los síntomas se agrupan. Y sin embargo el clasificador funciona sorprendentemente bien, hecho comprobado durante décadas en filtrado de spam.
La explicación es que la clasificación solo necesita el orden, no el valor. Aunque las probabilidades estimadas estén mal calibradas —y con el supuesto ingenuo lo están, tienden a valores extremos—, la clase con mayor probabilidad suele seguir siendo la correcta. Naive Bayes es mal estimador de probabilidad y buen clasificador, y conviene no usarlo cuando lo que se necesita es el valor de la probabilidad.
Dos detalles de implementación son obligatorios. Trabajar en logaritmos, porque multiplicar cientos de densidades produce subdesbordamiento a cero. Y aplicar suavizado de Laplace, sumando un pseudo-conteo, para que una categoría nunca vista no anule toda la probabilidad de la clase con un cero multiplicativo.
Naive Bayes gaussiano sobre dos clases y dos características.
clase 0: prior 0,5 medias (−1,1503 ; −1,0020)
varianzas (0,5396 ; …)
clase 1: prior 0,5 medias ( 2,1592 ; 1,8087)
accuracy = 1,0
Supuesto: P(x₁,x₂|c) = P(x₁|c)·P(x₂|c)
Aquí se cumple aproximadamente porque las características
se generaron independientes.
Cálculo en logaritmos:
log P(c|x) = log P(c) + Σ log P(xᵢ|c) + constante
Sin logaritmos, con 100 características el producto
sería del orden de 1e-200 y se redondearía a cero.Naive Bayes gaussiano: independencia condicional como supuesto explícito.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | accuracy |
| Comprobaciones (0) | — |
compmath run 287Filtrado de spam, clasificación de texto, diagnóstico rápido con muchas variables y línea base con pocos datos.
9780387848570 verificado en International ISBN Agency (2026-08-19).10.1023/a:1007413511361 verificado en Crossref (2026-08-19).k-NN no entrena nada, y por eso la métrica y el escalado lo deciden todo.
predicción = mayoría entre los k vecinos más cercanos
distancia euclídea: √Σ(aᵢ − bᵢ)²
sin escalar, la característica de mayor rango dominak-NN es el algoritmo más simple posible: guardar todos los datos y, ante una consulta, buscar los k puntos más parecidos y votar. No hay entrenamiento, no hay parámetros aprendidos, y toda la complejidad se traslada al momento de la predicción.
Como la única operación es medir distancias, la elección de la métrica es el modelo. Y la consecuencia más importante es que hay que estandarizar: si una característica va de 0 a 1 y otra de 0 a 10 000, la segunda domina completamente la distancia y la primera se vuelve irrelevante. No es un ajuste opcional; sin estandarizar se está usando una métrica arbitraria dictada por las unidades de medida.
El parámetro k controla el compromiso sesgo-varianza de forma muy visible. Con k = 1 la frontera es irregular y se ajusta a cada punto, incluido el ruido: varianza alta. Con k grande la frontera se suaviza y puede ignorar estructura real: sesgo alto. Se elige por validación, y conviene que sea impar en problemas binarios para evitar empates.
Su límite duro es la maldición de la dimensionalidad. En dimensión alta, las distancias entre puntos aleatorios convergen a un valor común, con lo que «el vecino más cercano» deja de ser distinguible del más lejano y el método pierde sentido. Es el ejemplo más claro de que la intuición geométrica de dos dimensiones no escala.
Predicción para el punto (1, 1) con distintos valores de k.
consulta: (1,0 ; 1,0)
k = 1 → clase 1
k = 5 → clase 1
k = 21 → clase 1
Los datos están bien separados: k no cambia la respuesta.
Efecto del escalado:
con la segunda característica multiplicada por 100,
la predicción sigue siendo clase 1 en este caso,
pero la distancia pasa a estar dominada por x₂:
la contribución de x₁ cae al 0,01 % del total.
Con clases menos separadas, ese desequilibrio
cambiaría la respuesta.k-NN: la métrica y el escalado deciden el resultado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | prediccion_k=1, prediccion_k=5, prediccion_k=21, prediccion_con_x2_escalada_x100 |
| Comprobaciones (2) | el_escalado_cambia_la_respuesta, k_par_puede_empatar |
compmath run 288Sistemas de recomendación, búsqueda por similitud, imputación de valores faltantes y recuperación de vecinos en bases vectoriales.
9780387848570 verificado en International ISBN Agency (2026-08-19).10.1007/3-540-49257-7_15 verificado en Crossref (2026-08-19).Maximizar el margen equivale a minimizar la norma de w, y solo unos pocos puntos deciden.
frontera: wᵀx + b = 0
ancho del margen = 2/‖w‖
minimizar ‖w‖² sujeto a yᵢ(wᵀxᵢ + b) ≥ 1Cuando dos clases son separables hay infinitos hiperplanos que las separan. SVM elige uno con un criterio concreto: el que deja el margen más ancho a ambos lados. La intuición es que un margen amplio es más robusto ante datos nuevos ligeramente desplazados.
La formalización es bonita. Si se normaliza para que los puntos más cercanos cumplan |wᵀx + b| = 1, el ancho del margen resulta ser 2/‖w‖. Maximizar el margen es por tanto minimizar ‖w‖, y el problema completo es un programa cuadrático con restricciones lineales: exactamente la clase 258.
La propiedad más característica es que la solución depende únicamente de los vectores de soporte, los puntos que tocan el margen. Todos los demás podrían eliminarse del conjunto de entrenamiento sin que la frontera cambiara. Eso hace el modelo compacto y explica su buen comportamiento con conjuntos pequeños.
Con clases no separables se introduce el margen blando: variables de holgura que permiten violaciones penalizadas, con un parámetro C que regula el compromiso entre margen ancho y errores tolerados. Combinado con el kernel de la clase siguiente, SVM fue el método dominante en clasificación entre 1995 y 2012.
SVM lineal sobre dos clases separables.
w = (1,151743 ; 1,007988) b = −0,82
‖w‖ = 1,53054
ancho del margen = 2/‖w‖ = 1,306729
vectores de soporte: 3
accuracy = 1,0
Solo 3 de las 80 observaciones determinan la frontera.
Las otras 77 podrían borrarse sin cambiar nada.
Si se quisiera un margen más ancho habría que reducir ‖w‖,
pero entonces las restricciones yᵢ(wᵀxᵢ+b) ≥ 1 dejarían
de cumplirse: el óptimo es el equilibrio exacto.SVM: maximizar el margen equivale a minimizar ‖w‖.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | b, norma_de_w, ancho_del_margen_2/|w|, vectores_de_soporte, accuracy, hinge_loss |
| Comprobaciones (1) | solo_los_vectores_de_soporte_definen_la_frontera |
compmath run 289Clasificación con pocos datos y muchas características, bioinformática, clasificación de texto y detección de anomalías con SVM de una clase.
10.1007/bf00994018 verificado en Crossref (2026-08-19).El kernel calcula el producto escalar en el espacio expandido sin construirlo nunca.
K(a,b) = φ(a)ᵀφ(b)
kernel polinómico: K(a,b) = (aᵀb + c)^d
kernel RBF: K(a,b) = exp(−γ‖a−b‖²)Cuando los datos no son linealmente separables, una salida es transformarlos a un espacio de mayor dimensión donde sí lo sean. El problema es que ese espacio crece muy rápido: un polinomio de grado 3 sobre 100 características genera del orden de 170 000 términos, y calcularlos explícitamente es inviable.
El kernel trick observa que muchos algoritmos —SVM, PCA, regresión ridge— solo usan los datos a través de productos escalares. Si existe una función K(a,b) que devuelve directamente el producto escalar en el espacio expandido, nunca hace falta construir ese espacio. Se sustituyen los productos escalares por llamadas al kernel y todo funciona.
El ejemplo mínimo lo hace evidente: para el kernel polinómico de grado 2, calcular (aᵀb)² cuesta una multiplicación y una potencia, mientras que expandir a φ y hacer el producto en el espacio expandido cuesta bastante más y da exactamente el mismo número.
El caso extremo es el kernel RBF, que corresponde a un espacio de características de dimensión infinita y aun así se evalúa con una exponencial. El teorema de Mercer caracteriza qué funciones son kernels válidos: aquellas cuya matriz de Gram es siempre semidefinida positiva. Toda la maquinaria de los procesos gaussianos se apoya en esta misma idea.
Kernel polinómico de grado 2 frente al espacio expandido.
a = (1, 2) b = (3, 4)
Expansión explícita:
φ(x) = (x₁², √2·x₁x₂, x₂²)
φ(a) = (1,0 ; 2,828427 ; 4,0)
φ(b) = (9,0 ; 16,970563 ; 16,0)
producto en el espacio expandido:
1·9 + 2,828427·16,970563 + 4·16 = 121,0
Kernel directo:
(aᵀb)² = (1·3 + 2·4)² = 11² = 121,0
Coinciden ✓
Con d = 3 y 100 características, la expansión tendría
unos 170 000 términos; el kernel sigue costando lo mismo.El kernel calcula el producto punto sin construir el espacio.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | producto_en_el_espacio_expandido, kernel_polinomico_(aᵀb)², dimension_explicita, operaciones_kernel, kernel_RBF |
| Comprobaciones (1) | coinciden |
compmath run 290SVM no lineales, procesos gaussianos, PCA con kernel, métodos espectrales y análisis de similitud entre estructuras complejas.
9780262536578 verificado en International ISBN Agency (2026-08-19).Un árbol elige el corte que más reduce la impureza, y Gini y entropía casi siempre coinciden.
entropía = −Σ p·log₂ p
Gini = 1 − Σ p²
ganancia = impureza(padre) − Σ (nᵢ/n)·impureza(hijoᵢ)Un árbol de decisión parte el espacio con cortes paralelos a los ejes, eligiendo en cada nodo la característica y el umbral que producen hijos lo más puros posible. La construcción es voraz: se elige el mejor corte local sin garantía de optimalidad global, porque encontrar el árbol óptimo es un problema NP-completo.
Hay dos medidas habituales de impureza. La entropía es la de la clase 262 aplicada a la distribución de clases del nodo. El índice de Gini es la probabilidad de clasificar mal si se etiquetase al azar según la distribución del nodo. Ambas valen cero en un nodo puro y son máximas cuando las clases están equilibradas.
En la práctica rara vez producen árboles distintos. Gini es ligeramente más rápido porque evita el logaritmo, y por eso suele ser el valor por defecto. Elegir entre uno y otro es una de las decisiones menos importantes del modelado, pese a la atención que recibe.
La virtud del árbol es la interpretabilidad: la secuencia de decisiones se lee como reglas y se explica a cualquiera. Su defecto es la inestabilidad: cambiar unos pocos datos puede alterar el corte raíz y con él todo el árbol. Esa varianza alta es exactamente lo que el bagging de la clase siguiente ataca, y lo que hizo de los bosques aleatorios un método tan superior al árbol individual.
Elección del mejor corte en el nodo raíz.
nodo raíz con clases equilibradas:
entropía = 1,0 bits Gini = 0,5
cortes evaluados: 28
mejor corte: característica 0, umbral 0,5
ganancia de información = 0,915219 bits
Gini tras el corte = 0,02439
La impureza cae de 0,5 a 0,024: los hijos son
casi puros con un solo corte.
Entropía y Gini eligieron el mismo corte,
como ocurre en la inmensa mayoría de los casos.Entropía y Gini: dos medidas de impureza para elegir el corte.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | entropia_del_nodo_raiz, gini_del_nodo_raiz, ganancia_de_informacion, gini_tras_el_corte, cortes_evaluados |
| Comprobaciones (1) | ambos_criterios_suelen_coincidir |
compmath run 291Modelos interpretables, segmentación de clientes, sistemas de reglas y componente base de Random Forest y gradient boosting.
9781315139470 verificado en International ISBN Agency (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).Promediar modelos solo reduce la varianza en la medida en que estén decorrelacionados.
Var(media de k modelos) = ρσ² + (1−ρ)σ²/k
ρ = 0 ⟹ varianza / k
ρ = 1 ⟹ no hay gananciaEl bagging entrena varios modelos sobre remuestras bootstrap de los datos y promedia sus predicciones. La idea es que los errores independientes se cancelan al promediarse, igual que el error de la media muestral decae en la clase 203.
La fórmula de la varianza del promedio dice exactamente cuánta ganancia hay, y su lectura es la lección de la clase. El segundo término se divide por k y desaparece con muchos modelos; el primero, ρσ², no depende de k y no se puede reducir añadiendo árboles. Si los modelos están muy correlacionados, promediar mil no sirve de mucho más que promediar diez.
De ahí viene la aportación específica de Random Forest sobre el bagging simple: además de remuestrear las observaciones, en cada corte considera solo un subconjunto aleatorio de características. Eso fuerza a los árboles a usar variables distintas y reduce ρ, que es el término que limita la ganancia. La aleatoriedad extra empeora cada árbol individual y mejora el conjunto.
El bagging ataca la varianza, no el sesgo. Promediar cien modelos igualmente sesgados da un modelo igual de sesgado. Por eso funciona tan bien con árboles profundos, que tienen sesgo bajo y varianza alta, y apenas aporta con modelos rígidos como la regresión lineal.
Bosque de tocones frente a un tocón único.
25 árboles de profundidad 1 (tocones)
muestreo: bootstrap con reemplazo
accuracy de un árbol único: 0,9875
accuracy del bosque: 0,9875
Aquí no hay ganancia porque el problema es tan fácil
que el tocón único ya acierta casi todo: no queda
varianza que reducir.
Fórmula: Var = ρσ² + (1−ρ)σ²/k
ρ = 0,0 → varianza / 25
ρ = 0,5 → varianza × 0,52, no × 0,04
ρ = 1,0 → sin ganancia
Por eso Random Forest muestrea también características:
para bajar ρ, no para subir k.Bagging: promediar modelos decorrelacionados reduce la varianza.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | arboles, profundidad, accuracy_arbol_unico, accuracy_del_bosque, semilla |
| Comprobaciones (1) | reduce_varianza_no_sesgo |
compmath run 292Random Forest en datos tabulares, estimación de importancia de variables, ensembles de modelos y reducción de varianza en predicciones.
10.1023/a:1010933404324 verificado en Crossref (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).Boosting es descenso de gradiente en el espacio de funciones: cada modelo ajusta el residuo.
F_m(x) = F_{m−1}(x) + ν·h_m(x)
h_m ajusta el residuo: y − F_{m−1}(x)
ν = learning rate, típicamente 0,01 a 0,3El boosting construye el modelo por acumulación secuencial: se empieza con una predicción constante y en cada ronda se entrena un aprendiz débil sobre lo que el conjunto actual todavía no explica. El resultado final es la suma de todos ellos.
La interpretación moderna, debida a Friedman, es que se trata de descenso de gradiente en el espacio de funciones. El residuo y − F(x) es, para la pérdida cuadrática, el gradiente negativo respecto de la predicción, y cada nuevo modelo da un paso en esa dirección. Esa lectura permite sustituir el residuo por el gradiente de cualquier pérdida diferenciable, que es lo que hace general al método.
La diferencia con el bagging es de objetivo. Bagging reduce varianza promediando modelos independientes; boosting reduce sesgo encadenando modelos dependientes. Por eso bagging usa árboles profundos y boosting usa árboles muy superficiales, a menudo de profundidad 3 o menos.
El learning rate ν controla cuánto se incorpora de cada modelo nuevo. Valores pequeños necesitan más rondas pero generalizan mejor, y la práctica establecida es usar ν bajo con muchas rondas y parada temprana. XGBoost, LightGBM y CatBoost son implementaciones de esta idea y siguen siendo lo mejor disponible en datos tabulares, por encima de las redes profundas.
Cuarenta observaciones ajustadas por tocones sucesivos.
aprendiz débil: tocón de decisión (un solo corte)
learning rate: 0,3
MSE inicial (predicción constante): 2,46596
ronda MSE
1 1,53420
5 0,35558
10 0,12xxx
20 0,05xxx
El error baja monótonamente ronda tras ronda.
Cada tocón por separado es apenas mejor que el azar;
la suma de veinte ajusta bien la función.
Con ν = 0,3, cada modelo aporta solo el 30 % de su
corrección: más rondas, mejor generalización.Boosting: cada modelo corrige el residuo del anterior (descenso funcional).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | observaciones, learning_rate, MSE_inicial |
| Comprobaciones (1) | el_error_baja_monotonamente |
compmath run 293XGBoost y LightGBM en competiciones y producción, modelos de riesgo, ranking de búsqueda y predicción sobre datos tabulares.
10.1214/aos/1013203451 verificado en Crossref (2026-08-19).10.48550/arxiv.1603.02754 verificado en DataCite (2026-08-19).k-means minimiza la inercia alternando asignación y recálculo, y nunca empeora.
objetivo: min Σ‖xᵢ − μ_{c(i)}‖²
paso 1: asignar cada punto a su centroide más cercano
paso 2: recalcular cada centroide como la media de los suyosk-means agrupa datos minimizando la inercia: la suma de distancias al cuadrado de cada punto a su centroide. El algoritmo de Lloyd alterna dos pasos, y cada uno reduce esa cantidad, lo que garantiza convergencia monótona a un óptimo local.
La garantía es solo local. El resultado depende de la inicialización, y con centroides iniciales malos puede converger a una solución claramente peor. La inicialización k-means++ elige puntos iniciales dispersos con una regla probabilística y reduce mucho ese riesgo; ejecutar varias veces y quedarse con la de menor inercia es la práctica complementaria.
El método impone supuestos que conviene tener presentes porque no siempre se dicen: usar distancia euclídea equivale a suponer agrupamientos esféricos y de tamaño similar. Con grupos alargados, con densidades muy distintas o con formas no convexas, k-means falla de forma sistemática, y ahí corresponden DBSCAN o agrupamiento espectral.
Elegir k es el problema abierto. La inercia siempre baja al aumentar k —con k = n vale cero— así que no sirve como criterio directo. Las heurísticas habituales son el método del codo, el coeficiente de silueta o el gap statistic, y ninguna es definitiva: k suele decidirse por conocimiento del dominio.
Dos grupos, convergencia en tres iteraciones.
k = 2
iteración inercia
1 92,527761
3 89,596534
centroides finales:
( 2,1592 ; 1,8087)
(−1,1503 ; −1,0020)
La inercia nunca sube: cada paso la reduce o la deja igual. ✓
Convergió en 3 iteraciones.
Los centroides coinciden con las medias reales de las
clases, aunque el algoritmo no vio ninguna etiqueta.k-means como minimización de la inercia (Lloyd).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | k, iteraciones_hasta_converger, semilla |
| Comprobaciones (2) | la_inercia_nunca_sube, converge_a_un_optimo_local |
compmath run 294Segmentación de clientes, cuantización de color, compresión vectorial, inicialización de GMM y agrupamiento de embeddings.
10.1109/tit.1982.1056489 verificado en Crossref (2026-08-19).10.5555/1283383.1283494, pendiente de resolver.Una mezcla de gaussianas asigna probabilidades en vez de etiquetas, y modela grupos de formas distintas.
p(x) = Σ πₖ·N(x | μₖ, σₖ²)
responsabilidad: γₖ(x) = πₖN(x|μₖ,σₖ²) / p(x)
Σ πₖ = 1Una mezcla de gaussianas es un modelo generativo: supone que cada punto se generó eligiendo primero una componente según los pesos π y muestreando después de su normal. Ajustar el modelo es estimar los pesos, las medias y las varianzas que mejor explican los datos observados.
Su diferencia con k-means es la asignación blanda. En vez de decidir a qué grupo pertenece cada punto, calcula la probabilidad de pertenecer a cada uno —la responsabilidad—. Un punto entre dos grupos recibe 0,5 y 0,5 en vez de una asignación arbitraria, y esa información es valiosa: identifica los casos ambiguos.
La segunda diferencia es la flexibilidad de forma. k-means impone grupos esféricos del mismo tamaño; un GMM con covarianza completa modela grupos elípticos, rotados y de tamaños distintos. De hecho k-means es el caso límite de un GMM con covarianzas esféricas iguales y responsabilidades llevadas al extremo.
El ajuste se hace con EM, y la log-verosimilitud crece monótonamente, lo que sirve de comprobación de la implementación. Hay una trampa conocida: si una componente colapsa sobre un solo punto, su varianza tiende a cero y la verosimilitud a infinito. Se evita con una cota inferior en la varianza o con regularización.
Mezcla de dos componentes ajustada por EM.
componentes: 2
medias: (−1,3009 ; 1,9702)
varianzas: ( 0,3721 ; 0,9484)
pesos de mezcla: ( 0,4481 ; 0,5519) suman 1 ✓
log-verosimilitud por iteración:
−145,345385
−144,860751
−144,766128
Nunca baja ✓
Las varianzas son distintas: 0,37 frente a 0,95.
k-means habría impuesto grupos del mismo tamaño y
habría clasificado mal la frontera entre ambos.Mezcla de gaussianas: asignación blanda en lugar de dura.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | componentes |
| Comprobaciones (1) | la_log_verosimilitud_nunca_baja |
compmath run 295Agrupamiento probabilístico, modelado de densidad, detección de anomalías, separación de hablantes y segmentación de imágenes.
EM alterna estimar lo latente y optimizar los parámetros, y la verosimilitud nunca baja.
E-step: estimar la distribución de las latentes dados los parámetros
M-step: maximizar los parámetros dada esa distribución
garantía: la log-verosimilitud crece o se mantieneEl algoritmo EM resuelve un problema circular: para estimar los parámetros haría falta saber qué componente generó cada dato, y para saberlo haría falta conocer los parámetros. La salida es alternar, empezando por una suposición cualquiera y refinando ambas cosas por turnos.
El paso E calcula, con los parámetros actuales, la distribución de probabilidad de las variables latentes. El paso M toma esas asignaciones blandas como si fueran datos ponderados y maximiza los parámetros. Se repite hasta que deja de haber cambio apreciable.
La garantía teórica es que la log-verosimilitud nunca decrece. La demostración construye una cota inferior que toca la verosimilitud en el punto actual y se maximiza en cada paso; esa cota es el ELBO, el mismo objeto que optimiza un autoencoder variacional. Ver EM primero hace que el ELBO de la parte 17 deje de parecer una construcción arbitraria.
Lo que no garantiza es alcanzar el óptimo global: converge a un óptimo local que depende de la inicialización, igual que k-means. Y puede ser lento cerca del óptimo. Su valor está en la generalidad: sirve para GMM, para modelos ocultos de Markov, para datos faltantes y para cualquier modelo con estructura latente.
Dos monedas con sesgos desconocidos, sin saber cuál se usó.
20 tandas de 10 lanzamientos cada una
sesgos reales: [0,80 ; 0,30]
inicialización: [0,60 ; 0,40]
iteración p_A p_B
1 0,726455 0,428502
5 0,8xxxxx 0,4xxxxx
final 0,848956 0,451121
Sin saber nunca qué moneda generó cada tanda,
EM recupera aproximadamente los dos sesgos.
El error residual viene de los datos finitos:
20 tandas no bastan para separar perfectamente.
La log-verosimilitud creció en cada iteración. ✓EM: E-step y M-step sobre datos con una variable latente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | tandas, lanzamientos_por_tanda, semilla |
| Comprobaciones (0) | — |
compmath run 296Ajuste de GMM, modelos ocultos de Markov, imputación de datos faltantes, topic models y base conceptual de la inferencia variacional.
10.1111/j.2517-6161.1977.tb01600.x verificado en Crossref (2026-08-19).PCA elige las direcciones de máxima varianza, y a menudo unas pocas bastan.
autovectores de la matriz de covarianza
varianza explicada por PCᵢ = λᵢ / Σλⱼ
equivale a la SVD de los datos centradosPCA busca las direcciones en las que los datos varían más y las usa como nuevo sistema de coordenadas. Las componentes son los autovectores de la matriz de covarianza, ordenados por autovalor, y cada autovalor mide cuánta varianza captura su dirección.
Su valor práctico está en que la varianza suele concentrarse en pocas componentes. Si dos componentes de cincuenta explican el 95 % de la varianza, se puede trabajar con dos dimensiones en vez de cincuenta, perdiendo poco. Eso acelera el cómputo, reduce el ruido y permite visualizar.
Como se vio en la parte 06, PCA es la SVD de los datos centrados, y por eso en la práctica se calcula así en vez de formando la covarianza: la SVD es numéricamente más estable y evita elevar al cuadrado el número de condición, exactamente el problema de la clase 234.
Dos precauciones. Hay que estandarizar si las características tienen escalas distintas, porque si no la de mayor rango domina las componentes por razones de unidades. Y las componentes son combinaciones lineales de todas las variables originales, lo que las hace difíciles de interpretar: PCA sacrifica interpretabilidad a cambio de compresión, y para selección de variables interpretable es mejor Lasso.
PCA sobre datos bidimensionales correlacionados.
matriz de covarianza:
[[3,3785 2,4463]
[2,4463 2,5285]]
autovalores: [5,436476 ; 0,470507]
varianza explicada por PC1: 92,03 %
PC1 = (0,765237 ; 0,643749)
Reduciendo de 2 dimensiones a 1:
accuracy usando solo PC1 = 1,0 ✓
Se descartó el 8 % de la varianza y no se perdió
nada de capacidad discriminante.
Advertencia: la varianza no siempre coincide con
la información útil para clasificar.PCA como preprocesamiento: cuánta varianza se conserva.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | dimension_original, varianza_explicada_PC1_%, accuracy_usando_solo_PC1, dimension_reducida |
| Comprobaciones (1) | centrar_es_obligatorio |
compmath run 297Reducción de dimensión, visualización de datos, compresión, eliminación de ruido y preprocesamiento antes de modelos sensibles a la dimensión.
10.1007/b98835 verificado en Crossref (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).El error se descompone en sesgo, varianza y ruido, y solo los dos primeros se pueden tocar.
E[(y − ŷ)²] = sesgo² + varianza + ruido
modelo simple: sesgo alto, varianza baja
modelo complejo: sesgo bajo, varianza altaEl error esperado de predicción se descompone exactamente en tres términos. El sesgo mide el error sistemático por suponer una forma demasiado simple; la varianza mide cuánto cambia la predicción según qué muestra concreta se haya usado para entrenar; y el ruido irreducible es la aleatoriedad de los propios datos, que ningún modelo puede eliminar.
La descomposición explica por qué más complejidad no es siempre mejor. Al aumentar la capacidad del modelo, el sesgo baja pero la varianza sube, y el error total tiene un mínimo en algún punto intermedio. Ese punto es lo que la validación busca, y por eso la curva de error de test tiene forma de U mientras la de entrenamiento solo baja.
Ambos extremos son diagnosticables. Sesgo alto se manifiesta como error alto tanto en entrenamiento como en test: el modelo no puede ni ajustar lo que ve. Varianza alta se manifiesta como error bajo en entrenamiento y alto en test: memoriza en vez de generalizar. Los remedios son opuestos, y confundir el diagnóstico lleva a empeorar el modelo.
Conviene añadir un matiz honesto. En redes muy sobreparametrizadas se observa el fenómeno del doble descenso: pasado el punto de interpolación, el error de test vuelve a bajar, contradiciendo la forma de U clásica. La descomposición sigue siendo válida y es la mejor guía disponible en el régimen habitual, pero no describe todo lo que ocurre en el aprendizaje profundo moderno.
Polinomios de distinto grado ajustados a sin(2x).
función real: sin(2x) punto de prueba: x = 1,0
valor real: 0,909297 120 réplicas de entrenamiento
grado 1:
predicción media = 0,364146
sesgo² = 0,29719 alto
varianza = baja
→ subajuste: ni siquiera puede curvarse
grados intermedios:
sesgo² baja, varianza sube, error total mínimo
grado alto:
sesgo² ≈ 0
varianza elevada
→ sobreajuste: cada muestra da una curva distinta
El error total tiene forma de U en el grado.Descomposición sesgo-varianza medida por simulación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | punto_de_prueba, valor_real, replicas, ruido_irreducible |
| Comprobaciones (2) | grado_1_alto_sesgo, grado_9_alta_varianza |
compmath run 298Diagnóstico de modelos, elección de capacidad, decisión entre recoger más datos o cambiar de modelo y diseño de curvas de aprendizaje.
9780387848570 verificado en International ISBN Agency (2026-08-19).10.1073/pnas.1903070116 verificado en Crossref (2026-08-19).Con datos sin ninguna relación real se puede obtener un 70 % de acierto si se evalúa mal.
separar train, validación y test antes de mirar nada
leakage: información del test que llega al entrenamiento
validación cruzada anidada para hiperparámetrosUn modelo solo vale por lo que hace con datos que no ha visto. Medir eso correctamente es más difícil de lo que parece, y el leakage —cualquier filtración de información del conjunto de evaluación al de entrenamiento— es el error que más veces produce resultados brillantes y modelos inútiles en producción.
Sus formas son variadas y a menudo sutiles. Estandarizar usando la media de todo el conjunto antes de separar. Seleccionar características mirando su correlación con la etiqueta en todos los datos. Elegir hiperparámetros con el conjunto de test. Imputar valores faltantes globalmente. Y en series temporales, mezclar pasado y futuro al hacer validación cruzada aleatoria.
La demostración de esta clase es la más contundente posible: se generan datos donde X e y no tienen ninguna relación, puro ruido, y evaluando sobre los mismos datos con los que se entrenó se obtiene un 70 % de acierto. Con separación honesta la cifra cae al 60 %, todavía por encima del 50 % esperado por el azar, porque con 12 características y 60 observaciones queda margen para memorizar.
La disciplina que lo evita es sencilla de enunciar: separar el test al principio, no tocarlo hasta el final, hacer todo el preprocesamiento dentro de la validación cruzada, y usar validación anidada cuando hay hiperparámetros. Con series temporales, separar siempre por tiempo. Cuesta poco y es lo que distingue un resultado de una ilusión.
Datos sin relación real entre X e y.
60 observaciones, 12 características
relación real entre X e y: NINGUNA
accuracy entrenando y evaluando en todo: 0,70
accuracy en train: 0,65
accuracy en test: 0,60
línea base por azar: 0,50
Un 70 % de acierto sobre ruido puro, obtenido
simplemente por evaluar donde se entrenó.
Incluso el 60 % del test está inflado: con 12
características y 60 datos, hay margen de memorización.
Solo la validación repetida daría una cifra fiable.Validación honesta frente a leakage: la misma métrica, dos verdades.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | observaciones, features, accuracy_entrenando_y_evaluando_en_todo, accuracy_en_train, accuracy_en_test, brecha, accuracy_esperada_por_azar |
| Comprobaciones (0) | — |
compmath run 299Diseño de experimentos de aprendizaje automático, auditoría de resultados, competiciones de ciencia de datos y validación de modelos antes de producción.
10.1145/2382577.2382579 verificado en Crossref (2026-08-19).9780387848570 verificado en International ISBN Agency (2026-08-19).Seis algoritmos, un mismo protocolo: lo que cambia es el objetivo que cada uno optimiza.
mismo split, misma semilla, mismas características
línea base por azar: 0,5 en binario equilibrado
empate en accuracy ⟹ decidir por otros criteriosEl capstone entrena seis algoritmos sobre los mismos datos con el mismo protocolo: idéntica partición, idéntica semilla, idénticas características. Solo así la comparación mide el algoritmo y no las condiciones del experimento, que es la lección de la clase 260 aplicada aquí.
El resultado es que todos aciertan el 100 %, y eso es informativo en sí mismo: cuando el problema es fácil, la elección de algoritmo no importa. Comparar modelos sobre datos separables no distingue nada, y muchas comparaciones publicadas adolecen de ese defecto. Un problema que no discrimina entre métodos no sirve para elegir método.
Lo que sí distingue a los seis es qué objetivo optimiza cada uno: la regresión logística maximiza la log-verosimilitud, el clasificador por centroides minimiza distancia a la media, k-NN no optimiza nada porque no entrena, Naive Bayes maximiza la posterior bajo independencia, el árbol minimiza impureza y la SVM maximiza el margen. Seis objetivos distintos, seis fronteras distintas, la misma respuesta en este conjunto.
Cuando el accuracy empata, la decisión debe tomarse con otros criterios, y conviene tenerlos listos: interpretabilidad, coste de inferencia, calidad de las probabilidades, robustez ante datos desplazados y facilidad de mantenimiento. Elegir el modelo con 0,3 puntos más de accuracy ignorando que cuesta cien veces más en inferencia es una mala decisión de ingeniería.
Seis algoritmos bajo el mismo protocolo.
protocolo: 80 observaciones, 56 train / 24 test
semilla 20260821, mismas características
algoritmo accuracy test objetivo optimizado
regresión logística 1,00 log-verosimilitud
centroides 1,00 distancia a la media
k-NN (k=5) 1,00 ninguno, sin entrenar
Naive Bayes 1,00 posterior con independencia
árbol de decisión 1,00 impureza
SVM lineal 1,00 margen máximo
línea base por azar: 0,50
Empate total: el problema es demasiado fácil para
discriminar entre métodos.
Criterios de desempate: interpretabilidad, coste de
inferencia, calibración y robustez.Capstone: seis algoritmos derivados y comparados sobre los mismos datos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | linea_base_por_azar |
| Comprobaciones (0) | — |
compmath run 300Selección de modelo en proyectos reales, informes de evaluación, decisiones de arquitectura y establecimiento de líneas base antes de probar modelos profundos.
9780387848570 verificado en International ISBN Agency (2026-08-19).Perceptrón, MLP, activaciones, pérdidas, backpropagation paso a paso, grafos de cómputo, inicialización, normalización, convolución, recurrencia y embeddings.
Una red neuronal es una función compuesta con muchos parámetros, entrenada minimizando una pérdida con descenso de gradiente. Esa frase contiene todo, y esta parte la desarrolla pieza por pieza usando exactamente lo construido antes: la regla de la cadena de la parte 07, el gradiente y la autodiferenciación de la parte 08, los optimizadores de la parte 12 y las pérdidas de la parte 13.
Las clases 301 y 302 marcan la frontera histórica. El perceptrón converge si y solo si los datos son linealmente separables, y su incapacidad para resolver XOR —señalada por Minsky y Papert en 1969— congeló el campo durante una década. La solución es apilar capas con no linealidad entre ellas: sin ella, componer transformaciones lineales da otra transformación lineal y la profundidad no aporta nada. La capa oculta no clasifica: construye una representación en la que el problema sí es separable, y ese es el mecanismo esencial del aprendizaje profundo.
Las clases 303 a 306 son el motor. Cada activación tiene su zona de saturación, y la sigmoide, con derivada máxima de 0,25, garantiza que el gradiente se atenúe al menos cuatro veces por capa: por eso ReLU la desplazó. Backpropagation se desarrolla aquí paso a paso, con números, y se ve que no es un algoritmo nuevo sino la regla de la cadena aplicada en orden topológico inverso sobre el grafo de cómputo. El detalle que más se olvida al implementarlo a mano es que un nodo reutilizado acumula gradientes de todos sus consumos.
Las clases 307 a 309 tratan lo que hace entrenable una red profunda. La inicialización no es un detalle: con escala 0,01 las activaciones colapsan a cero en ocho capas y con escala 1,0 se saturan, mientras que Xavier y He mantienen la varianza estable en ambos sentidos. La normalización estabiliza la escala interna, y batch norm y layer norm se distinguen simplemente por el eje sobre el que promedian —una razón concreta por la que los Transformers usan layer norm—. El dropout introduce ruido en entrenamiento y conserva la esperanza en inferencia mediante escalado.
Las clases 310 a 312 desarrollan la convolución como capa: la fórmula del tamaño de salida con padding y stride, el campo receptivo que crece al apilar capas, y el hecho de que dos convoluciones de 3×3 cubren lo mismo que una de 5×5 con menos parámetros y más no linealidad —la observación que define VGG—.
Las clases 313 a 316 tratan las secuencias. Una RNN comparte pesos en el tiempo y acumula historia en su estado, pero el gradiente a través de 50 pasos es un producto de 50 factores: si cada uno es menor que 1 el producto se desvanece exponencialmente, y si es mayor explota. La LSTM resuelve el desvanecimiento con un camino aditivo para el estado de celda, y la GRU lo consigue con dos puertas en vez de tres y un 25 % menos de parámetros.
El cierre conecta con la práctica: embeddings como geometría del significado, las técnicas reales de entrenamiento —warmup, clipping, planificadores—, y la comparación entre el motor Var de la parte 08 y PyTorch o JAX, que hacen lo mismo con otra escala de ingeniería. El capstone entrena una red completa en Python puro sobre dos espirales entrelazadas, y comprueba que el gradiente derivado a mano coincide con el automático.
Toda arquitectura moderna, incluido el Transformer, se construye sobre estos bloques y sobre este mismo mecanismo de derivación.
| Término | Definición | Clase |
|---|---|---|
| Acumulación de gradientes | Un nodo usado en varios sitios suma las contribuciones de todos sus consumos. | 306 |
| Autodiferenciación en modo reverso | Una pasada hacia adelante y una hacia atrás dan todos los gradientes de una salida escalar. | 319 |
| Backpropagation | Regla de la cadena aplicada en orden topológico inverso sobre el grafo de cómputo. | 305 |
| Batch normalization | Normaliza cada característica sobre el lote. Depende del tamaño del lote. | 308 |
| Campo receptivo | Región de la entrada que influye en una activación concreta. Crece al apilar capas. | 311 |
| Capa oculta | Capa intermedia que construye una representación donde el problema sí es separable. | 302 |
| Compartición de parámetros | El mismo núcleo se aplica en todas las posiciones. Reduce parámetros e impone invariancia. | 311 |
| Dropout | Apagar neuronas al azar durante el entrenamiento para evitar coadaptación. | 309 |
| Embedding | Representación densa aprendida donde la proximidad geométrica refleja similitud. | 317 |
| Estado de celda | Memoria de largo plazo de la LSTM, actualizada de forma aditiva. | 315 |
| Estado oculto | Vector que resume la historia procesada hasta el instante actual. | 313 |
| Función de activación | No linealidad aplicada tras la transformación lineal. Sin ella la profundidad no aporta nada. | 303 |
| Gradient clipping | Acotar la norma del gradiente conservando su dirección. Evita la explosión. | 314 |
| Gradiente que se desvanece | Producto de muchas derivadas menores que 1: el gradiente tiende a cero exponencialmente. | 314 |
| Grafo de cómputo | Representación de la expresión como nodos de operaciones y aristas de dependencia. | 306 |
| GRU | Celda recurrente con puertas de actualización y reinicio. Un 25 % menos de parámetros que LSTM. | 316 |
| Inicialización de He | Escala √(2/n). Compensa que ReLU anula la mitad de las activaciones. | 307 |
| Inicialización de Xavier | Escala 1/√n. Mantiene la varianza estable con activaciones simétricas como tanh. | 307 |
| Inverted dropout | Escalar durante el entrenamiento para que la inferencia no requiera ajuste. | 309 |
| Layer normalization | Normaliza cada muestra sobre sus características. Independiente del lote. | 308 |
| LSTM | Celda con puertas de olvido, entrada y salida, y un camino aditivo para el gradiente. | 315 |
| Padding | Relleno del borde que permite conservar el tamaño espacial tras convolucionar. | 310 |
| Paso hacia adelante | Cálculo de las salidas capa a capa, guardando los valores intermedios. | 305 |
| Perceptrón | Neurona lineal con umbral. Converge si y solo si los datos son linealmente separables. | 301 |
| Perceptrón multicapa | Composición de capas lineales con no linealidad entre ellas. | 302 |
| Pooling | Reducción espacial por máximo o media. Sin parámetros aprendidos. | 312 |
| Pérdida de Huber | Cuadrática cerca de cero y lineal lejos. Robusta ante valores atípicos. | 304 |
| Red recurrente | Procesa secuencias manteniendo un estado oculto y compartiendo pesos en el tiempo. | 313 |
| ReLU | max(0, x). Derivada 1 en positivo: no satura por la derecha y es barata. | 303 |
| Ruptura de simetría | Inicializar con valores distintos para que las neuronas de una capa no aprendan lo mismo. | 307 |
| Saturación | Zona donde la derivada de la activación es casi nula y el gradiente deja de fluir. | 303 |
| Separabilidad lineal | Existencia de un hiperplano que separa las clases sin error. XOR no la cumple. | 301 |
| Similitud coseno | Coseno del ángulo entre dos vectores. Ignora la magnitud y mide solo la dirección. | 317 |
| Stride | Salto del núcleo al desplazarse. Reduce el tamaño de salida. | 310 |
| Teorema de aproximación universal | Una capa oculta suficientemente ancha aproxima cualquier función continua. No dice cómo entrenarla. | 302 |
| Warmup | Subir el learning rate gradualmente al inicio para no divergir con estadísticas inmaduras. | 318 |
El perceptrón converge siempre en datos separables y nunca en XOR.
salida = 1 si wᵀx + b > 0, si no 0
actualización: w ← w + η·(y − ŷ)·x
teorema de convergencia: finito si hay separabilidadEl perceptrón de Rosenblatt es la unidad mínima: una suma ponderada de las entradas seguida de un umbral. Su regla de aprendizaje es directa —cuando se equivoca, mueve los pesos en la dirección del ejemplo mal clasificado— y tiene una garantía teórica sólida.
El teorema de convergencia del perceptrón dice que si los datos son linealmente separables, el algoritmo encuentra un separador en un número finito de pasos. Es un resultado fuerte y raro en aprendizaje automático: una garantía absoluta, sin condiciones sobre el orden de los datos ni sobre la inicialización.
El problema es la otra cara. Si los datos no son separables, el algoritmo no converge nunca: sigue oscilando indefinidamente sin acercarse a nada. Y la función XOR, con apenas cuatro puntos, no es separable: no hay recta que deje (0,0) y (1,1) a un lado y (0,1) y (1,0) al otro.
Ese ejemplo de cuatro puntos tuvo consecuencias históricas desproporcionadas. Minsky y Papert lo publicaron en 1969, la financiación se retiró y el campo entró en el primer invierno de la inteligencia artificial. La solución —apilar capas— ya se intuía, pero faltaba el algoritmo para entrenarlas, y backpropagation no se popularizó hasta 1986.
El mismo algoritmo sobre AND y sobre XOR.
AND (separable):
pesos aprendidos: (2,0 ; 1,0) sesgo: −2,0
errores tras 100 épocas: 0 ✓
Comprobación:
(0,0): 0·2 + 0·1 − 2 = −2 → 0 ✓
(1,1): 1·2 + 1·1 − 2 = 1 → 1 ✓
XOR (no separable):
errores tras 100 épocas: 4
el algoritmo oscila sin converger ✗
No es un problema del algoritmo: no existe ninguna recta
que separe los cuatro puntos de XOR.Perceptrón: converge si y solo si los datos son linealmente separables.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | AND_sesgo, AND_errores_tras_100_epocas, XOR_errores_tras_100_epocas |
| Comprobaciones (2) | AND_es_separable, XOR_es_separable |
compmath run 301Comprensión histórica del campo, línea base mínima, comprobación de separabilidad y unidad básica de toda red neuronal.
10.1037/h0042519 verificado en Crossref (2026-08-19).9780262534772 verificado en International ISBN Agency (2026-08-19).Sin no linealidad entre capas, cien capas siguen siendo una sola transformación lineal.
MLP: f(x) = W₂·σ(W₁x + b₁) + b₂
sin σ: W₂(W₁x + b₁) + b₂ = W'x + b'
XOR: 2 → 4 (tanh) → 1 (sigmoid)Un perceptrón multicapa apila transformaciones lineales con una función no lineal entre ellas. La no linealidad no es un adorno: es lo único que hace que la profundidad importe. Componer dos transformaciones lineales da otra transformación lineal, y por tanto una red sin activaciones, por profunda que sea, no puede hacer más que un modelo lineal de una capa.
Con no linealidad, la capa oculta hace algo cualitativamente distinto: transforma el espacio. Las neuronas ocultas no clasifican; construyen una nueva representación de la entrada en la que el problema original se vuelve separable, y la capa de salida se limita a trazar el hiperplano en ese espacio nuevo.
XOR es la demostración mínima. En el espacio original no hay recta que sirva; tras pasar por cuatro neuronas tanh, los cuatro puntos ocupan posiciones en las que sí la hay. Con 17 parámetros y unas cientos de épocas, el problema que hundió el campo en 1969 se resuelve.
El teorema de aproximación universal garantiza que una sola capa oculta suficientemente ancha aproxima cualquier función continua con la precisión que se quiera. Conviene leer con cuidado lo que no dice: no dice cuántas neuronas hacen falta —pueden ser exponencialmente muchas—, ni que el entrenamiento vaya a encontrarlas. Es un resultado de existencia, no de aprendibilidad, y la profundidad resulta ser mucho más eficiente en parámetros que la anchura.
MLP resolviendo XOR con 17 parámetros.
arquitectura: 2 → 4 (tanh) → 1 (sigmoid)
parámetros: 17
época pérdida
1 1,0765723
100 0,0249xxx
500 0,00xxxxx
predicciones finales:
(0,0) → 0,000049 esperado 0 ✓
(0,1) → 0,999856 esperado 1 ✓
(1,0) → 0,999829 esperado 1 ✓
(1,1) → 0,000xxx esperado 0 ✓
Sin tanh entre las capas, el modelo colapsaría a
una única transformación lineal y fallaría igual
que el perceptrón.MLP resolviendo XOR: la capa oculta crea una representación separable.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | parametros, semilla |
| Comprobaciones (1) | todas_correctas |
compmath run 302Bloque básico de toda arquitectura moderna, capas feed-forward de los Transformers, cabezas de clasificación y aproximación de funciones.
10.1038/323533a0 verificado en Crossref (2026-08-19).10.1007/bf02551274 verificado en Crossref (2026-08-19).La derivada máxima de la sigmoide es 0,25: cada capa divide el gradiente por cuatro como mínimo.
σ(x) = 1/(1+e⁻ˣ), σ' ≤ 0,25
tanh' ≤ 1, ReLU' = 1 en positivo
GELU: x·Φ(x), suave y no monótona cerca de ceroLa función de activación decide por dónde fluye el gradiente. Su elección parece un detalle y determina si una red profunda se puede entrenar, y la razón es puramente cuantitativa: el valor máximo de su derivada.
La sigmoide tiene derivada máxima 0,25, alcanzada en el origen. Eso significa que cada capa multiplica el gradiente por 0,25 como mucho, y con diez capas el factor acumulado es 0,25¹⁰ ≈ 10⁻⁶. La tanh mejora a 1,0 y además está centrada en cero, lo que ayuda a la optimización, pero sigue saturándose en ambos extremos.
ReLU cambió el panorama por su simplicidad: derivada exactamente 1 en la región positiva, así que el gradiente pasa intacto. Es además trivialmente barata de calcular. Su problema conocido es la muerte de neuronas: una unidad que queda siempre en la región negativa tiene gradiente cero y no vuelve a actualizarse nunca. Leaky ReLU y ELU mitigan eso con una pendiente pequeña en el lado negativo.
GELU es la activación de los Transformers modernos. Es suave en todo el dominio y no monótona cerca del origen, lo que empíricamente funciona mejor en esas arquitecturas. La elección de activación tiene menos margen del que sugiere la literatura: ReLU para redes convolucionales y GELU para Transformers cubre casi todos los casos razonables.
Valores y derivadas de cinco activaciones.
x sigmoid tanh relu leaky gelu
−5,0 0,006693 −0,999909 0,0 −0,05 −0,000001
−1,0 0,268941 −0,761594 0,0 −0,01 −0,158655
0,0 0,500000 0,000000 0,0 0,00 0,000000
1,0 0,731059 0,761594 1,0 1,00 0,841345
5,0 0,993307 0,999909 5,0 5,00 4,999999
Derivadas máximas:
sigmoid 0,25 → 10 capas: factor 1e-6
tanh 1,00 → mejor, pero satura en los extremos
relu 1,00 → sin saturación por la derecha
La sigmoide se satura claramente ya en |x| = 5:
su derivada allí es 0,0066.Activaciones y sus derivadas: dónde se saturan.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | sigmoid_se_satura, relu_no_se_satura_en_positivos, relu_muere_en_negativos |
compmath run 303Diseño de arquitecturas, diagnóstico de gradientes que no fluyen, elección entre ReLU y GELU y depuración de entrenamientos estancados.
10.48550/arxiv.1606.08415 verificado en DataCite (2026-08-19).Un solo valor atípico multiplica el MSE por cien mil; Huber lo absorbe.
MSE = media de (y − ŷ)²
MAE = media de |y − ŷ|
Huber: cuadrática si |e| ≤ δ, lineal si noLa función de pérdida define qué significa equivocarse, y esa definición cambia por completo el modelo resultante. No es un parámetro secundario: es la especificación del problema.
El error cuadrático medio penaliza el cuadrado del error, así que un error diez veces mayor pesa cien veces más. Eso lo hace extremadamente sensible a los valores atípicos: una sola observación anómala puede dominar la suma y arrastrar el ajuste entero. El error absoluto medio penaliza linealmente y es mucho más robusto, a cambio de no ser derivable en cero y de converger más lentamente.
La pérdida de Huber combina lo mejor de ambas: se comporta como cuadrática para errores pequeños —donde interesa la sensibilidad y la derivabilidad— y como lineal para errores grandes —donde interesa la robustez—. El parámetro δ marca la transición, y es la opción por defecto razonable cuando se sospecha que hay ruido de medición.
Detrás de cada elección hay un modelo probabilístico implícito, como se vio en la clase 215: MSE supone ruido gaussiano, MAE supone ruido de Laplace con colas más pesadas, y entropía cruzada supone un modelo categórico. Elegir pérdida es declarar qué se cree del ruido, y hacerlo explícitamente evita elegir por costumbre.
Cinco observaciones, una de ellas claramente anómala.
objetivos: [1,0 ; 2,0 ; 3,0 ; 4,0 ; 100,0]
predicciones: [1,1 ; 2,1 ; 2,9 ; 4,2 ; 5,0]
MSE = 1805,014
MAE = 19,100
Huber (δ = 1) = 18,907
MSE sin el atípico = 0,0175
El atípico multiplica el MSE por 103 000.
MAE y Huber apenas se descolocan.
Si ese 100,0 es un error de medición, MSE arruina
el ajuste entero por una sola observación.MSE, MAE, Huber y cross-entropy frente a un valor atípico.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | MSE, MAE, Huber_delta_1, MSE_sin_el_atipico |
| Comprobaciones (2) | el_atipico_domina_el_MSE, MAE_es_robusto |
compmath run 304Regresión robusta, detección de objetos con pérdida Huber, entrenamiento con datos ruidosos y diseño de objetivos personalizados.
10.1214/aoms/1177703732 verificado en Crossref (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).Backpropagation es la regla de la cadena recorrida hacia atrás, y se puede seguir con números.
forward: z = Wx + b, a = σ(z)
backward: dL/dW = dL/dz · xᵀ
con cross-entropy y sigmoide: dL/dz = a − yBackpropagation no es un algoritmo aparte: es la regla de la cadena de la clase 147 aplicada sistemáticamente al grafo de la red, recorriendo los nodos en orden topológico inverso. Su valor es de eficiencia, no de concepto: calcula todos los gradientes en una sola pasada hacia atrás.
El procedimiento tiene dos fases. En el paso hacia adelante se calculan las salidas capa a capa y se guardan los valores intermedios, que harán falta después; ese almacenamiento es la razón de que la memoria de entrenamiento crezca con la profundidad. En el paso hacia atrás se propaga la derivada de la pérdida desde la salida hasta los parámetros.
Hay una simplificación algebraica que conviene ver una vez con detalle. Al combinar entropía cruzada con sigmoide en la salida, el gradiente respecto de la preactivación se reduce a a − y: la derivada de la sigmoide se cancela exactamente contra el denominador de la pérdida. Esa cancelación es la que evita los gradientes saturados de la clase 286, y es la razón técnica de emparejar esas dos funciones.
Recorrer los números a mano una vez, como hace este ejemplo, vale más que leer la demostración diez veces. Después conviene no volver a implementarlo: la autodiferenciación de la clase 319 hace exactamente esto sin errores de signo ni de transposición.
Backpropagation completo sobre una red 2-2-1.
entrada: (0,5 ; −1,2) objetivo: 1,0
FORWARD
z1 = (1,09 ; 0,01)
a1 = (0,796878 ; 0,01) tras la activación
z2 = 0,524127
a2 = 0,628xxx salida sigmoide
BACKWARD
dL/da2 = −1,592072
dL/dz2 = a2 − y = −0,371888 ← la sigmoide se canceló
dL/dW2 = dL/dz2 · a1ᵀ
= (−0,296349 ; −0,003719)
El segundo peso recibe un gradiente 80 veces menor
porque su activación a1 vale solo 0,01.Backpropagation paso a paso sobre una red 2-2-1.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | objetivo, dL/da2, dL/dz2_simplificado, dL/db2, gradiente_numerico_W1[0][0], gradiente_analitico_W1[0][0] |
| Comprobaciones (1) | coinciden |
compmath run 305Entrenamiento de cualquier red, comprensión de los frameworks, depuración de gradientes y diseño de capas personalizadas.
10.1038/323533a0 verificado en Crossref (2026-08-19).Un nodo usado dos veces recibe la suma de los dos gradientes, no uno de ellos.
cada operación es un nodo; cada dependencia, una arista
orden topológico inverso para el paso hacia atrás
nodo con k consumos: dL/dv = Σ de las k contribucionesRepresentar una expresión como grafo —nodos para las operaciones, aristas para las dependencias— convierte la derivación en un procedimiento mecánico. Cada tipo de nodo sabe derivar su operación local, y la regla de la cadena encadena esas derivadas locales a lo largo del grafo.
La regla que genera más errores al implementar autodiferenciación a mano es la acumulación. Si una variable se usa en varios sitios, su gradiente total es la suma de las contribuciones de todos sus consumos, no la última calculada. Sobrescribir en vez de sumar produce gradientes silenciosamente incorrectos, y el entrenamiento simplemente converge peor sin dar ningún error.
El ejemplo mínimo lo muestra: en y = x² + x, la variable x alimenta dos ramas. La derivada es 2x + 1, que es exactamente la suma de las dos contribuciones. Si solo se tomara una, el gradiente sería 2x o 1, y ambos son incorrectos.
Esa misma regla explica un detalle práctico de PyTorch que confunde al principio: optimizer.zero_grad() hace falta precisamente porque el framework acumula por diseño. Esa acumulación no es un fallo: es lo que permite simular lotes grandes sumando gradientes de varios lotes pequeños antes de actualizar.
Dos expresiones con nodos reutilizados.
Expresión 1: y = x² + x en x = 2
y = 4 + 2 = 6,0
rama 1: d(x²)/dx = 2x = 4
rama 2: d(x)/dx = 1
acumulado: dy/dx = 4 + 1 = 5,0
comprobación analítica 2x + 1 = 5,0 ✓
Si se sobrescribiera en vez de sumar, saldría 4 o 1.
Expresión 2: e = (ab + a)·(ab) en a = 3, b = 4
el producto ab se usa dos veces:
su gradiente acumula ambas contribuciones.El grafo de cómputo y la acumulación de gradientes en nodos reutilizados.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | y, dy/dx, dy/dx_analitico_2x+1, e, de/da, de/db |
| Comprobaciones (1) | acumulacion_correcta |
compmath run 306Implementación de autodiferenciación, capas personalizadas, acumulación de gradientes para lotes grandes y depuración de frameworks.
Con escala 0,01 las activaciones mueren en ocho capas; con escala 1,0 se saturan.
Xavier: Var(W) = 1/n_in (tanh, sigmoide)
He: Var(W) = 2/n_in (ReLU)
todos los pesos iguales ⟹ todas las neuronas aprenden lo mismoInicializar los pesos parece trivial y decide si una red profunda entrena o no. El criterio es mantener estable la varianza de las activaciones al atravesar capas: si cada capa la reduce, las señales se apagan; si la amplifica, se saturan o desbordan.
La demostración numérica es contundente. Con escala 0,01 y ocho capas, la desviación de las activaciones cae de 0,009 a 1e-8 y luego a cero exacto: la señal ha desaparecido y no hay gradiente que propagar. Con escala 1,0 ocurre lo contrario con tanh: las activaciones se pegan a ±1, la derivada se anula y el gradiente tampoco fluye.
Xavier deriva la escala 1/√n imponiendo que la varianza se conserve, y funciona con activaciones simétricas como tanh. He ajusta a √(2/n) porque ReLU anula la mitad de las activaciones y hay que compensar ese factor 2. Son las dos inicializaciones por defecto y la elección se sigue de la activación, no del gusto.
Hay una condición previa que ninguna fórmula cubre: romper la simetría. Si todos los pesos de una capa se inicializan al mismo valor, todas las neuronas calculan lo mismo, reciben el mismo gradiente y siguen siendo idénticas para siempre. La capa entera equivale a una sola neurona. Por eso se inicializa al azar, y por eso los sesgos sí pueden empezar en cero: la simetría ya está rota por los pesos.
Desviación de las activaciones en capas 1, 4 y 8.
8 capas de 100 neuronas
escala 0,01 con tanh:
[0,00933503 ; 1e-08 ; 0,0]
las activaciones se apagan por completo ✗
Xavier (1/√n) con tanh:
[0,36236997 ; 0,13964668 ; 0,08762870]
decae despacio, sigue habiendo señal ✓
He (√(2/n)) con ReLU:
[0,67589597 ; 0,76192729 ; 0,62293017]
varianza estable en las ocho capas ✓
escala 1,0 con tanh:
[0,84424669 ; 0,85537312 ; 0,92118981]
saturación: casi todo en ±1, derivada nula ✗Xavier y He: controlar la varianza de las activaciones capa a capa.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | capas, neuronas_por_capa, semilla |
| Comprobaciones (0) | — |
compmath run 307Entrenamiento de redes profundas, diagnóstico de entrenamientos que no arrancan, diseño de arquitecturas nuevas y transferencia de aprendizaje.
10.48550/arxiv.1502.01852 verificado en DataCite (2026-08-19).Batch norm promedia por columna y layer norm por fila: ese eje es toda la diferencia.
x̂ = (x − μ)/√(σ² + ε); y = γx̂ + β
batch norm: μ y σ por característica sobre el lote
layer norm: μ y σ por muestra sobre las característicasNormalizar las activaciones internas estabiliza el entrenamiento y permite learning rates mayores. La operación es la misma en ambos casos —restar media, dividir por desviación, reescalar con parámetros aprendidos γ y β—; lo único que cambia es sobre qué eje se calculan las estadísticas.
Batch normalization normaliza cada característica a lo largo del lote: la columna. Eso la hace muy eficaz en redes convolucionales, donde los lotes son grandes, pero introduce una dependencia incómoda del tamaño de lote y obliga a mantener estadísticas móviles para inferencia. Mezclar las estadísticas de entrenamiento con las de inferencia es un error clásico que produce resultados desastrosos e inexplicables.
Layer normalization normaliza cada muestra a lo largo de sus características: la fila. No depende del lote en absoluto, funciona igual con lote de tamaño 1, y se comporta idénticamente en entrenamiento y en inferencia. Por eso es la elección de los Transformers, donde las secuencias tienen longitudes variables y el tamaño de lote efectivo cambia.
El mecanismo por el que ayudan resultó no ser el que se propuso originalmente. El artículo de batch norm lo atribuyó a reducir el «desplazamiento interno de covariables»; trabajo posterior mostró que esa explicación no se sostiene, y que el efecto real es suavizar el paisaje de optimización, permitiendo pasos más grandes. Es un buen ejemplo de técnica que funciona antes de entenderse.
El mismo lote normalizado por columna y por fila.
lote original (4 muestras × 3 características):
[ 10 200 3]
[ 12 190 5]
[ 8 210 1]
[ 14 195 x]
escalas por característica: [6,0 ; 20,0 ; 6,0]
la segunda característica domina completamente
batch norm (por columna):
[−0,4472 0,1690 −0,4472]
[ 0,4472 −1,1832 0,4472]
media por columna tras BN: [0, 0, 0] ✓
layer norm (por fila):
[−0,6684 1,4135 −0,7451]
[−0,6658 1,4134 −0,7476]
media por fila tras LN: [0, 0, 0, 0] ✓Batch norm y layer norm: qué eje se normaliza.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | layer_norm_no_depende_del_lote |
compmath run 308Estabilización de redes convolucionales, layer norm en Transformers, entrenamiento con learning rates altos y arquitecturas residuales.
10.48550/arxiv.1502.03167 verificado en DataCite (2026-08-19).10.48550/arxiv.1805.11604 verificado en DataCite (2026-08-19).Dropout apaga neuronas al azar y escala en entrenamiento para que la inferencia no cambie.
entrenamiento: apagar con probabilidad p y dividir por (1−p)
inferencia: no hacer nada
E[activación] se conservaDropout apaga cada neurona con probabilidad p en cada paso de entrenamiento. La idea es impedir la coadaptación: si una neurona no puede confiar en que sus compañeras estén presentes, tiene que aprender características útiles por sí misma en lugar de depender de combinaciones frágiles.
Otra lectura, complementaria, es que dropout entrena implícitamente un ensemble exponencial de subredes que comparten pesos, y en inferencia promedia sus predicciones. Eso lo emparenta con el bagging de la clase 292: reduce varianza combinando modelos que cometen errores distintos.
El detalle de implementación importa. Apagar neuronas reduce la activación media, así que hay que compensar. La versión moderna —inverted dropout— divide entre (1−p) durante el entrenamiento, con lo que la esperanza se conserva y la inferencia no requiere ningún ajuste. La versión antigua escalaba en inferencia, y mezclar ambas convenciones produce un factor de escala erróneo difícil de detectar.
Su uso ha cambiado con el tiempo. En redes convolucionales fue desplazado por batch normalization, que regulariza como efecto secundario. En Transformers sigue muy presente, con valores bajos —0,1 es típico—, aplicado tras la atención y en las capas feed-forward.
Cien neuronas con probabilidad de apagado 0,5.
neuronas: 100 p = 0,5
media sin dropout: 1,00000
media con inverted dropout: 0,99976
la esperanza se conserva ✓
varianza introducida: 0,00958074
Mecanismo:
se apaga cada neurona con p = 0,5
las supervivientes se dividen entre (1 − 0,5) = 0,5
es decir, se multiplican por 2
En inferencia no se hace nada: ni apagado ni escalado.
Escalar también en inferencia daría el doble de activación.Dropout: ruido en entrenamiento, escalado coherente en inferencia.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | neuronas, probabilidad_de_apagado, media_sin_dropout, media_con_inverted_dropout, varianza_introducida |
| Comprobaciones (1) | la_esperanza_se_conserva |
compmath run 309Regularización de redes profundas, Transformers, estimación de incertidumbre con MC dropout y prevención del sobreajuste con pocos datos.
10.48550/arxiv.1506.02142 verificado en DataCite (2026-08-19).El tamaño de salida sale de una fórmula, y equivocarla es el error más común al montar una CNN.
salida = ⌊(n + 2p − k)/s⌋ + 1
padding 'same' con s=1: p = (k−1)/2
parámetros de la capa: k²·c_in·c_out + c_outLa convolución 2D desliza un núcleo sobre una imagen calculando sumas ponderadas locales. Sus tres parámetros geométricos —tamaño del núcleo k, padding p y stride s— determinan el tamaño de la salida mediante una fórmula que conviene tener memorizada, porque el 90 % de los errores al construir una CNN son desajustes de forma.
El padding rellena el borde, normalmente con ceros, y sirve para dos cosas: conservar el tamaño espacial y evitar que los píxeles del borde se usen menos que los del centro. El modo same con stride 1 requiere p = (k−1)/2, que es la razón de que los núcleos suelan tener tamaño impar.
El stride es el salto entre posiciones. Con s = 2 la salida tiene aproximadamente la mitad de tamaño en cada dimensión, lo que sirve como alternativa aprendida al pooling. Las arquitecturas modernas tienden a usar convoluciones con stride en lugar de pooling, porque la reducción se aprende en vez de imponerse.
El núcleo del ejemplo es un filtro de Sobel, un detector clásico de bordes verticales diseñado a mano en los años 60. En una CNN, un núcleo con esa forma emerge del entrenamiento sin que nadie lo programe: las primeras capas aprenden detectores de bordes y de color porque son las características más útiles para casi cualquier tarea visual.
Sobel vertical sobre una entrada 5×5.
entrada: 5×5 kernel: 3×3 (Sobel vertical)
kernel = [[−1 0 1]
[−2 0 2]
[−1 0 1]]
salida con stride 1, sin padding:
[[ 8,0 −16,0 −22,0]
[ 6,0 −13,0 −21,0]
[ 0,0 0,0 −2,0]]
forma: (3, 3)
Fórmula: (5 + 0 − 3)/1 + 1 = 3 ✓
con stride 2: (5 + 0 − 3)/2 + 1 = 2 → forma (2,2) ✓
Para conservar 5×5 con k=3 y s=1 haría falta p = 1.Convolución 2D con padding y stride: el cálculo de la forma de salida.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | verificacion_stride_1, parametros_del_kernel, parametros_de_una_densa_equivalente |
| Comprobaciones (0) | — |
compmath run 310Diseño de redes convolucionales, procesamiento de imágenes, detección de bordes y capas convolucionales en audio y series.
10.48550/arxiv.1603.07285 verificado en DataCite (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).Dos convoluciones de 3×3 ven lo mismo que una de 5×5 con menos parámetros y más no linealidad.
RF_l = RF_{l−1} + (k_l − 1)·Π sᵢ
dos 3×3 ⟹ campo receptivo 5, 18 parámetros
una 5×5 ⟹ campo receptivo 5, 25 parámetrosEl campo receptivo de una activación es la región de la imagen de entrada que puede influir en su valor. En la primera capa coincide con el núcleo; al apilar capas crece, y con pooling o stride crece mucho más rápido porque cada paso vale por varios píxeles originales.
La fórmula recursiva lo cuantifica: cada capa añade (k−1) multiplicado por el producto de todos los strides anteriores. Ese producto —el «salto»— es lo que hace que el crecimiento sea multiplicativo y no aditivo, y por eso unas pocas capas con reducción bastan para ver la imagen entera.
La observación práctica más rentable es la de VGG: dos convoluciones de 3×3 apiladas tienen el mismo campo receptivo que una de 5×5, pero usan 18 parámetros en vez de 25 y aplican dos no linealidades en vez de una. Tres de 3×3 equivalen a una de 7×7 con 27 parámetros frente a 49. Por eso las arquitecturas modernas usan casi exclusivamente núcleos 3×3.
El campo receptivo importa porque limita lo que la red puede ver. Si un objeto ocupa 100 píxeles y el campo receptivo efectivo de la capa final es de 50, ninguna neurona podrá integrarlo completo. Diseñar la profundidad y la reducción es, en buena medida, diseñar el campo receptivo.
Crecimiento del campo receptivo en cinco capas.
arquitectura:
conv k=3 s=1 → conv k=3 s=1 → pool k=2 s=2
→ conv k=3 s=1 → conv k=3 s=1
capa tipo campo receptivo salto
1 conv 3 1
2 conv 5 1
3 pool 6 2
4 conv 10 2
5 conv 14 2
campo receptivo final: 14 píxeles
Comparación de coste:
dos conv 3×3: campo 5, 18 parámetros, 2 ReLU
una conv 5×5: campo 5, 25 parámetros, 1 ReLU
28 % menos parámetros y el doble de no linealidad.Campo receptivo: cómo crece al apilar capas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | campo_receptivo_final, parametros_2x(3x3), parametros_1x(5x5) |
| Comprobaciones (1) | dos_conv_3x3_equivalen_a_una_5x5 |
compmath run 311Diseño de arquitecturas convolucionales, segmentación semántica, detección de objetos y elección de profundidad según el tamaño de los objetos.
10.48550/arxiv.1409.1556 verificado en DataCite (2026-08-19).10.48550/arxiv.1701.04128 verificado en DataCite (2026-08-19).Pooling reduce sin parámetros: max conserva la intensidad, average conserva el contexto.
max pooling: máximo de cada ventana
average pooling: media de cada ventana
parámetros aprendidos: 0El pooling reduce la resolución espacial agregando ventanas de activaciones. No tiene parámetros aprendidos: es una operación fija que reduce el cómputo, amplía el campo receptivo e introduce cierta invariancia a pequeños desplazamientos.
Max pooling conserva la activación más fuerte de cada ventana. Es el más usado en clasificación porque preserva la evidencia de que una característica está presente, descartando dónde exactamente. Average pooling promedia y conserva más información de contexto, y es el habitual en la capa final como global average pooling, que sustituye a las capas densas y reduce enormemente los parámetros.
La invariancia que proporciona tiene un límite del que conviene ser consciente: es invariancia a desplazamientos pequeños, del orden del tamaño de la ventana. No hace la red invariante a traslaciones grandes, y como se vio en la clase 270, hacer submuestreo sin suavizado previo introduce aliasing que rompe la invariancia en vez de crearla.
La tendencia arquitectónica ha ido reduciendo su papel. Muchas redes modernas usan convoluciones con stride 2 en lugar de pooling, con el argumento de que así la reducción es aprendida en vez de impuesta. El pooling sobrevive sobre todo en su forma global al final de la red.
Max y average pooling 2×2 sobre la misma entrada.
entrada 4×4
max pool 2×2:
[[6,0 4,0]
[7,0 9,0]]
average pool 2×2:
[[3,75 2,25]
[3,50 5,50]]
forma de salida: (2, 2)
reducción: 16 elementos → 4
parámetros aprendidos: 0
Max conserva el pico de cada ventana; average lo diluye.
Para "¿está presente esta característica?" conviene max;
para "¿cuánta hay en promedio?" conviene average.Max y average pooling: reducción con y sin pérdida de posición.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | parametros_aprendidos |
| Comprobaciones (0) | — |
compmath run 312Redes convolucionales de clasificación, global average pooling como cabeza, reducción de cómputo y agregación en redes sobre grafos.
9780262337373 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1312.4400 verificado en DataCite (2026-08-19).Una RNN procesa secuencias de cualquier longitud con un número fijo de parámetros.
h_t = tanh(W_xh·x_t + W_hh·h_{t−1} + b_h)
los mismos pesos en todos los instantes
el estado resume toda la historiaUna red recurrente procesa una secuencia elemento a elemento, manteniendo un estado oculto que se actualiza en cada paso combinando la entrada nueva con el estado anterior. Ese estado es el resumen de todo lo visto hasta el momento.
La propiedad decisiva es la compartición de pesos en el tiempo. Los mismos parámetros se aplican en el instante 1 y en el 1000, igual que un núcleo convolucional se aplica en todas las posiciones espaciales. Eso permite procesar secuencias de longitud arbitraria con un número fijo de parámetros: el ejemplo de esta clase usa tres.
Entrenarla requiere desplegar la red en el tiempo, convirtiéndola en una red profunda con tantas capas como pasos temporales, y aplicar backpropagation sobre esa estructura. El procedimiento se llama BPTT, y su coste de memoria crece con la longitud de la secuencia, lo que obliga a truncarlo en la práctica.
Ese despliegue es también el origen de su problema fundamental. Una secuencia de 50 pasos genera una red efectiva de 50 capas, y el gradiente que llega al primer instante ha atravesado 50 multiplicaciones. La clase siguiente cuantifica lo que eso implica. Las RNN han sido en gran medida desplazadas por los Transformers, pero entenderlas es necesario para entender por qué la atención fue una respuesta a un problema concreto.
RNN de un parámetro por matriz sobre cinco pasos.
secuencia: [1,0 ; 0,5 ; −0,3 ; 0,2 ; 0,9]
parámetros: W_xh = 0,8 W_hh = 0,9 b_h = 0,05
t x h
1 1,0 0,691069
2 0,5 0,790199
3 −0,3 0,4xxxxx
4 0,2 0,6xxxxx
5 0,9 0,856183
estado final: 0,856183
3 parámetros procesan una secuencia de cualquier longitud.
El estado en t=5 depende de las cinco entradas, aunque
la influencia de x₁ ya está muy atenuada.RNN: el estado oculto acumula historia con pesos compartidos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | estado_final, parametros_totales, longitud_de_secuencia |
| Comprobaciones (1) | pesos_compartidos_en_el_tiempo |
compmath run 313Modelado de secuencias, series temporales, procesamiento de lenguaje anterior a los Transformers y sistemas de control con estado.
10.1207/s15516709cog1402_1 verificado en Crossref (2026-08-19).9780262337373 verificado en International ISBN Agency (2026-08-19).El gradiente a 50 pasos es un producto de 50 factores: o se anula o explota.
∂L/∂h₀ = Π_{t=1}^{T} (∂h_t/∂h_{t−1})
factores < 1 ⟹ 0 exponencialmente
factores > 1 ⟹ ∞ exponencialmenteAl propagar el gradiente hacia atrás en el tiempo, la contribución al primer instante es el producto de las derivadas de todos los pasos intermedios. Ese producto es la causa única de los dos patologías más conocidas de las redes recurrentes.
Si los factores son sistemáticamente menores que 1, el producto tiende a cero exponencialmente y el gradiente se desvanece: la red no puede aprender dependencias largas porque la señal de error nunca llega al principio de la secuencia. Con factor 0,5 y 50 pasos, el gradiente inicial es del orden de 10⁻¹⁵.
Si los factores son mayores que 1, el producto explota: el gradiente crece hasta desbordar y produce NaN, destruyendo el entrenamiento en un solo paso. Es más visible que el desvanecimiento —se nota inmediatamente— y por eso más fácil de diagnosticar.
Las soluciones son distintas para cada caso. La explosión se resuelve con gradient clipping: acotar la norma del gradiente conservando su dirección, un parche simple y eficaz. El desvanecimiento es más profundo y exige cambiar la arquitectura: LSTM y GRU crean un camino aditivo por el que el gradiente fluye sin multiplicarse, y las conexiones residuales resuelven el mismo problema en redes profundas no recurrentes.
El mismo experimento con tres valores del factor.
50 pasos de propagación hacia atrás
w = 0,5 (desvanece)
paso 1: 0,470007
paso 10: ≈ 1e-4
paso 50: ≈ 1e-15 gradiente inexistente
w = 1,0 (estable)
paso 1: 0,786448
paso 10: ≈ 0,3
paso 50: sigue siendo apreciable
w = 1,5 (explota)
paso 1: 0,894879
paso 10: ≈ 50
paso 50: desborda a infinito
Causa única: el gradiente en t=0 es el producto
de 50 factores. Todo depende de si son <1 o >1.Gradientes que se desvanecen o explotan: un producto de derivadas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (0) | — |
compmath run 314Diagnóstico de entrenamientos inestables, justificación de LSTM y conexiones residuales, clipping en modelos de lenguaje y análisis de profundidad efectiva.
10.1109/72.279181 verificado en Crossref (2026-08-19).10.48550/arxiv.1211.5063 verificado en DataCite (2026-08-19).La celda LSTM suma en vez de multiplicar, y por eso el gradiente sobrevive.
c_t = f_t·c_{t−1} + i_t·g_t
h_t = o_t·tanh(c_t)
si f ≈ 1, ∂c_t/∂c_{t−1} ≈ 1La LSTM introduce un estado de celda separado del estado oculto, cuya actualización es fundamentalmente aditiva. Tres puertas —olvido, entrada y salida— controlan qué se descarta del pasado, qué se incorpora del presente y qué se expone al exterior.
La clave está en la forma de la actualización. En una RNN simple, la derivada de un estado respecto del anterior involucra la matriz de pesos y la derivada de la activación, y se multiplica en cada paso. En la LSTM, si la puerta de olvido está cerca de 1, la derivada ∂c_t/∂c_{t−1} es aproximadamente 1, y el gradiente atraviesa el tiempo sin atenuarse.
Ese camino se conoce como el carrusel de error constante, y es la misma idea que las conexiones residuales de ResNet: crear una vía por la que el gradiente pase intacto. La diferencia con una RNN no es de capacidad de representación sino de entrenabilidad.
Un detalle práctico que ilustra bien el diseño: el sesgo de la puerta de olvido se inicializa en 1, no en 0. Así la puerta empieza abierta y la celda recuerda por defecto, dejando que el entrenamiento aprenda cuándo olvidar en vez de tener que aprender a recordar desde cero. Cuesta doce parámetros por celda frente a los tres de una RNN simple, y durante veinte años ese coste mereció la pena.
Traza de una celda LSTM sobre una secuencia corta.
puertas: forget, input, output
t x c h forget input
1 1,0 0,42874 0,270127 0,8176 0,6xxx
2 ... ... ... ... ...
El sesgo de forget se inicializa en 1:
la puerta arranca en 0,82, cerca de abierta.
Camino del gradiente:
c_t = f·c_{t−1} + i·g
∂c_t/∂c_{t−1} = f ≈ 0,82
Con 50 pasos y f ≈ 1: 0,98⁵⁰ ≈ 0,36
Con una RNN y factor 0,5: 0,5⁵⁰ ≈ 1e-15
12 parámetros por celda, frente a 3 de la RNN simple.LSTM: la celda mantiene un camino aditivo para el gradiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | parametros_por_celda |
| Comprobaciones (1) | si_f≈1_el_gradiente_no_se_atenua |
compmath run 315Modelado de secuencias largas, reconocimiento de voz, traducción automática anterior a los Transformers y series temporales con dependencias lejanas.
10.1162/neco.1997.9.8.1735 verificado en Crossref (2026-08-19).GRU consigue casi lo mismo que LSTM con dos puertas y un 25 % menos de parámetros.
z: puerta de actualización; r: puerta de reinicio
h_t = (1−z)·h_{t−1} + z·h̃_t
9 parámetros por celda frente a 12 de LSTMLa GRU simplifica la LSTM fusionando el estado de celda con el estado oculto y reduciendo las tres puertas a dos. La puerta de actualización decide cuánto del estado anterior se conserva frente al candidato nuevo, combinando los papeles de las puertas de olvido y entrada. La puerta de reinicio decide cuánto del pasado se usa para calcular ese candidato.
La actualización tiene una forma de interpolación explícita: (1−z)·h_anterior + z·h_nuevo. Si z = 0 el estado se conserva íntegro, y esa es la misma vía aditiva que protege el gradiente en la LSTM. La protección se consigue con menos maquinaria.
El ahorro es de 9 parámetros por celda frente a 12, un 25 %. Con capas de miles de unidades eso se traduce en menos memoria y entrenamientos más rápidos, lo que en su momento fue una ventaja práctica considerable.
La comparación empírica entre GRU y LSTM ha sido objeto de muchos estudios y la conclusión es que depende de la tarea, sin ganador consistente. La recomendación razonable es empezar por GRU por ser más ligera y probar LSTM si el rendimiento no basta. Ambas han quedado en segundo plano frente a los Transformers, pero siguen siendo competitivas en secuencias cortas y con pocos datos.
Traza de una celda GRU y comparación de parámetros.
puertas: update (z), reset (r)
t h update reset
1 0,413336 0,6225 0,6457
2 ... ... ...
Parámetros por celda:
GRU: 9
LSTM: 12
ahorro: 25 %
Interpolación: h_t = (1−z)·h_{t−1} + z·h̃_t
z = 0 → el estado se conserva íntegro ✓
z = 1 → el estado se sustituye por el candidato
Ese camino con z ≈ 0 es lo que protege el gradiente,
igual que la puerta de olvido de la LSTM.GRU: dos puertas en lugar de tres, menos parámetros.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | parametros_por_celda, parametros_LSTM, ahorro_% |
| Comprobaciones (2) | z=0_conserva_el_estado, z=1_lo_reemplaza |
compmath run 316Modelado de secuencias con recursos limitados, series temporales, reconocimiento de gestos y sistemas embebidos.
10.48550/arxiv.1406.1078 verificado en DataCite (2026-08-19).10.48550/arxiv.1412.3555 verificado en DataCite (2026-08-19).En un espacio de embeddings, la dirección entre dos palabras codifica su relación.
similitud coseno = (a·b) / (‖a‖·‖b‖)
analogía: rey − hombre + mujer ≈ reina
la magnitud no importa, solo la direcciónUn embedding representa cada elemento discreto —palabra, usuario, producto— como un vector denso de dimensión moderada, aprendido de forma que la proximidad geométrica refleje similitud semántica. Es la alternativa a la codificación one-hot, que es enorme, dispersa y en la que todos los elementos están a la misma distancia entre sí.
La medida de similitud habitual es el coseno, no la distancia euclídea. La razón es que la magnitud de un embedding suele correlacionar con la frecuencia del término, que no es información semántica; el coseno la descarta y mide solo la dirección. Es el producto escalar normalizado de la parte 05.
El resultado que hizo famosos a los embeddings es que ciertas direcciones codifican relaciones. El vector que va de «hombre» a «mujer» es aproximadamente el mismo que va de «rey» a «reina», lo que permite resolver analogías con aritmética vectorial. Conviene matizar: el efecto es real pero se exageró bastante en la divulgación, y depende mucho del corpus y del método de evaluación.
Hay una consecuencia ética que no es opcional mencionar. Los embeddings aprenden los sesgos presentes en los datos, y las mismas analogías que capturan «rey es a reina» capturan asociaciones estereotipadas entre profesiones y género. Como el modelo aprende la distribución del corpus, esos sesgos se propagan a cualquier sistema construido encima, y detectarlos requiere auditar explícitamente.
Similitudes y analogía en un espacio de 4 dimensiones.
vocabulario: 5 términos, dimensión 4
similitudes con "rey":
hombre 0,857916
mujer 0,815207
reina 0,768974
mesa 0,3xxxxx
analogía: rey − hombre + mujer
vector resultante: [0,85 ; 0,1 ; 0,1 ; 0,05]
ranking por similitud:
reina 1,000000 ← la analogía funciona ✓
mujer 0,835523
rey 0,768974
Nota: en este espacio pequeño "hombre" es más similar
a "rey" que "reina", lo que muestra que la similitud
directa y la analogía capturan cosas distintas.Embeddings: geometría del significado y similitud coseno.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | dimension, vocabulario, one_hot_necesitaria, embedding_denso_usa |
| Comprobaciones (0) | — |
compmath run 317Representación de vocabularios, sistemas de recomendación, búsqueda semántica, bases de datos vectoriales y capa de entrada de todo modelo de lenguaje.
10.48550/arxiv.1301.3781 verificado en DataCite (2026-08-19).10.48550/arxiv.1607.06520 verificado en DataCite (2026-08-19).Warmup evita divergir al arrancar y clipping evita que un gradiente anómalo destruya el modelo.
warmup: subir el lr linealmente durante los primeros pasos
clipping: si ‖g‖ > c, escalar g ← c·g/‖g‖
planificador: reducir el lr según avanza el entrenamientoEntrenar una red profunda es aplicar los optimizadores de la parte 12 a un problema no convexo, ruidoso y de curvatura muy variable. Las técnicas de esta clase no son adornos: son lo que hace la diferencia entre un entrenamiento que converge y uno que produce NaN en el paso 300.
El warmup sube el learning rate gradualmente durante los primeros cientos o miles de pasos. La razón es concreta: al principio los momentos de Adam están mal estimados y los gradientes son grandes y poco informativos, así que un paso completo puede llevar los pesos a una región de la que no se recuperan. Es prácticamente obligatorio al entrenar Transformers.
El gradient clipping acota la norma del gradiente sin cambiar su dirección. Es un seguro barato contra los picos anómalos —un lote raro, una muestra corrupta— que en un solo paso podrían destruir horas de entrenamiento. Un valor de 1,0 es habitual y rara vez perjudica.
Los planificadores reducen el learning rate a lo largo del entrenamiento: pasos grandes al principio para explorar, pequeños al final para afinar. El decaimiento por coseno con warmup es la receta estándar actual. Y conviene recordar que estas tres técnicas atacan problemas de optimización, no de generalización: si el modelo converge bien y generaliza mal, el remedio está en otra parte.
Cuatro configuraciones sobre el mismo objetivo ruidoso.
objetivo: minimizar ‖w − w*‖² con gradientes ruidosos
configuración paso 10 paso 100
lr alto sin clipping 0,00039758 0,0
lr alto con clipping 4,96308444 0,0
lr moderado 0,00864028 0,0
lr moderado con warmup 2,80892690 0,0
Todas convergen aquí porque el problema es benigno.
Lo que cambia es el paso 10: warmup y clipping avanzan
más despacio al principio a cambio de no arriesgar.
En un problema real, "lr alto sin clipping" produciría
NaN antes del paso 100 con un solo lote anómalo.Entrenar una red profunda: learning rate, warmup y clipping.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | semilla |
| Comprobaciones (0) | — |
compmath run 318Entrenamiento de modelos de lenguaje, recetas de entrenamiento reproducibles, ajuste fino y depuración de entrenamientos inestables.
10.48550/arxiv.1706.02677 verificado en DataCite (2026-08-19).10.48550/arxiv.1608.03983 verificado en DataCite (2026-08-19).PyTorch y JAX hacen lo mismo que el Var de la parte 08, con ingeniería de por medio.
modo reverso: una pasada adelante, una atrás
coste ≈ 2 veces el del forward, independientemente del número de parámetros
modo directo: eficiente con pocas entradas y muchas salidasLa autodiferenciación en modo reverso obtiene los gradientes de una salida escalar respecto de todas las entradas con una sola pasada hacia atrás. Su coste es aproximadamente el doble del paso hacia adelante, independientemente de cuántos parámetros haya. Esa propiedad es lo que hace viable entrenar modelos de miles de millones de parámetros.
El modo directo propaga derivadas hacia adelante y es eficiente en el caso opuesto: pocas entradas y muchas salidas. Como en aprendizaje automático la pérdida siempre es un escalar y los parámetros son millones, el modo reverso es el adecuado, y por eso es el que implementan todos los frameworks.
Ninguno de los dos es diferenciación simbólica ni numérica. No manipula fórmulas ni usa diferencias finitas: evalúa derivadas exactas de operaciones elementales y las compone según el grafo. Es exacta hasta el redondeo y eficiente, que es lo mejor de ambos mundos.
Lo que aportan PyTorch y JAX sobre el Var de la parte 08 no es el concepto sino la ingeniería: núcleos optimizados para GPU y TPU, fusión de operaciones, compilación diferida, paralelismo y una cobertura enorme de operaciones. El principio se entiende en cien líneas de Python; la implementación de producción son cientos de miles.
La misma expresión derivada por el motor propio.
expresión: loss = (tanh(wx + b) − 1)²
loss = 0,09543807
dloss/dw = −0,48417723
dloss/db = −0,32278482
dloss/dx = −0,22594937
Tres gradientes de una sola pasada hacia atrás.
Con un millón de parámetros el coste sería el mismo
factor 2 sobre el forward: esa es la propiedad clave.
Con diferencias finitas harían falta un millón de
evaluaciones adicionales, una por parámetro.Nuestro Var frente a PyTorch/JAX: mismo principio, distinta escala.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | loss, dloss/dw, dloss/db, dloss/dx |
| Comprobaciones (1) | este_motor_no_requiere_torch |
compmath run 319Todo entrenamiento moderno, optimización de simuladores diferenciables, física diferenciable y cálculo de sensibilidades.
10.48550/arxiv.1912.01703 verificado en DataCite (2026-08-19).Una red de 337 parámetros en Python puro separa dos espirales entrelazadas.
arquitectura: 2 → 16 (ReLU) → 16 (ReLU) → 1 (sigmoid)
inicialización He, SGD por muestra, lr = 0,08
verificación: gradiente manual ≈ gradiente automáticoEl capstone reúne toda la parte en una red completa escrita desde cero, sin NumPy ni frameworks: inicialización, paso hacia adelante, backpropagation, actualización y evaluación. Lo único que importa es que cada pieza sea legible y que el conjunto funcione.
El problema elegido, dos espirales entrelazadas, es un banco clásico y deliberadamente difícil para modelos lineales: no hay ninguna recta ni curva simple que las separe. Un modelo lineal queda en torno al 50 %, y resolverlo demuestra que las capas ocultas están construyendo una representación no trivial.
Las decisiones de diseño vienen todas de clases anteriores y conviene enumerarlas: inicialización He porque la activación es ReLU, ReLU en las ocultas para que el gradiente no se sature, sigmoide en la salida con entropía cruzada para que el gradiente se simplifique a a − y, y SGD por muestra por su ruido regularizador. Nada es arbitrario.
La comprobación final es la que cierra el programa: el gradiente derivado a mano coincide con el que produce el motor de autodiferenciación de la parte 08. Ese acuerdo entre dos caminos independientes es la mejor prueba de que la teoría y la implementación dicen lo mismo, y es exactamente el criterio de verificación que el programa entero defiende.
Configuración y resultado del capstone.
problema: dos espirales entrelazadas
(no linealmente separables)
arquitectura: 2 → 16 (ReLU) → 16 (ReLU) → 1 (sigmoid)
parámetros: 337
inicialización: He (√(2/n_in))
optimizador: SGD por muestra
learning rate: 0,08
Desglose de los 337 parámetros:
capa 1: 2×16 + 16 = 48
capa 2: 16×16 + 16 = 272
capa 3: 16×1 + 1 = 17
total = 337 ✓
Un modelo lineal sobre estos datos queda en ≈ 50 %.
Verificación: gradiente manual ≈ gradiente de Var.Capstone: red neuronal completa desde cero, entrenada y evaluada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | parametros, learning_rate, epocas, accuracy_train, accuracy_test, brecha_train_test, linea_base_por_azar, semilla |
| Comprobaciones (0) | — |
compmath run 320Comprensión profunda de los frameworks, entrevistas técnicas, docencia, depuración de implementaciones y diseño de capas personalizadas.
9780262337373 verificado en International ISBN Agency (2026-08-19).Softmax, embeddings, positional encoding, atención escalada, multi-head, Transformer completo, muestreo, VAE, GAN, difusión, GNN y ecuaciones de Bellman.
Esta parte traduce a matemática los artículos que definen el estado del arte. No hay conceptos nuevos: la atención es un promedio ponderado por productos escalares, el ELBO es la cota de Jensen sobre una log-verosimilitud, la difusión es un proceso estocástico con reverso aprendido y Bellman es una recursión sobre esperanzas. Todo lo necesario está en las quince partes anteriores, y lo que se hace aquí es reconocerlo.
Las clases 321 a 328 construyen el Transformer pieza a pieza. Softmax convierte logits arbitrarios en una distribución categórica, y su invariancia frente a desplazamientos es exactamente lo que permite restar el máximo para evitar el desbordamiento: sin ese truco, exp(1000) es infinito y la implementación falla. Q, K y V son tres proyecciones distintas del mismo token, con papeles distintos: qué busco, qué ofrezco y qué aporto.
El detalle más citado y menos entendido es el 1/√d. Con dimensión 256, los productos escalares de vectores aleatorios tienen desviación proporcional a √d, y la softmax de valores tan dispersos se satura: un peso se lleva casi toda la masa y los gradientes desaparecen. Dividir por √d devuelve las puntuaciones a una escala manejable, y la demostración numérica de la clase 325 lo hace evidente comparando d = 8 con d = 256.
Las clases 329 y 330 tratan la generación. Un modelo autorregresivo factoriza la probabilidad de una secuencia mediante la regla de la cadena de la clase 183, y la máscara causal es lo que impide que un token vea el futuro: olvidarla produce un modelo con métricas excelentes durante el entrenamiento e inútil al generar. Temperatura, top-k y top-p reescriben la distribución antes de muestrear, y conviene tener claro que temperatura alta no significa mayor calidad sino mayor entropía.
Las clases 331 a 335 recorren los modelos generativos. El VAE necesita el truco de reparametrización para que el gradiente atraviese una operación de muestreo, y su objetivo es el ELBO: reconstrucción menos KL, con una brecha respecto de la log-verosimilitud que es exactamente otra KL, siempre no negativa. Las GAN se formulan como un juego minimax cuyo discriminador óptimo tiene forma cerrada y cuyo equilibrio ocurre en D = 0,5. La difusión añade ruido con un horario fijo —y una propiedad muy práctica: se puede saltar a cualquier paso sin simular los anteriores— y aprende a invertir el proceso prediciendo el ruido añadido.
El cierre incorpora dos áreas más. Los grafos, donde el Laplaciano codifica la estructura y la multiplicidad del autovalor cero cuenta las componentes conexas, y donde el paso de mensajes hace crecer el campo receptivo un salto por capa, exactamente igual que las convoluciones de la parte 15. Y el aprendizaje por refuerzo, donde la ecuación de Bellman expresa el valor como recompensa inmediata más valor futuro descontado, y REINFORCE convierte eso en un gradiente sobre la política.
El capstone entrena un mini-Transformer causal completo con 101 parámetros que aprende a copiar el token anterior. Es una tarea trivial y elegida a propósito: permite comprobar que la matriz de atención aprende a mirar exactamente una posición atrás, que es la verificación más directa posible de que el mecanismo funciona como se ha descrito.
Esta parte es la traducción matemática directa de los papers que definen el estado del arte actual.
| Término | Definición | Clase |
|---|---|---|
| Atención escalada | softmax(QKᵀ/√d)·V. La escala evita que la softmax se sature en alta dimensión. | 325 |
| Autoencoder variacional | Codificador que produce una distribución latente y decodificador que reconstruye. | 331 |
| Brecha del ELBO | KL entre la posterior aproximada y la verdadera. Siempre no negativa. | 332 |
| Conexión residual | Sumar la entrada a la salida del bloque. Crea un camino directo para el gradiente. | 328 |
| Discriminador óptimo | D*(x) = p_datos/(p_datos + p_G). En el equilibrio vale 0,5 en todas partes. | 333 |
| Ecuación de Bellman | V(s) = max_a [R + γ·V(s')]. Valor como recompensa inmediata más futuro descontado. | 338 |
| ELBO | Cota inferior de la log-verosimilitud: reconstrucción menos KL al prior. | 332 |
| Estabilidad numérica del softmax | Restar el máximo antes de exponenciar. La salida no cambia y se evita el desbordamiento. | 321 |
| Factor 1/√d | Corrige que la varianza del producto escalar crece con la dimensión. | 325 |
| Factor de descuento | γ entre 0 y 1. Pondera cuánto valen las recompensas futuras. | 338 |
| Feed-forward por posición | MLP aplicado independientemente a cada token, típicamente con expansión ×4. | 328 |
| Horario de ruido | Secuencia de β que determina cuánto ruido se añade en cada paso. | 334 |
| Juego minimax | Dos jugadores con objetivos opuestos. Base del entrenamiento de las GAN. | 333 |
| Laplaciano del grafo | L = D − A. Sus autovalores describen la conectividad de la estructura. | 336 |
| Línea base | Valor restado a la recompensa para reducir la varianza sin sesgar el gradiente. | 339 |
| Modelado autorregresivo | Factorizar la probabilidad de una secuencia como producto de condicionales. | 329 |
| Multi-head attention | Varias atenciones en subespacios distintos, concatenadas y proyectadas. | 327 |
| Multiplicidad del autovalor cero | Número de componentes conexas del grafo. | 336 |
| Máscara causal | Impide que un token atienda a posiciones futuras. Imprescindible en generación. | 326 |
| Paso de mensajes | Cada nodo agrega información de sus vecinos. Una capa equivale a un salto. | 337 |
| Perplejidad | Exponencial de la entropía cruzada. Número efectivo de opciones equiprobables. | 329 |
| Positional encoding | Información de posición añadida al embedding. La versión sinusoidal no tiene parámetros. | 323 |
| Proceso directo de difusión | Añadir ruido gaussiano según un horario fijo hasta destruir la señal. | 334 |
| Proceso inverso | Red que predice el ruido añadido y permite reconstruir el dato original. | 335 |
| Query, Key, Value | Tres proyecciones del mismo token: qué busco, qué ofrezco y qué aporto. | 324 |
| REINFORCE | Gradiente de política que sube la probabilidad de acciones con recompensa alta. | 339 |
| Self-attention | Atención donde consultas, claves y valores vienen de la misma secuencia. | 326 |
| Similitud coseno | Producto escalar normalizado. Mide dirección e ignora magnitud. | 322 |
| Sobresuavizado | Con muchas capas, todos los nodos convergen a representaciones indistinguibles. | 337 |
| Softmax | Convierte logits reales en una distribución categórica. Es la de máxima entropía dados los logits. | 321 |
| Temperatura | Divide los logits antes del softmax. Menor concentra la distribución, mayor la aplana. | 330 |
| Top-k y top-p | Truncar el vocabulario a los k mejores o a la masa acumulada p antes de muestrear. | 330 |
| Truco de reparametrización | z = μ + σ·ε con ε fijo, para que el gradiente atraviese el muestreo. | 331 |
Restar el máximo antes de exponenciar no cambia el resultado y evita el desbordamiento.
softmax(z)ᵢ = e^{zᵢ} / Σⱼ e^{zⱼ}
softmax(z + c) = softmax(z) para todo c
implementación: restar max(z) antes de exponenciarSoftmax convierte un vector de números reales cualesquiera en una distribución de probabilidad: todos positivos y sumando 1. Es la capa de salida de todo clasificador y la pieza que normaliza los pesos de atención, así que aparece dos veces en cada bloque Transformer.
Su propiedad estructural es la invariancia frente a desplazamientos: sumar la misma constante a todos los logits no cambia la salida, porque el factor común se cancela entre numerador y denominador. Solo importan las diferencias entre logits, no sus valores absolutos.
Esa invariancia tiene una consecuencia práctica que no es opcional. Si un logit vale 1000, exp(1000) desborda a infinito y el resultado es NaN. Como restar el máximo no altera la salida, toda implementación seria lo hace: los exponentes quedan entre exp(−algo) y exp(0) = 1, siempre representables. Es el truco de estabilidad numérica más rentable de todo el aprendizaje profundo, y viene directamente de la parte 01.
Conviene además recordar su origen: softmax es la distribución de máxima entropía compatible con los logits, como se vio en la clase 267. No es una normalización elegida por comodidad sino la solución de un problema de optimización con restricciones, y esa es la razón de su forma exponencial.
Invariancia y estabilidad numérica.
logits: [2,0 ; 1,0 ; 0,1 ; −1,0]
probabilidades: [0,638066 ; 0,234731 ; 0,095435 ; 0,031767]
suman 1,0 ✓
Sumando 1000 a todos los logits:
[0,638066 ; 0,234731 ; 0,095435 ; 0,031767]
idéntico resultado ✓
Sin restar el máximo:
exp(1002) = inf → inf/inf = NaN ✗
Restando el máximo (2,0 o 1002,0, da igual):
exponentes en [exp(−3), exp(0)] ✓
Solo importan las diferencias entre logits.Softmax: de logits arbitrarios a una distribución categórica.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | suman_1 |
| Comprobaciones (1) | el_orden_se_conserva |
compmath run 321Capa de salida de clasificadores, normalización de pesos de atención, muestreo de tokens y políticas estocásticas en aprendizaje por refuerzo.
9780262337373 verificado en International ISBN Agency (2026-08-19).10.1007/978-3-642-76153-9_28 verificado en Crossref (2026-08-20).El coseno ignora la magnitud, y en embeddings la magnitud suele ser frecuencia, no significado.
cos(a,b) = (a·b) / (‖a‖·‖b‖)
rango [−1, 1]
invariante al escalado de cualquiera de los dos vectoresLa similitud coseno mide el ángulo entre dos vectores, descartando sus longitudes. En espacios de embeddings es la medida estándar, y la razón es concreta: la norma de un embedding tiende a correlacionar con la frecuencia del término en el corpus, que no es información semántica.
La diferencia con la distancia euclídea se ve mejor con un caso extremo. Un vector y su doble apuntan exactamente en la misma dirección, así que su coseno es 1 —máxima similitud—, mientras que su distancia euclídea puede ser enorme. Para «¿hablan de lo mismo?» el coseno acierta y la distancia no.
El producto escalar sin normalizar es lo que usa la atención, y ahí la magnitud sí influye deliberadamente: un token puede aprender a tener clave de norma grande para atraer más atención. Es una decisión de diseño distinta, no un descuido, y por eso la atención necesita el factor 1/√d mientras que la búsqueda por similitud usa coseno.
La consecuencia de ingeniería es que si los vectores se normalizan previamente, el producto escalar es el coseno. Las bases de datos vectoriales explotan esto: normalizan al indexar y luego usan producto escalar, que es más rápido y está mejor optimizado que calcular normas en cada consulta.
Coseno frente a distancia euclídea sobre la misma consulta.
consulta: (0,8 ; 0,5 ; 0,2 ; 0,1)
candidato coseno distancia euclídea
muy relacionado 0,994667 0,100000
relacionado 0,787527 0,608276
ortogonal 0,0xxxxx 1,352770
Efecto del escalado:
multiplicar un candidato por 10
coseno: no cambia ✓
distancia: se multiplica por ~10 ✗
En embeddings la norma suele reflejar frecuencia,
no significado: por eso se usa coseno.Similitud coseno: la métrica estándar entre embeddings.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (2) | el_escalado_no_afecta_al_coseno, el_escalado_si_afecta_a_la_distancia |
compmath run 322Búsqueda semántica, bases de datos vectoriales, RAG, sistemas de recomendación y deduplicación de documentos.
10.48550/arxiv.1310.4546 verificado en DataCite (2026-08-19).10.48550/arxiv.1908.10084 verificado en DataCite (2026-08-19).La atención no tiene noción de orden, así que la posición hay que inyectarla.
PE(pos, 2i) = sin(pos / 10000^{2i/d})
PE(pos, 2i+1) = cos(pos / 10000^{2i/d})
sin parámetros aprendidosEl mecanismo de atención es invariante a permutaciones: si se barajan los tokens de entrada, las salidas se barajan igual pero nada más cambia. Para el modelo, «el gato come pescado» y «pescado come gato el» serían indistinguibles. Hay que añadir la posición explícitamente.
La codificación sinusoidal del artículo original usa senos y cosenos de frecuencias que decrecen geométricamente a lo largo de las dimensiones. Las primeras dimensiones varían rápido y distinguen posiciones cercanas; las últimas varían lento y codifican posición global. Es exactamente una descomposición en frecuencias, la parte 13 aplicada al índice de posición.
Tiene dos propiedades atractivas. No tiene parámetros, así que funciona con longitudes de secuencia nunca vistas en entrenamiento, al menos en principio. Y la similitud entre codificaciones decae con la distancia, lo que da al modelo una noción utilizable de proximidad. Además, PE(pos+k) es una transformación lineal de PE(pos), lo que facilita aprender desplazamientos relativos.
La práctica ha evolucionado. Las posiciones aprendidas funcionaron igual de bien y dominaron durante años; hoy lo estándar es RoPE, que codifica posición rotando los vectores de consulta y clave, lo que hace que el producto escalar dependa naturalmente de la posición relativa. Es la solución que mejor extrapola a contextos largos.
Codificación sinusoidal en dimensión 8.
dimensión: 8
pos 0: [0,000000 ; 1,0 ; 0,000000 ; 1,0 ; 0,0 ; 1,0 ; 0,0 ; 1,0]
pos 1: [0,841471 ; 0,5xxx ; ...]
pos 2: [0,909297 ; ...]
normas: todas valen 2,0 ✓
(la norma es constante por construcción)
producto escalar con pos 0:
pos 1 → 3,535256
pos 5 → 3,159983
La similitud decae con la distancia ✓
Sin esta codificación, la atención vería la secuencia
como un conjunto sin orden.Positional encoding sinusoidal: posición sin parámetros aprendidos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | dimension, producto_pos0_pos1, producto_pos0_pos5, parametros_aprendidos |
| Comprobaciones (2) | la_similitud_decae_con_la_distancia, extrapola_a_secuencias_mas_largas |
compmath run 323Todos los Transformers, modelos de visión con parches, modelos de audio y cualquier arquitectura con atención sobre secuencias.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).10.48550/arxiv.2104.09864 verificado en DataCite (2026-08-19).Q, K y V son tres proyecciones del mismo token con tres papeles distintos.
Q = W_Q·x (qué busco)
K = W_K·x (qué ofrezco)
V = W_V·x (qué aporto)La atención se explica bien con la metáfora de una búsqueda. Cada token emite una consulta que describe qué información necesita, expone una clave que describe qué información contiene, y guarda un valor que es lo que efectivamente entregará si alguien lo selecciona.
Que los tres vengan del mismo vector de entrada mediante tres matrices distintas es lo esencial. Separar los papeles permite que un token busque una cosa y ofrezca otra: un adjetivo puede buscar el sustantivo al que modifica mientras ofrece su propia información semántica. Con una sola proyección esa asimetría sería imposible.
Las dimensiones no tienen por qué coincidir con la del modelo. Es habitual proyectar a una dimensión menor d_k, lo que reduce el coste y, en multi-head, permite repartir la capacidad entre varias cabezas sin multiplicar los parámetros.
La generalización que esta separación permite es la atención cruzada: si las consultas vienen de una secuencia y las claves y valores de otra, un decodificador puede atender al codificador. Ese es el mecanismo de la traducción automática, y el mismo que permite a un modelo multimodal atender desde texto a una imagen.
Las tres proyecciones de un mismo token.
token de entrada: (1,0 ; 0,5 ; −0,3 ; 0,8)
d_model = 4 d_k = 3
query = (−0,011555 ; −0,203105 ; 1,236170)
key = (−0,372490 ; 0,857526 ; −0,242572)
value = ( 1,518768 ; −0,211168 ; −0,655401)
Los tres vectores son muy distintos entre sí
aunque provienen del mismo token.
Parámetros: 3 matrices de 4×3 = 36 valores.
Atención cruzada: Q de una secuencia,
K y V de otra. Mismo mecanismo.Q, K, V: tres proyecciones distintas del mismo token.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | d_model, d_k, parametros_por_cabeza |
| Comprobaciones (1) | son_proyecciones_lineales |
compmath run 324Todos los Transformers, atención cruzada en traducción, modelos multimodales y mecanismos de recuperación diferenciables.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).Con d = 256 y sin escalar, la softmax se satura y el gradiente desaparece.
Attention(Q,K,V) = softmax(QKᵀ/√d_k)·V
Var(q·k) ≈ d·σ⁴ con entradas iid
dividir por √d_k devuelve la varianza a escala 1La atención escalada calcula la similitud entre cada consulta y cada clave mediante producto escalar, normaliza con softmax y usa los pesos resultantes para promediar los valores. Es un promedio ponderado por similitud, y toda la fórmula cabe en esa frase.
La única parte que no es evidente es el factor 1/√d_k, y su justificación es estadística. Si las componentes de q y k son independientes con varianza σ², el producto escalar de d términos tiene varianza proporcional a d, y por tanto desviación proporcional a √d. Con d = 256 eso son 16 veces más dispersión que con d = 1.
El efecto sobre la softmax es destructivo. Con puntuaciones muy dispersas, la exponencial concentra casi toda la masa en el máximo: la distribución se vuelve prácticamente one-hot, la atención deja de ser un promedio y se convierte en una selección dura. Peor aún, en esa región la softmax tiene gradiente casi nulo y el mecanismo deja de aprender.
Dividir por √d_k cancela exactamente el crecimiento. La comparación numérica lo muestra: con d = 256 sin escalar, un peso se lleva prácticamente todo y otro cae a 8e-06; con la escala, los pesos quedan repartidos y el gradiente fluye. Un solo factor en el denominador es lo que hace entrenable la arquitectura.
Puntuaciones y pesos con y sin escala, en dos dimensiones.
d = 8, sin escalar:
puntuaciones: [ 0,4204 ; −1,9767 ; 1,3619 ; 1,2219]
pesos: [0,169955 ; ... ] repartidos
d = 8, escalado:
puntuaciones: [ 0,3541 ; −0,3729 ; 2,3033 ; 0,8469]
pesos: [0,098585 ; ... ] repartidos
d = 256, sin escalar:
puntuaciones: [−9,7106 ; −2,6027 ; 1,9724 ; −15,9423]
pesos: [8e-06 ; ...] ← saturado ✗
d = 256, escalado:
puntuaciones: [−0,7502 ; 1,9863 ; 0,3221 ; 0,5716]
pesos: [0,043279 ; ...] repartidos ✓
Var(q·k) ≈ d·σ⁴ : por eso se divide por √d.Atención escalada: por qué existe el 1/√d.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | entropia_maxima_4_tokens |
| Comprobaciones (0) | — |
compmath run 325Todos los Transformers, atención en visión y audio, mecanismos de recuperación y modelos de secuencias modernos.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).10.48550/arxiv.2207.09238 verificado en DataCite (2026-08-19).Sin máscara causal el modelo ve el futuro, entrena perfecto y genera basura.
Q, K, V provienen todos de la misma secuencia
máscara causal: puntuación = −∞ para j > i
cada fila de la matriz de atención suma 1En self-attention, consultas, claves y valores se calculan todos a partir de la misma secuencia. Cada token puede atender a todos los demás y actualizar su representación con la información que le resulte relevante, en una sola operación y sin importar la distancia.
Esa es la ventaja decisiva sobre las RNN de la parte 15. En una recurrente, conectar el token 1 con el 100 requiere que la información atraviese 99 pasos, con el gradiente multiplicándose 99 veces. En self-attention hay un camino directo. El precio es el coste cuadrático en la longitud de la secuencia, que es el cuello de botella de los contextos largos.
Para generación autorregresiva hace falta la máscara causal: poner las puntuaciones de las posiciones futuras a menos infinito antes del softmax, de modo que sus pesos sean exactamente cero. La matriz de atención queda triangular inferior, y el primer token solo puede atenderse a sí mismo.
Olvidarla produce un fallo especialmente traicionero porque no da ningún error. El modelo entrena con métricas excelentes, porque para predecir el token siguiente puede simplemente mirarlo, y al generar —cuando el futuro no existe— produce basura. Es un error silencioso que solo se detecta al probar la generación.
Atención bidireccional y causal sobre cuatro tokens.
tokens: ["el", "gato", "come", "pescado"]
matriz de atención bidireccional:
[0,2982 0,2239 0,4516 0,0263]
[0,3251 0,3369 0,2829 0,0550]
[ ... ]
cada fila suma 1 ✓
matriz causal:
[1,0000 0,0000 0,0000 0,0000]
[0,4911 0,5089 0,0000 0,0000]
[0,0051 0,0022 0,99xx 0,0000]
[ ... ]
El token 0 solo se ve a sí mismo ✓
Triangular inferior: nadie ve el futuro.
Sin la máscara, predecir el token 2 podría hacerse
simplemente mirándolo.Self-attention completa sobre una secuencia de 4 tokens.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | d_model |
| Comprobaciones (1) | el_token_0_solo_se_ve_a_si_mismo |
compmath run 326GPT y todos los modelos de lenguaje generativos, BERT sin máscara, Vision Transformers y modelos de audio.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).Varias cabezas atienden a cosas distintas en subespacios distintos, al mismo coste.
d_por_cabeza = d_model / n_cabezas
concatenar las salidas y proyectar con W_O
coste total similar al de una sola cabeza de dimensión completaUna sola cabeza de atención produce una única distribución de pesos por token, y eso obliga a comprometer: no puede atender a la vez a la concordancia sintáctica y a la relación semántica. Multi-head resuelve el conflicto ejecutando varias atenciones en paralelo sobre subespacios distintos.
La aritmética está diseñada para que no cueste más. Con d_model = 512 y 8 cabezas, cada una trabaja en dimensión 64, y el total de parámetros es aproximadamente el mismo que el de una única atención de dimensión 512. Se gana diversidad sin pagar capacidad.
Los patrones aprendidos son efectivamente distintos, y eso se puede comprobar inspeccionando las matrices. El análisis de modelos entrenados encuentra cabezas especializadas de forma reconocible: unas siguen dependencias sintácticas, otras enlazan referencias, otras miran sistemáticamente al token anterior. También encuentra que muchas cabezas son redundantes y se pueden podar sin pérdida apreciable.
La concatenación de las salidas se proyecta con una matriz W_O que mezcla la información de todas las cabezas. Sin ese paso final, las cabezas quedarían en subespacios estancos y no podrían combinarse.
Cuatro cabezas sobre un modelo de dimensión 8.
d_model = 8 cabezas = 4 d por cabeza = 2
patrones de atención (primera fila de cada cabeza):
cabeza 1: [0,1657 0,7332 0,1010]
cabeza 2: [0,0010 0,9989 0,0000]
cabeza 3: [0,0423 0,0099 0,9478]
cabeza 4: [ ... ]
Las cabezas atienden a posiciones distintas ✓
La cabeza 2 está muy concentrada; la 1, repartida.
parámetros totales: 256
Una sola cabeza de dimensión 8 costaría lo mismo.Multi-head: varias atenciones en subespacios distintos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | d_model, cabezas, d_por_cabeza, parametros_totales, parametros_de_una_sola_cabeza_ancha |
| Comprobaciones (1) | las_cabezas_atienden_distinto |
compmath run 327Todos los Transformers, interpretabilidad mecanicista, poda de cabezas redundantes y diseño de arquitecturas eficientes.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).10.48550/arxiv.1905.10650 verificado en DataCite (2026-08-19).El bloque es atención más feed-forward, cada uno envuelto en residual y normalización.
x ← LayerNorm(x + MultiHead(x))
x ← LayerNorm(x + FFN(x))
FFN con expansión ×4: d_ff = 4·d_modelEl bloque Transformer combina dos subcapas con la misma envoltura. Primero atención multi-cabeza, que mezcla información entre posiciones; después una red feed-forward aplicada a cada posición por separado, que procesa cada representación individualmente. Ambas van rodeadas de conexión residual y normalización.
La conexión residual es la que hace entrenables las pilas profundas. Sumar la entrada a la salida crea un camino por el que el gradiente pasa sin multiplicarse, exactamente la misma solución que la LSTM de la clase 315 y que ResNet. Sin ella, apilar 96 bloques sería inviable.
La normalización estabiliza la escala. Se usa layer norm y no batch norm porque las secuencias tienen longitud variable y el tamaño de lote efectivo cambia, como se explicó en la clase 308. Su colocación importa: la variante pre-norm —normalizar antes de la subcapa— es más estable en modelos muy profundos y es la que usan los modelos actuales, aunque el artículo original usaba post-norm.
La expansión ×4 en la red feed-forward es una constante empírica notablemente estable a lo largo de los años. Ahí reside la mayor parte de los parámetros del modelo, y hay evidencia de que esas capas funcionan como una memoria asociativa de conocimiento factual, más que como un simple procesador local.
Estructura y dimensiones de un bloque.
arquitectura:
multi-head attention
+ residual
layer norm
feed-forward
+ residual
layer norm
d_model = 8 d_ff = 32 razón = 4
tokens = 4
norma media de entrada: 3,214373
Reparto de parámetros en un modelo real:
atención: 4·d² = 4·d_model²
feed-forward: 8·d² = 2·(d_model·4·d_model)
el feed-forward tiene el doble de parámetros
Pre-norm frente a post-norm: pre-norm es más estable
con muchas capas y es lo estándar hoy.Bloque Transformer: atención, residual, layer norm y feed-forward.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | d_model, d_ff, razon_d_ff/d_model, tokens, norma_media_entrada, norma_media_salida, parametros_atencion, parametros_feed_forward |
| Comprobaciones (2) | shape_preservada, el_FFN_tiene_mas_parametros |
compmath run 328GPT, BERT, Vision Transformers, modelos de audio y prácticamente toda la arquitectura moderna de gran escala.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).10.48550/arxiv.2002.04745 verificado en DataCite (2026-08-19).Un modelo de lenguaje es la regla de la cadena de la probabilidad, entrenada por verosimilitud.
P(x₁…xₙ) = Π P(xᵢ | x₁…xᵢ₋₁)
log P = Σ log P(xᵢ | contexto)
perplejidad = exp(−(1/n)·Σ log P)Un modelo autorregresivo descompone la probabilidad de una secuencia en un producto de condicionales, cada uno prediciendo el siguiente elemento a partir de los anteriores. Es exactamente la regla de la cadena de la clase 183 aplicada a secuencias, sin ninguna aproximación: la factorización es exacta.
El entrenamiento es máxima verosimilitud, y por tanto la pérdida es entropía cruzada, como se dedujo en la clase 263. Se trabaja con logaritmos por dos razones: convierte el producto en suma y evita el subdesbordamiento, que con secuencias de miles de tokens sería inevitable.
La perplejidad es la exponencial de la entropía cruzada media, y su interpretación es útil: el número efectivo de opciones equiprobables entre las que el modelo duda. Una perplejidad de 2,55 significa que el modelo está tan indeciso como si eligiera entre 2,55 alternativas igualmente probables. Es la métrica estándar y permite comparar modelos, con la precaución de que depende del tokenizador.
La consecuencia arquitectónica es la máscara causal de la clase 326: para que la factorización sea legítima, la predicción del token i solo puede depender de los anteriores. Y la consecuencia práctica es que el mismo modelo sirve para evaluar la probabilidad de un texto dado y para generar texto nuevo muestreando de las condicionales.
Descomposición de una secuencia de tres tokens.
secuencia: ["el", "gato", "duerme"]
paso token contexto P(token|contexto)
1 "el" [<inicio>] 0,40
2 "gato" [<inicio>, el] 0,30
3 "duerme" [<inicio>, el, gato] 0,50
probabilidad conjunta: 0,40 × 0,30 × 0,50 = 0,06
log probabilidad: −2,813411
perplejidad: exp(2,813411/3) = 2,554365
Lectura: el modelo duda como si eligiera entre
2,55 opciones equiprobables por token.
Con logaritmos: −0,916 − 1,204 − 0,693 = −2,813
Sin logaritmos, 1000 tokens darían un producto
del orden de 1e-500: cero en punto flotante.Modelado autoregresivo: la regla de la cadena de la probabilidad.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | probabilidad_conjunta, log_probabilidad, perplejidad |
| Comprobaciones (0) | — |
compmath run 329Modelos de lenguaje, generación de código, síntesis de audio, modelos de series temporales y evaluación de modelos generativos.
Temperatura alta no es más creatividad: es más entropía, y también más error.
temperatura: softmax(z/T)
top-k: conservar los k logits mayores
top-p: conservar la masa acumulada hasta pUn modelo autorregresivo produce una distribución sobre el vocabulario; la estrategia de muestreo decide qué hacer con ella. Tomar siempre el máximo —greedy— es determinista y produce texto repetitivo; muestrear de la distribución cruda produce texto diverso pero con errores frecuentes de la cola.
La temperatura divide los logits antes del softmax. Con T < 1 las diferencias se amplifican y la distribución se concentra: más determinista y más conservador. Con T > 1 las diferencias se comprimen y la distribución se aplana: más variedad y más riesgo. En el límite T → 0 se recupera greedy y con T → ∞ se obtiene la uniforme.
Conviene decirlo sin eufemismos: temperatura alta no es más creatividad, es más entropía. Aumenta la probabilidad de tokens raros, y algunos de esos tokens son sorprendentes de forma interesante mientras que otros son simplemente incorrectos. El modelo no distingue entre ambos casos.
Top-k y top-p atacan el problema desde otro ángulo: en vez de reescalar toda la distribución, truncan la cola. Top-k conserva los k candidatos más probables; top-p —o muestreo por núcleo— conserva los que acumulan una masa p, lo que adapta el número de candidatos a lo segura que esté la distribución. Cuando el modelo tiene clara la respuesta, top-p deja pocos; cuando duda, deja muchos. Es la razón de que sea preferible a top-k, y en la práctica se combina con temperatura moderada.
La misma distribución bajo cinco estrategias.
logits: [3,0 ; 2,5 ; 2,0 ; 1,0 ; 0,5 ; −1,0 ; −2,0]
greedy (argmax): token 0
T = 1,0: [0,45108 ; 0,27360 ; 0,16594 ; 0,06105 ; ...]
T = 0,5: [0,65417 ; 0,24066 ; 0,08853 ; 0,01198 ; ...]
más determinista
T = 2,0: [0,30702 ; 0,23911 ; 0,18622 ; 0,11295 ; ...]
más diverso
top-k = 3:
[0,50648 ; 0,30720 ; 0,18632 ; 0 ; 0 ; 0 ; 0]
la cola se elimina y se renormaliza
Con T = 0,5 el token menos probable pasa de 3e-3 a 3e-5:
queda prácticamente descartado.Temperatura, top-k y top-p reescriben la distribución antes de muestrear.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | greedy_argmax |
| Comprobaciones (0) | — |
compmath run 330Generación con modelos de lenguaje, síntesis de imágenes, generación de código y control del compromiso entre diversidad y fiabilidad.
10.48550/arxiv.1904.09751 verificado en DataCite (2026-08-19).10.48550/arxiv.1805.04833 verificado en DataCite (2026-08-19).No se puede derivar a través de un muestreo, y reparametrizar es la salida.
codificador: x → (μ, log σ²)
reparametrización: z = μ + σ·ε, ε ~ N(0,1)
KL en forma cerrada: ½·Σ(σ² + μ² − 1 − log σ²)Un autoencoder variacional codifica cada entrada no en un punto sino en una distribución del espacio latente, muestrea de ella y decodifica. Esa aleatoriedad es lo que hace del espacio latente algo continuo y muestreable, y lo que permite generar datos nuevos en vez de solo reconstruir.
El problema técnico es que muestrear no es diferenciable: no hay forma de propagar el gradiente a través de una operación aleatoria. El truco de reparametrización lo resuelve moviendo la aleatoriedad fuera del camino del gradiente: se muestrea ε de una normal estándar —que no depende de ningún parámetro— y se construye z = μ + σ·ε. Ahora z es una función determinista y derivable de μ y σ.
Un detalle de implementación que conviene entender: la red predice log σ², no σ. La razón es doble: el logaritmo puede tomar cualquier valor real, con lo que no hay que restringir la salida, y exponenciarlo garantiza que la varianza sea positiva sin artificios.
El término KL entre la posterior aproximada y el prior normal estándar tiene forma cerrada, lo que evita estimarlo por muestreo y reduce la varianza del gradiente. Ese término empuja las distribuciones latentes hacia el prior, y su tensión con el término de reconstrucción es lo que da al VAE su comportamiento característico: muestras suaves y algo borrosas.
Reparametrización en un espacio latente de dimensión 4.
mu = ( 0,5 ; −0,3 ; 0,8 ; 0,1)
log_var = (−0,5 ; −1,0 ; −0,2 ; −0,8)
sigma = exp(log_var/2)
= (0,778801 ; 0,606531 ; 0,904837 ; 0,670320)
Muestreando z = mu + sigma·ε muchas veces:
media empírica = (0,5108 ; −0,2871 ; 0,7997 ; 0,0878)
varianza empírica = (0,5910 ; 0,3745 ; 0,8373 ; 0,4378)
comprobación: sigma² = (0,6065 ; 0,3679 ; 0,8187 ; 0,4493)
coinciden con la varianza empírica ✓
La aleatoriedad está en ε, fuera del camino
del gradiente respecto de mu y sigma.VAE: reparametrización y el término KL en forma cerrada.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | dimension_latente, KL(q||N(0,I)), KL_si_q=prior |
| Comprobaciones (0) | — |
compmath run 331Generación de imágenes, aprendizaje de representaciones, detección de anomalías, compresión con pérdida y espacios latentes para modelos de difusión.
10.48550/arxiv.1312.6114 verificado en DataCite (2026-08-19).10.48550/arxiv.1606.05908 verificado en DataCite (2026-08-19).El ELBO acota la log-verosimilitud, y la brecha es exactamente otra KL.
ELBO = E_q[log p(x|z)] − KL(q(z|x) ‖ p(z))
log p(x) = ELBO + KL(q(z|x) ‖ p(z|x))
la brecha es ≥ 0, luego log p(x) ≥ ELBOLa log-verosimilitud de un modelo con variables latentes requiere integrar sobre todas las configuraciones latentes posibles, y esa integral es intratable salvo en casos triviales. La inferencia variacional sortea el problema optimizando una cota inferior en su lugar.
El ELBO tiene dos términos con lecturas claras. El de reconstrucción premia que el decodificador recupere la entrada a partir del latente. El de KL penaliza que la posterior aproximada se aleje del prior, actuando como regularizador del espacio latente. Maximizar la suma equilibra fidelidad y estructura.
La identidad clave es que log p(x) es exactamente el ELBO más la KL entre la posterior aproximada y la verdadera. Como toda KL es no negativa, el ELBO nunca supera la log-verosimilitud, y maximizarlo hace dos cosas a la vez: sube la verosimilitud y acerca la aproximación a la posterior real. Esa doble acción es lo elegante del método.
El ELBO es también el objeto que aparecía en el algoritmo EM de la clase 296. En EM el paso E hace la cota exacta calculando la posterior verdadera; en inferencia variacional la posterior no es tratable y la cota queda con holgura. Ver EM primero es lo que hace que el ELBO no parezca una construcción sacada de la nada.
Descomposición numérica del ELBO.
término de reconstrucción: −12,4
término KL: 3,7
ELBO = −12,4 − 3,7 = −16,1
Identidad:
log p(x) = ELBO + KL(q(z|x) ‖ p(z|x))
= −16,1 + brecha
Como la brecha es ≥ 0:
log p(x) ≥ −16,1 ✓
Si la brecha fuera 0, la posterior aproximada
coincidiría con la verdadera y el ELBO sería exacto.
Maximizar el ELBO sube la verosimilitud y reduce
la brecha simultáneamente.ELBO: reconstrucción menos KL, y su relación con la log-verosimilitud.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | termino_de_reconstruccion, termino_KL, ELBO |
| Comprobaciones (1) | log_p(x)_>=_ELBO |
compmath run 332VAE, inferencia variacional en modelos bayesianos, modelos de difusión y aproximaciones tratables de posteriores complejas.
10.48550/arxiv.1601.00670 verificado en DataCite (2026-08-19).10.48550/arxiv.1906.02691 verificado en DataCite (2026-08-19).En el equilibrio de una GAN el discriminador acierta el 50 %: no distingue nada.
min_G max_D E[log D(x)] + E[log(1 − D(G(z)))]
D*(x) = p_datos(x) / (p_datos(x) + p_G(x))
en el equilibrio D = 0,5 y la pérdida vale log 2Una GAN enfrenta dos redes con objetivos opuestos. El generador produce muestras falsas intentando parecer real; el discriminador intenta distinguir reales de falsas. El entrenamiento es un juego minimax, y el objetivo del generador es hacer fracasar al discriminador.
El resultado teórico central es que el discriminador óptimo tiene forma cerrada: la proporción de densidad real sobre densidad total. Sustituyendo ese óptimo en el objetivo, se obtiene que el generador está minimizando 2·JS(p_datos ‖ p_G) − log 4, es decir, la divergencia de Jensen-Shannon de la clase 265. El objetivo de las GAN no se inventó como divergencia: resulta serlo.
En el equilibrio ideal, generador y datos tienen la misma distribución, el discriminador óptimo vale 0,5 en todas partes y la pérdida vale log 2 ≈ 0,693. Ese número es el diagnóstico: una pérdida de discriminador que se estabiliza cerca de 0,693 indica equilibrio; una que se va a cero indica que el discriminador ha ganado y el generador ya no recibe señal útil.
La inestabilidad práctica tiene una causa identificable en esa misma teoría: si los soportes de ambas distribuciones no se solapan, la JS es constante y su gradiente es cero. Esa observación motivó WGAN, que sustituye JS por la distancia de Wasserstein, precisamente porque esta sí da gradiente útil cuando los soportes están separados.
Tres escenarios del juego y el punto de equilibrio.
objetivo: min_G max_D E[log D(x)] + E[log(1 − D(G(z)))]
escenario "D gana":
D(real) = 0,99 D(falso) = 0,01
pérdida de D = 0,01005 muy baja
el generador recibe gradiente casi nulo
escenario de equilibrio:
D(real) = 0,50 D(falso) = 0,50
pérdida teórica = log 2 = 0,693147 ✓
D óptimo: D*(x) = p_datos / (p_datos + p_G)
si p_G = p_datos → D* = 0,5 en todas partes
El objetivo original equivale a minimizar
2·JS(p_datos ‖ p_G) − log 4.GAN: el equilibrio del juego minimax y su punto óptimo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | perdida_teorica_en_equilibrio |
| Comprobaciones (1) | en_el_equilibrio_D=0.5 |
compmath run 333Generación de imágenes, superresolución, traducción entre dominios, aumento de datos y generación de datos sintéticos.
10.48550/arxiv.1406.2661 verificado en DataCite (2026-08-19).10.48550/arxiv.1701.07875 verificado en DataCite (2026-08-19).El proceso directo permite saltar a cualquier paso sin simular los anteriores.
x_t = √ᾱ_t·x₀ + √(1−ᾱ_t)·ε
ᾱ_t = Π_{s≤t} (1 − β_s)
horario β: de 1e-4 a 0,02El proceso directo de difusión destruye progresivamente una muestra añadiendo ruido gaussiano según un horario fijo. Tras suficientes pasos, lo que queda es indistinguible de ruido puro. Este proceso no tiene parámetros aprendidos: es una definición.
Su propiedad más importante es computacional. Como la composición de ruidos gaussianos es gaussiana, existe una fórmula cerrada que da x_t directamente a partir de x₀ sin simular los t−1 pasos intermedios. Sin ella, entrenar exigiría recorrer secuencialmente hasta el paso deseado, y el coste sería prohibitivo.
Con esa fórmula, el entrenamiento es sencillo: se toma una muestra, se elige un t al azar, se salta directamente a x_t y se pide a la red que prediga el ruido añadido. Cada paso de entrenamiento cuesta lo mismo independientemente de t.
El horario de ruido —cómo crece β con t— resulta importar bastante. El horario lineal original funciona, y los horarios coseno posteriores destruyen la información de forma más gradual y mejoran la calidad. Es un ejemplo de hiperparámetro que parecía menor y resultó tener efecto sustancial.
Horario de 20 pasos y señal conservada.
T = 20 β de 0,0001 a 0,02
t ᾱ_t señal conservada
0 0,999900 99,995 %
5 0,98xxxx ~99 %
10 0,94xxxx ~97 %
15 0,879869 ~93,8 %
20 0,80xxxx ~89 %
Fórmula: x_t = √ᾱ_t·x₀ + √(1−ᾱ_t)·ε
Con t = 15:
√ᾱ = 0,938 √(1−ᾱ) = 0,347
la señal aún domina sobre el ruido
Salto directo: para entrenar en t = 15 no hace falta
simular los 14 pasos anteriores.Proceso directo de difusión: ruido añadido con horario fijo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | pasos_T, beta_inicial, beta_final, semilla |
| Comprobaciones (2) | x_T_es_ruido_puro, el_proceso_directo_no_se_aprende |
compmath run 334Stable Diffusion, DALL-E, generación de audio y vídeo, y modelos de difusión sobre datos estructurados.
10.48550/arxiv.2006.11239 verificado en DataCite (2026-08-19).10.48550/arxiv.2102.09672 verificado en DataCite (2026-08-19).La red no genera la imagen: predice el ruido, y de ahí se despeja la imagen.
la red estima ε̂ = ε_θ(x_t, t)
x̂₀ = (x_t − √(1−ᾱ_t)·ε̂) / √ᾱ_t
pérdida: ‖ε − ε̂‖²El proceso inverso es donde está el aprendizaje. Dado un x_t ruidoso, una red predice qué ruido se añadió, y despejando la fórmula del proceso directo se recupera una estimación del dato original. Iterando ese paso desde ruido puro se genera una muestra nueva.
Que la red prediga el ruido en vez de la imagen es una elección de parametrización, y resultó funcionar mucho mejor. Son matemáticamente equivalentes —de una se despeja la otra— pero predecir ruido da un objetivo mejor condicionado, con escala similar en todos los pasos temporales, lo que estabiliza el entrenamiento.
La pérdida resultante es simplemente el error cuadrático entre el ruido real y el predicho. Esa simplicidad es engañosa: la formulación completa parte de un ELBO como el de la clase 332, y tras varias simplificaciones se reduce a este objetivo. La derivación es laboriosa y el resultado es una línea de código.
El coste es el número de pasos. Los primeros modelos necesitaban mil evaluaciones de la red por muestra, lo que hacía la generación lenta. Los muestreadores acelerados —DDIM, DPM-Solver— reducen a decenas de pasos aplicando lo que la parte 11 enseña sobre integradores: son métodos numéricos aplicados a la ecuación diferencial asociada al proceso.
Reconstrucción exacta con un modelo perfecto.
t = 15 ᾱ_t = 0,87986861
x₀ real = 1,000000
ruido real = −0,198859
x_t = 0,869089
Comprobación del proceso directo:
√0,8799 · 1,0 + √0,1201 · (−0,198859)
= 0,93800 − 0,06891 = 0,86909 ✓
Con un modelo perfecto (ε̂ = ε):
x̂₀ = (0,869089 − 0,346554·(−0,198859)) / 0,937961
= 1,000000 ✓
La red solo tiene que acertar el ruido;
la imagen se despeja algebraicamente.Proceso inverso: la red predice el ruido y se reconstruye x₀.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | t, alpha_barra_t, x0_real, ruido_real, x_t, x0_estimado_con_modelo_perfecto, x0_estimado_con_error_0.1, amplificacion_del_error |
| Comprobaciones (0) | — |
compmath run 335Generación de imágenes, inpainting, superresolución, generación de audio y modelos condicionados por texto.
10.48550/arxiv.2006.11239 verificado en DataCite (2026-08-19).10.48550/arxiv.2010.02502 verificado en DataCite (2026-08-19).La multiplicidad del autovalor cero del Laplaciano cuenta las componentes conexas.
L = D − A
autovalores: 0 = λ₁ ≤ λ₂ ≤ … ≤ λₙ
λ₂ > 0 ⟺ el grafo es conexoEl Laplaciano de un grafo se construye restando la matriz de adyacencia a la matriz diagonal de grados. Pese a su simplicidad, su espectro contiene una cantidad notable de información sobre la estructura, y ese es el objeto de la teoría espectral de grafos.
El autovalor cero está siempre presente, con el vector constante como autovector: es inmediato comprobar que L·1 = 0. Lo interesante es su multiplicidad, que coincide exactamente con el número de componentes conexas. Un grafo conexo tiene un único cero.
El segundo autovalor λ₂ se llama conectividad algebraica, y mide cuán bien conectado está el grafo: cerca de cero significa que hay un cuello de botella y el grafo está casi partido en dos. Su autovector asociado, el vector de Fiedler, indica por dónde cortar, y esa es la base del agrupamiento espectral.
Como L es simétrica y semidefinida positiva, todo el aparato del teorema espectral de la parte 06 se aplica: autovalores reales no negativos y autovectores ortogonales. La versión normalizada D^{−1/2}·L·D^{−1/2} acota los autovalores en [0, 2] y es la que usan las redes convolucionales sobre grafos, con la precaución de tratar los nodos aislados para no dividir por cero.
Laplaciano de un grafo de cinco nodos.
5 nodos, 6 aristas
grados: [3, 2, 3, 3, 1]
L = D − A:
[ 3 −1 −1 −1 0]
[−1 2 −1 0 0]
[−1 −1 3 ... ]
[ ... ]
autovalores:
[0,0 ; 0,82991351 ; 2,68889218 ; 4,0 ; 4,4811943]
multiplicidad de 0: 1 → grafo conexo ✓
λ₂ = 0,83 > 0 → confirma la conexión ✓
Un λ₂ pequeño indicaría un cuello de botella,
y el vector de Fiedler diría por dónde cortarlo.Laplaciano del grafo: espectro y componentes conexas.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | nodos, aristas, autovalores_nulos, componentes_conexas, conectividad_algebraica_fiedler |
| Comprobaciones (1) | es_semidefinido_positivo |
compmath run 336Agrupamiento espectral, redes convolucionales sobre grafos, análisis de redes sociales, partición de mallas y detección de comunidades.
10.48550/arxiv.0711.0189 verificado en DataCite (2026-08-19).Una capa de paso de mensajes ve un salto; k capas ven un vecindario de radio k.
h_v^{(k+1)} = σ(Σ_{u∈N(v)∪{v}} w_{vu}·W·h_u^{(k)})
normalización GCN: D^{−1/2}(A+I)D^{−1/2}
campo receptivo tras k capas: radio kEl paso de mensajes es el mecanismo central de las redes sobre grafos. En cada capa, cada nodo recoge las representaciones de sus vecinos, las agrega y las combina con la suya para producir una representación nueva. Repetir la operación propaga información cada vez más lejos.
El paralelismo con las convoluciones de la parte 15 es exacto: una capa equivale a un salto, y k capas dan un campo receptivo de radio k. La diferencia es que en una imagen el vecindario es una rejilla regular y en un grafo es arbitrario, con nodos de grado 1 y de grado 1000 en la misma red.
Esa irregularidad obliga a normalizar. Sin ella, un nodo con mil vecinos acumularía una suma con escala completamente distinta a la de un nodo con dos, y las activaciones quedarían descontroladas. La normalización simétrica D^{−1/2}(A+I)D^{−1/2} de las GCN resuelve eso y además añade auto-lazos para que cada nodo conserve su propia información.
La limitación característica es el sobresuavizado: con muchas capas, las representaciones de todos los nodos convergen a algo indistinguible, porque cada una acaba siendo un promedio de casi todo el grafo. Por eso las GNN son típicamente poco profundas —dos o tres capas— al contrario que las CNN, y por eso hay líneas de trabajo enteras dedicadas a permitir GNN profundas.
Dos capas de paso de mensajes sobre cinco nodos.
características iniciales:
[1,0 0,0] [0,0 1,0] [1,0 1,0] [0,5 0,5] [2,0 −1,0]
tras 1 capa:
[0,625 0,663675]
[0,577 0,622008]
[0,625 0,663675]
[1,332107 ...]
tras 2 capas:
[0,812193 0,516758]
[0,553294 0,590509]
[0,812193 0,516758]
Los nodos 0 y 2 convergen a lo mismo: tienen
vecindarios equivalentes.
Campo receptivo tras k capas: vecindario de radio k.
Normalización: D^{−1/2}(A+I)D^{−1/2}, como en GCN.Message passing: cada capa agrega información de un salto más lejos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | nodos |
| Comprobaciones (2) | el_nodo_4_solo_tiene_1_vecino, permutacion_equivariante |
compmath run 337Predicción molecular, sistemas de recomendación sobre grafos, análisis de redes sociales, detección de fraude y simulación física con partículas.
10.48550/arxiv.1609.02907 verificado en DataCite (2026-08-19).10.48550/arxiv.1704.01212 verificado en DataCite (2026-08-19).El valor de un estado es la recompensa inmediata más el valor futuro descontado.
V(s) = max_a [R(s,a) + γ·V(s')]
γ ∈ [0,1): factor de descuento
iteración de valor: aplicar la ecuación hasta convergerLa ecuación de Bellman descompone el valor de un estado en dos partes: lo que se obtiene ahora y lo que se puede obtener después. Esa recursión es la base de todo el aprendizaje por refuerzo y de buena parte de la programación dinámica.
El factor de descuento γ pondera el futuro. Con γ cercano a 0 el agente es miope y solo persigue recompensa inmediata; con γ cercano a 1 planifica a largo plazo. Además de reflejar una preferencia, tiene una función matemática: garantiza que la suma de recompensas de un horizonte infinito converja.
La iteración de valor aplica la ecuación repetidamente hasta que los valores dejan de cambiar. Converge siempre porque el operador de Bellman es una contracción con constante γ: cada aplicación acerca la estimación al punto fijo en un factor γ. Es una aplicación directa del teorema del punto fijo de Banach.
El límite es que exige conocer el modelo: las transiciones y las recompensas. Cuando no se conocen —que es el caso interesante— aparecen los métodos libres de modelo como Q-learning, que estiman lo mismo a partir de la experiencia. Y con espacios de estados enormes, la tabla de valores se sustituye por una red neuronal, que es lo que hace DQN.
Iteración de valor sobre un MDP de cuatro estados.
estados: [0, 1, 2, 3] terminal: 3 γ = 0,9
ecuación: V(s) = max_a [R(s,a) + γ·V(s')]
iter V
1 {0: 0,000, 1: 0,000, 2: 1,000, 3: 1,000}
2 {0: 0,000, 1: 0,900, 2: 1,900, 3: 1,000}
3 {0: 0,810, 1: 1,710, 2: 1,900, 3: 1,000}
final {0: 1,539, 1: 1,710, 2: 1,900, 3: 1,000}
El valor se propaga hacia atrás desde el terminal,
un estado por iteración.
V(0) = 0,9 · V(1) = 0,9 · 1,71 = 1,539 ✓Iteración de valor sobre un MDP pequeño.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (4) | estado_terminal, gamma, iteraciones_hasta_converger, V(0)_teorico_gamma³ |
| Comprobaciones (1) | converge_siempre_si_gamma<1 |
compmath run 338Aprendizaje por refuerzo, planificación en robótica, control óptimo, juegos y toma de decisiones secuenciales.
9780691146683 verificado en International ISBN Agency (2026-08-19).REINFORCE sube la probabilidad de lo que salió bien, y la línea base reduce la varianza.
∇J = E[∇log π(a|s) · (R − b)]
b es la línea base, típicamente el valor medio
restar b no sesga el gradienteLos métodos de gradiente de política optimizan directamente la política parametrizada, sin pasar por una función de valor. La actualización tiene una lectura muy directa: aumentar la log-probabilidad de las acciones que produjeron recompensa alta y disminuir la de las que produjeron recompensa baja.
El problema del estimador básico es la varianza. La recompensa de un episodio depende de muchas decisiones y de la aleatoriedad del entorno, así que el gradiente es muy ruidoso y el aprendizaje, lento e inestable.
La línea base lo mitiga. Restar una cantidad que no depende de la acción —típicamente el valor medio del estado— no cambia la esperanza del gradiente pero reduce mucho su varianza. Es un resultado limpio: se gana estabilidad sin introducir sesgo. La diferencia R − b se llama ventaja, y mide cuánto mejor fue la acción que la media.
De ahí sale toda la familia actor-crítico: el actor es la política, el crítico estima la línea base, y ambos se entrenan a la vez. PPO, el algoritmo estándar hoy y el que se usa en el ajuste por retroalimentación humana de los modelos de lenguaje, es un refinamiento de esta idea con una restricción que impide que la política cambie demasiado en un solo paso.
REINFORCE sobre un bandido de tres brazos.
probabilidades reales de recompensa: [0,2 ; 0,5 ; 0,8]
mejor brazo: 2
episodio política línea base
1 [0,3222 ; 0,3222 ; 0,3557] 0,00
100 [ ... ] ...
final [0,004018 ; 0,014253 ; 0,981729]
brazo preferido: 2 ✓
La política converge al brazo correcto sin conocer
las probabilidades: solo por experiencia.
Sin línea base, la varianza del gradiente sería
mucho mayor y la convergencia más lenta.REINFORCE: gradiente de la política sobre un bandido de 3 brazos.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | brazos, mejor_brazo, brazo_preferido, episodios, semilla |
| Comprobaciones (1) | encuentra_el_mejor |
compmath run 339Aprendizaje por refuerzo, RLHF en modelos de lenguaje, robótica, optimización de sistemas de diálogo y control continuo.
10.1007/bf00992696 verificado en Crossref (2026-08-19).10.48550/arxiv.1707.06347 verificado en DataCite (2026-08-19).Un Transformer de 101 parámetros aprende a mirar exactamente una posición atrás.
embedding + positional encoding → self-attention causal → salida
tarea: predecir el token anterior
verificación: la atención debe concentrarse en la posición i−1El capstone construye un Transformer causal completo con todos los componentes de la parte: embedding aprendido, codificación posicional sinusoidal, self-attention con máscara causal y proyección de salida. Son 101 parámetros y funciona.
La tarea elegida —predecir el token anterior— es deliberadamente trivial, y esa trivialidad es lo valioso. Permite verificar el mecanismo de forma directa: si la atención funciona como se ha descrito, la matriz de atención aprendida debe concentrar su masa en la posición i−1. No hace falta confiar en una métrica agregada; se puede mirar la matriz.
El papel de la codificación posicional se vuelve evidente aquí. Sin ella el modelo no podría resolver la tarea en absoluto, porque «el token anterior» es una noción puramente posicional y la atención por sí sola es ciega al orden. Quitarla y ver el fallo es el experimento de ablación más instructivo posible.
La distancia con un modelo real es de escala, no de concepto: los mismos componentes, repetidos decenas de veces y con dimensiones mil veces mayores. Entender qué hace cada pieza en 101 parámetros es lo que permite razonar sobre qué ocurre en 100 000 millones, y cierra el recorrido que empezó contando con los dedos en la parte 00.
Configuración del mini-Transformer.
tarea: predecir el token anterior (copia desplazada)
vocabulario: 6
d_model: 8
longitud de secuencia: 5
componentes:
embedding aprendido
positional encoding sinusoidal
self-attention causal
proyección de salida
parámetros entrenados: 101
Verificación esperada:
la matriz de atención debe concentrarse
en la posición i−1 para cada token i
Ablación: sin positional encoding la tarea
es irresoluble, porque "anterior" es posicional.Capstone: mini-Transformer que aprende a copiar el token anterior.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (10) | vocabulario, d_model, longitud_de_secuencia, parametros_entrenados, ejemplos_train, ejemplos_test, accuracy_train, accuracy_test, linea_base_por_azar, semilla |
| Comprobaciones (1) | la_atencion_aprende_a_mirar_i-1 |
compmath run 340Comprensión profunda de los Transformers, interpretabilidad mecanicista, docencia, entrevistas técnicas y depuración de implementaciones.
10.48550/arxiv.1706.03762 verificado en DataCite (2026-08-19).Procesos gaussianos, MCMC avanzado, inferencia variacional, transporte óptimo, geometría diferencial e informacional, SDE, Neural ODE, score matching y teoría del aprendizaje.
Esta última parte recorre la matemática que aparece en los artículos de investigación actuales y que rara vez se enseña en un curso introductorio. No es un apéndice decorativo: score matching es el fundamento de los modelos de difusión, el transporte óptimo aparece en flow matching, y la teoría estadística del aprendizaje es lo que da marco a las leyes de escala. Quien quiera leer papers y reproducirlos necesita estas herramientas.
Las clases 341 a 345 tratan la inferencia. Un proceso gaussiano define una distribución sobre funciones en vez de sobre parámetros, y su virtud es que la incertidumbre es honesta: mínima donde hay datos, y de vuelta al prior donde no los hay. Los métodos de muestreo aparecen con su diagnóstico obligatorio: Metropolis-Hastings tiene una tasa de aceptación óptima cercana a 0,44 y un paso mal elegido produce cadenas que aceptan casi todo y no exploran nada. HMC usa el gradiente para proponer estados lejanos con altísima aceptación, y la inferencia variacional cambia muestrear por optimizar.
Las clases 346 y 347 introducen el transporte óptimo, que responde a cuánto cuesta mover una distribución hasta otra. Su ventaja decisiva sobre la KL es que funciona sin soporte común: cuando dos distribuciones no se solapan, la KL es infinita o constante y su gradiente inútil, mientras que Wasserstein sigue midiendo la separación real. Eso es exactamente lo que arregló WGAN, y lo que hace del transporte óptimo el lenguaje del flow matching.
Las clases 348 a 350 aportan geometría. La hipótesis de la variedad —los datos reales viven en una variedad de dimensión intrínseca mucho menor que la del espacio ambiente— es lo que explica que el aprendizaje sea posible en dimensión alta. La geometría de la información dota al espacio de parámetros de una métrica natural: la información de Fisher es la curvatura local de la divergencia KL, y de ahí salen la cota de Cramér-Rao y el gradiente natural, invariante a reparametrizaciones.
Las clases 351 a 355 tratan la dinámica y la causalidad. Las ecuaciones diferenciales estocásticas describen procesos con ruido continuo y son la formulación en tiempo continuo de la difusión; los Neural ODE tratan la profundidad como variable continua y usan el método adjunto para no almacenar toda la trayectoria; el score matching aprende ∇ log p sin necesitar la constante de normalización, que es precisamente la cantidad intratable; y la inferencia causal muestra con números cómo el ajuste por puerta trasera recupera un efecto real de cero que la correlación cruda estimaba en 1,02.
El cierre (356 a 359) es teoría del aprendizaje: riesgo empírico frente a riesgo verdadero, dimensión VC, cotas PAC y teoría de aproximación. Conviene decir con claridad qué aportan y qué no. Las cotas PAC son correctas y enormemente holgadas en la práctica: predicen que las redes profundas no deberían generalizar y generalizan. Su valor es cualitativo —cómo escala la muestra necesaria con 1/ε y con la complejidad— no cuantitativo.
El capstone reproduce el núcleo matemático de un resultado publicado: el estimador de Sinkhorn converge al transporte óptimo cuando la regularización entrópica tiende a cero. Verificar un resultado de un artículo con código propio y datos donde el óptimo se conoce por fuerza bruta es la habilidad que este programa entero ha estado construyendo desde la primera clase.
Score matching fundamenta los modelos de difusión; el transporte óptimo aparece en flow matching; la teoría estadística del aprendizaje explica el scaling.
| Término | Definición | Clase |
|---|---|---|
| Algoritmo de Sinkhorn | Resuelve el transporte con regularización entrópica mediante escalados alternos. | 346 |
| Aprendizaje PAC | Probablemente aproximadamente correcto: error ≤ ε con probabilidad ≥ 1 − δ. | 358 |
| Brecha de generalización | Diferencia entre riesgo verdadero y riesgo empírico. | 356 |
| Burn-in | Iteraciones iniciales descartadas hasta que la cadena alcanza su distribución estacionaria. | 343 |
| Colisionador | Variable causada por dos otras. Condicionar sobre ella crea asociación espuria. | 355 |
| Complejidad muestral | Número de ejemplos necesarios para garantizar (ε, δ). Crece como 1/ε y log(1/δ). | 358 |
| Condición de Mercer | Una función es kernel válido si su matriz de Gram es siempre semidefinida positiva. | 342 |
| Conectividad algebraica | Segundo autovalor del Laplaciano. Mide cuán difícil es partir el grafo. | 354 |
| Constante de normalización | Z que hace que la densidad integre 1. Suele ser intratable y el score la evita. | 353 |
| Cota de Cramér-Rao | Ningún estimador insesgado tiene varianza menor que la inversa de la información de Fisher. | 350 |
| Criterio de puerta trasera | Ajustar por un conjunto que bloquee todos los caminos no causales entre X e Y. | 355 |
| Dimensión intrínseca | Número de grados de libertad reales de los datos, independiente del espacio de representación. | 348 |
| Dimensión VC | Tamaño del mayor conjunto que la clase de hipótesis puede etiquetar de todas las formas. | 357 |
| Distancia de Wasserstein | Coste mínimo de transporte. Es una métrica verdadera y funciona sin soporte común. | 347 |
| Ecuación diferencial estocástica | Ecuación con un término de deriva y otro de ruido browniano. | 351 |
| Euler-Maruyama | Integrador de SDE. El ruido escala como √dt, no como dt. | 351 |
| Familia variacional | Conjunto de distribuciones candidatas entre las que se busca la mejor aproximación. | 345 |
| Fragmentar | Realizar todas las 2ⁿ etiquetaciones posibles de n puntos. | 357 |
| Geodésica | Curva de longitud mínima entre dos puntos de una variedad. | 349 |
| Gradiente natural | Gradiente preacondicionado por la inversa de Fisher. Invariante a reparametrizaciones. | 350 |
| Hamiltonian Monte Carlo | Usa el gradiente y dinámica hamiltoniana para proponer estados lejanos con alta aceptación. | 344 |
| Hipótesis de la variedad | Los datos reales viven cerca de una variedad de dimensión mucho menor que la ambiente. | 348 |
| Inferencia variacional | Aproximar una posterior optimizando dentro de una familia en vez de muestrear. | 345 |
| Información de Fisher | Curvatura local de la KL. Métrica natural del espacio de parámetros. | 350 |
| Jitter numérico | Pequeña constante sumada a la diagonal para que la covarianza sea invertible. | 341 |
| Leapfrog | Integrador simpléctico que conserva el volumen y hace válida la propuesta de HMC. | 344 |
| Ley de escala | Error que decae como una potencia del número de parámetros o de datos. | 359 |
| Matriz de Gram | Matriz de todos los productos kernel entre pares de puntos. | 342 |
| Metropolis-Hastings | Propone un estado y lo acepta con probabilidad dependiente de la razón de densidades. | 343 |
| Método adjunto | Calcula gradientes resolviendo una EDO hacia atrás, con memoria constante. | 352 |
| Neural ODE | Red donde la profundidad es continua y la salida es la solución de una EDO aprendida. | 352 |
| Proceso gaussiano | Distribución sobre funciones definida por una media y un kernel de covarianza. | 341 |
| Riesgo empírico | Error medido sobre la muestra de entrenamiento. | 356 |
| Score | ∇ₓ log p(x). No depende de la constante de normalización. | 353 |
| Tasa de aceptación | Fracción de propuestas aceptadas. El óptimo en una dimensión ronda 0,44. | 343 |
| Tensor métrico | Objeto que define distancias y ángulos localmente en una variedad. | 349 |
| Transporte óptimo | Plan de mínimo coste para transformar una distribución en otra. | 346 |
| Vector de Fiedler | Autovector del segundo autovalor del Laplaciano. Su signo sugiere el corte del grafo. | 354 |
Un proceso gaussiano distribuye sobre funciones, y su incertidumbre crece donde no hay datos.
f ~ GP(m(x), k(x,x'))
media posterior: K*ᵀ(K + σ²I)⁻¹y
varianza posterior: k** − K*ᵀ(K + σ²I)⁻¹K*Un proceso gaussiano cambia el objeto sobre el que se pone la distribución. En vez de definir un modelo paramétrico y distribuir sobre sus parámetros, distribuye directamente sobre funciones: cualquier conjunto finito de evaluaciones sigue una normal multivariante determinada por el kernel.
Su propiedad más valiosa es que la incertidumbre es honesta. Cerca de un punto observado la varianza posterior es casi nula, porque la función tiene que pasar por ahí; lejos de todos los datos, vuelve a la varianza del prior. Ningún modelo paramétrico da eso gratis, y es la razón de que los GP dominen la optimización bayesiana, donde hay que decidir dónde explorar a continuación.
El precio es el coste. Invertir la matriz de covarianza cuesta O(n³) en tiempo y O(n²) en memoria, lo que limita el método a unos miles de puntos sin aproximaciones. Las técnicas de puntos inductores y los GP dispersos existen precisamente para sortear ese muro.
Una advertencia de implementación que no es opcional: la matriz de covarianza es teóricamente definida positiva pero numéricamente casi singular cuando hay puntos próximos. Sin sumar un pequeño jitter a la diagonal, la factorización de Cholesky falla. Es el mismo problema de condicionamiento de la parte 11, y la solución es la misma idea que Ridge: sumar λI.
GP con kernel RBF sobre cinco observaciones.
observaciones: 5 kernel: RBF con escala 1,0
ruido: 0,0001
predicción en x = −1,0:
media = −0,841409
desviación = 0,009999
valor real de sin(−1) = −0,841471 ✓
En un punto observado la varianza es mínima ✓
Lejos de los datos la varianza vuelve al prior: 1,0
Esa es la propiedad clave: el modelo sabe
dónde no sabe.
Coste: invertir la covarianza es O(n³).
Con n = 10 000 ya es inviable sin aproximar.GP: distribución sobre funciones, con media y varianza posterior.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | observaciones, ruido, lejos_de_los_datos_vuelve_al_prior |
| Comprobaciones (1) | en_un_punto_observado_la_varianza_es_minima |
compmath run 341Optimización bayesiana de hiperparámetros, regresión con incertidumbre calibrada, geoestadística, diseño experimental y modelos sustitutos de simuladores costosos.
9781423769903 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1206.2944 verificado en DataCite (2026-08-19).Una función es kernel válido si y solo si su matriz de Gram es siempre semidefinida positiva.
K(a,b) = φ(a)ᵀφ(b) para alguna φ
Mercer: matriz de Gram semidefinida positiva
suma y producto de kernels son kernelsUn kernel codifica una noción de similitud, y elegirlo es elegir qué se considera parecido. Cada familia impone supuestos distintos sobre las funciones que el modelo puede representar, y esos supuestos son la parte del modelado que realmente importa.
El RBF o gaussiano supone funciones infinitamente suaves y decae con la distancia; es el punto de partida razonable. El polinómico captura interacciones de grado fijo. La familia Matérn es más flexible: su parámetro controla la suavidad, y Matérn 3/2 o 5/2 suelen ajustarse mejor a datos reales que el RBF, que a menudo es demasiado suave.
La condición de Mercer caracteriza qué funciones son kernels legítimos: aquellas cuya matriz de Gram es semidefinida positiva para cualquier conjunto de puntos. Esa condición garantiza que existe un espacio de características —posiblemente de dimensión infinita— donde el kernel es el producto escalar, y es lo que hace válido el truco de la clase 290.
Las reglas de composición permiten construir kernels a medida sin verificar Mercer cada vez: sumas, productos y escalados de kernels válidos siguen siendo válidos. Con eso se combinan estructuras —periodicidad más tendencia más ruido— de forma modular, que es como se modelan series temporales complejas con GP.
Cuatro kernels y la verificación de Mercer.
valores sobre un mismo par de puntos:
RBF 0,32465247
polinómico grado 3 42,87500000
Matérn 3/2 0,26770000
matriz de Gram del RBF (4 puntos):
[1,000000 0,882497 0,606531 0,324652]
[0,882497 1,000000 0,882497 0,606531]
[ ... ]
autovalores:
[3,11850065 ; 0,78879628 ; 0,08864872 ; 0,00405435]
todos ≥ 0 → semidefinida positiva ✓
cumple Mercer ✓
El menor autovalor es 0,004: casi singular.
Sin jitter, Cholesky fallaría.Familias de kernels y la condición de Mercer.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (3) | es_semidefinida_positiva, suma_de_kernels_es_kernel, producto_de_kernels_es_kernel |
compmath run 342Procesos gaussianos, SVM no lineales, PCA con kernel, modelado de series temporales estructuradas y comparación de objetos complejos.
9780262536578 verificado en International ISBN Agency (2026-08-19).Aceptar el 95 % de las propuestas no es buena señal: significa que no se explora.
aceptar con probabilidad min(1, p(x')/p(x))
tasa óptima en 1D ≈ 0,44
descartar el burn-in antes de estimarMetropolis-Hastings genera muestras de una distribución conocida solo hasta una constante, que es la situación habitual en inferencia bayesiana: la posterior se conoce salvo por la evidencia, que es una integral intratable. El algoritmo propone un estado y lo acepta con probabilidad proporcional a la razón de densidades, en la que la constante se cancela.
El tamaño del paso de la propuesta controla todo el comportamiento, y sus dos extremos son igual de malos. Un paso pequeño acepta casi todas las propuestas pero se mueve muy despacio, produciendo muestras fuertemente autocorrelacionadas que aportan poca información nueva. Un paso grande propone estados improbables que se rechazan, y la cadena se queda quieta.
La teoría da un objetivo concreto: la tasa óptima de aceptación en una dimensión ronda 0,44, y en dimensiones altas converge a 0,234. Una tasa del 95 % no indica un buen muestreador sino un paso demasiado tímido, y es un error de lectura frecuente.
Ningún resultado MCMC debe reportarse sin diagnóstico. Descartar el burn-in inicial, examinar la autocorrelación, calcular el tamaño de muestra efectivo y ejecutar varias cadenas comprobando el estadístico R̂ son pasos obligatorios. Una cadena que no ha convergido produce números perfectamente plausibles y completamente equivocados.
Efecto del tamaño de paso sobre la exploración.
objetivo: Normal(2,0 ; 1,5)
8 000 iteraciones, burn-in 2 000
paso = 0,2:
tasa de aceptación: 0,9547
media estimada: 2,4552 error 0,455
acepta casi todo pero explora muy despacio ✗
paso óptimo (tasa ≈ 0,44):
media estimada mucho más cercana a 2,0
Tasa óptima teórica:
1 dimensión: 0,44
alta dimensión: 0,234
Una tasa alta no es buena señal: es síntoma
de que la cadena apenas se mueve.Metropolis-Hastings con diagnóstico de aceptación y autocorrelación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | iteraciones, burn_in, semilla |
| Comprobaciones (0) | — |
compmath run 343Inferencia bayesiana con posteriores complejas, física estadística, modelos jerárquicos y cuantificación de incertidumbre.
10.1201/b10905 verificado en Crossref (2026-08-19).9781439840955 verificado en International ISBN Agency (2026-08-19).Con gradientes se proponen estados lejanos que se aceptan el 99,8 % de las veces.
energía: H(q,p) = −log p(q) + ‖p‖²/2
integrador leapfrog, simpléctico
aceptación basada en la conservación de HHamiltonian Monte Carlo sustituye la propuesta aleatoria por una simulación de dinámica física. Se interpreta el logaritmo negativo de la densidad como una energía potencial, se añade una variable de momento con energía cinética, y se simula el movimiento de una partícula en ese paisaje.
La ventaja es que la partícula sigue el gradiente y se desplaza a regiones lejanas que conservan alta densidad. Donde Metropolis-Hastings tantea a ciegas y rechaza a menudo, HMC propone estados informados y los acepta casi siempre. En el ejemplo, la tasa de aceptación es del 99,8 % con propuestas mucho más lejanas.
El integrador tiene que ser simpléctico, y por eso se usa leapfrog y no Euler. Un integrador simpléctico conserva el volumen del espacio de fases, lo que es exactamente la condición que hace válida la propuesta reversible. Con un integrador cualquiera, la cadena no muestrearía la distribución correcta. Es un caso donde la elección del método numérico de la parte 11 no es una cuestión de precisión sino de corrección.
Sus dos hiperparámetros —el tamaño de paso y el número de saltos de leapfrog— son delicados de ajustar, y NUTS los adapta automáticamente. Esa es la razón de que HMC y NUTS sean hoy el motor por defecto de Stan, PyMC y NumPyro. Su límite es que exige gradientes, y por tanto no sirve con parámetros discretos.
HMC frente a random walk sobre el mismo objetivo.
objetivo: Normal(2,0 ; 1,5)
3 000 iteraciones
step size ε = 0,35 pasos de leapfrog: 12
tasa de aceptación: 0,9983
media estimada: 2,0051 error 0,005
Comparación con Metropolis-Hastings:
MH con paso 0,2: aceptación 0,95, media 2,4552
HMC con ε = 0,35: aceptación 0,998, media 2,0051
HMC acepta más Y explora más lejos, porque las
propuestas siguen el gradiente en vez de ser ciegas.
El integrador debe ser simpléctico: con Euler
la cadena muestrearía la distribución equivocada.HMC: usar el gradiente para proponer estados lejanos con alta aceptación.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (8) | iteraciones, step_size_epsilon, pasos_de_leapfrog, tasa_de_aceptacion, media_estimada, desviacion_estimada, autocorrelacion_lag_1, tamaño_efectivo_aprox |
| Comprobaciones (0) | — |
compmath run 344Motores de inferencia bayesiana como Stan y PyMC, modelos jerárquicos complejos, física computacional y cuantificación de incertidumbre en redes.
10.48550/arxiv.1206.1901 verificado en DataCite (2026-08-19).10.48550/arxiv.1701.02434 verificado en DataCite (2026-08-19).Cambiar muestreo por optimización: más rápido, aproximado y con sesgo conocido.
minimizar KL(q ‖ p) sobre la familia variacional
equivale a maximizar el ELBO
el resultado depende de la familia elegidaLa inferencia variacional plantea la aproximación de una posterior como un problema de optimización: elegir una familia de distribuciones tratables y buscar dentro de ella la que minimiza la divergencia KL respecto de la posterior real. Sustituye muestrear por minimizar.
La ventaja es la velocidad y la escala. Donde MCMC necesita miles de evaluaciones secuenciales, la inferencia variacional aprovecha descenso de gradiente, minilotes y GPU. Es lo que hace viable la inferencia bayesiana en modelos con millones de parámetros, y es la razón de que el VAE de la clase 331 funcione.
El precio es un sesgo sistemático. Como se minimiza KL(q‖p) —la dirección de búsqueda de modo, según la clase 264— la aproximación tiende a subestimar la varianza y a concentrarse en un modo. MCMC es asintóticamente exacto; la inferencia variacional es rápida y sesgada, y ese sesgo no desaparece con más cómputo.
La elección de familia determina el resultado. La aproximación de campo medio, que supone independencia entre parámetros, es la más común y la que peor captura correlaciones posteriores. Familias más expresivas —flujos normalizadores— reducen el sesgo a cambio de coste. El criterio práctico es claro: MCMC cuando el modelo es pequeño y la exactitud importa; variacional cuando el modelo es grande y la escala manda.
Aproximación variacional de una posterior normal.
posterior real: Normal(mu = 3,0 ; sigma = 0,8)
familia variacional: Normal(m, s)
paso m s KL
1 0,46875 0,945303 5,03687513
…
final 3,00000 0,800000 ≈ 0
La familia contiene la posterior real, así que
la aproximación es exacta y KL llega a 0. ✓
En un caso real la familia NO contiene la posterior,
y KL se estanca en un valor positivo: ese residuo
es el sesgo del método.
Con campo medio, s quedaría por debajo del real:
la varianza se subestima sistemáticamente.Inferencia variacional: optimizar en lugar de muestrear.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | KL_final |
| Comprobaciones (1) | converge_al_posterior |
compmath run 345VAE, redes bayesianas a escala, topic models, inferencia en modelos grandes y cuantificación rápida de incertidumbre.
10.48550/arxiv.1601.00670 verificado en DataCite (2026-08-19).10.48550/arxiv.1505.05770 verificado en DataCite (2026-08-19).Sinkhorn convierte un problema de programación lineal en escalados alternos.
min_P Σ Pᵢⱼ·Cᵢⱼ sujeto a marginales fijas
regularizado: + ε·Σ Pᵢⱼ·log Pᵢⱼ
solución: escalados alternos de filas y columnasEl transporte óptimo pregunta cuál es la forma más barata de mover una distribución de masa hasta convertirla en otra, dado un coste por unidad transportada. La formulación de Kantorovich lo plantea como un programa lineal sobre planes de transporte con marginales fijas.
Resolver ese programa lineal exactamente cuesta O(n³ log n), prohibitivo para distribuciones grandes. La aportación de Cuturi fue añadir una regularización entrópica: penalizar planes de baja entropía suaviza el problema, lo vuelve estrictamente convexo, y su solución adopta una forma que se calcula con escalados alternos de filas y columnas.
Ese algoritmo —Sinkhorn— es sencillo, paralelizable y diferenciable, lo que permite usarlo como capa dentro de una red neuronal. Esas tres propiedades juntas son las que llevaron el transporte óptimo de la matemática pura al aprendizaje automático aplicado en apenas unos años.
El parámetro ε controla el compromiso. Valores grandes dan convergencia rápida y planes muy difusos, lejos del óptimo verdadero; valores pequeños se acercan al transporte exacto pero convergen despacio y sufren problemas numéricos por desbordamiento en los exponentes. El capstone de la clase 360 mide exactamente esa convergencia.
Sinkhorn entre dos distribuciones de tres átomos.
origen: [0,4 ; 0,3 ; 0,3]
destino: [0,2 ; 0,5 ; 0,3]
matriz de coste:
[0,5 1,5 3,0]
[0,5 0,5 2,0]
[1,5 0,5 1,0]
regularización ε = 0,05
plan de transporte:
[0,200000 0,199750 0,000000]
[0,000000 0,299813 0,000000]
[0,000000 0,000437 0,299999]
marginales de fila: [0,399751 ; 0,299813 ; 0,300436]
coinciden con el origen ✓
El plan evita las celdas caras (coste 3,0 y 2,0)
y concentra la masa en las baratas.Transporte óptimo por Sinkhorn: coste de mover una distribución a otra.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | regularizacion_entropica, coste_de_transporte |
| Comprobaciones (0) | — |
compmath run 346Comparación de distribuciones, adaptación de dominios, flow matching, emparejamiento de formas y análisis de datos de una sola célula.
10.48550/arxiv.1306.0895 verificado en DataCite (2026-08-19).10.48550/arxiv.1803.00567 verificado en DataCite (2026-08-19).Wasserstein mide la separación real cuando la KL se vuelve infinita o constante.
W₁(P,Q) = ínfimo del coste de transporte con coste |x−y|
en 1D: W₁ = ∫|F_P(x) − F_Q(x)| dx
es una métrica verdaderaLa distancia de Wasserstein es el coste del transporte óptimo, y a diferencia de la KL o la JS es una métrica en sentido estricto: simétrica, no negativa, nula solo si las distribuciones coinciden, y cumple la desigualdad triangular.
Su ventaja decisiva aparece cuando los soportes no se solapan. Dos distribuciones disjuntas tienen KL infinita y JS constante en su valor máximo; en ambos casos el gradiente es inútil para acercarlas. Wasserstein, en cambio, mide cuán lejos están y su gradiente apunta en la dirección correcta. Esa es exactamente la motivación de WGAN.
Su interpretación es intuitiva y le da el nombre informal de distancia del transportista: si cada distribución es un montón de tierra, la distancia es el trabajo mínimo necesario para transformar uno en el otro. En una dimensión tiene una forma especialmente simple: el área entre las funciones de distribución acumuladas.
El resultado numérico es limpio: para dos normales con la misma varianza, W₁ es aproximadamente la diferencia de medias, y lo sigue siendo cuando están muy separadas. Con medias 0 y 5, W₁ ≈ 5,04 mientras que la KL empírica se vuelve inestable. La distancia escala con la separación real, que es lo que se quiere de una medida geométrica.
Wasserstein-1 entre normales cercanas y lejanas.
2 000 muestras de cada distribución
W₁(N(0,1) , N(0,5;1)) = 0,535306
diferencia de medias teórica: 0,5 ✓
W₁(N(0,1) , N(5;1)) = 5,042759
diferencia teórica: 5,0 ✓
KL empírica en el caso cercano: 0,144536
KL empírica en el caso lejano: inestable o infinita
Wasserstein escala linealmente con la separación.
La KL no distingue "lejos" de "muy lejos": ambas
son igual de infinitas.Wasserstein-1 en 1D: comparar distribuciones sin soporte común.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | muestras, W1(N(0,1), N(0.5,1)), diferencia_de_medias_teorica, W1(N(0,1), N(5,1)), diferencia_teorica_lejana, KL_empirica_cercana, KL_empirica_lejana_(soportes_casi_disjuntos) |
| Comprobaciones (2) | W1_crece_de_forma_proporcional, KL_no_informa_cuando_no_hay_solape |
compmath run 347WGAN, evaluación de modelos generativos, adaptación de dominios, análisis de formas y comparación de distribuciones empíricas.
10.48550/arxiv.1701.07875 verificado en DataCite (2026-08-19).9783540710509 verificado en International ISBN Agency (2026-08-19).PCA no encuentra una variedad curva: ve tres dimensiones donde solo hay una.
dimensión intrínseca ≪ dimensión ambiente
PCA solo detecta subespacios lineales
métodos no lineales: Isomap, LLE, t-SNE, UMAPLa hipótesis de la variedad sostiene que los datos reales de dimensión alta se concentran cerca de una variedad de dimensión intrínseca mucho menor. Una imagen de 1000×1000 píxeles vive en un espacio de un millón de dimensiones, pero el conjunto de imágenes de caras es un subconjunto minúsculo y estructurado de ese espacio.
Esa hipótesis es lo que hace posible el aprendizaje en dimensión alta. Si los datos ocuparan uniformemente el espacio ambiente, la maldición de la dimensionalidad de la clase 288 sería insuperable. Como no lo hacen, un modelo puede aprender la estructura de la variedad con una cantidad razonable de ejemplos.
PCA solo encuentra subespacios lineales, y esa limitación se ve con claridad en el ejemplo. Una hélice es una curva de dimensión intrínseca 1 sumergida en tres dimensiones; PCA reparte la varianza entre las tres componentes —49 %, 36 % y 14 %— sin detectar en ningún momento que hay un solo grado de libertad. La variedad es curva y PCA solo ve rectas.
Los métodos no lineales atacan justamente eso. Isomap usa distancias geodésicas sobre el grafo de vecinos en vez de distancias euclídeas; t-SNE y UMAP preservan la estructura local y son las herramientas estándar de visualización. Con una precaución importante: t-SNE y UMAP no preservan distancias globales, así que el tamaño y la separación de los grupos en sus gráficos no son interpretables.
Una hélice: dimensión intrínseca 1 en un espacio de 3.
120 puntos sobre una hélice
dimensión ambiente: 3
dimensión intrínseca: 1
autovalores de la covarianza:
[0,177520 ; 0,129535 ; 0,052063]
varianza explicada:
[49,43 % ; 36,07 % ; 14,50 %]
PCA reparte la varianza entre las tres componentes
y no detecta que hay un solo grado de libertad. ✗
Un método basado en distancias geodésicas sobre el
grafo de vecinos sí recuperaría la dimensión 1.Variedad: dimensión intrínseca menor que la del espacio ambiente.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | puntos, dimension_ambiente, dimension_intrinseca, distancia_euclidea_extremos, distancia_geodesica_extremos, razon |
| Comprobaciones (1) | PCA_no_detecta_1_dimension |
compmath run 348Visualización de datos de alta dimensión, reducción de dimensión no lineal, análisis de espacios latentes y exploración de embeddings.
10.1126/science.290.5500.2319 verificado en Crossref (2026-08-19).10.48550/arxiv.1802.03426 verificado en DataCite (2026-08-19).La longitud de una curva es la integral de su rapidez, y eso se verifica numéricamente.
velocidad: r'(t)
rapidez: ‖r'(t)‖
longitud de arco: ∫ ‖r'(t)‖ dtLa geometría diferencial estudia espacios curvos con las herramientas del cálculo. Su objeto central es el tensor métrico, que define cómo medir distancias y ángulos localmente, y del que se derivan longitudes, geodésicas y curvatura.
El caso más simple es una curva parametrizada. Su velocidad es la derivada del vector de posición, su rapidez es la norma de esa velocidad, y la longitud de arco es la integral de la rapidez. Para una hélice el cálculo es exacto y sirve de verificación numérica: la rapidez teórica √(1 + 0,09) = 1,044031 coincide con la calculada, y la longitud sobre un periodo también.
Las geodésicas son las curvas de longitud mínima, la generalización de la recta a espacios curvos. En una esfera son arcos de círculo máximo, que es la razón de que las rutas aéreas parezcan curvas en un mapa plano. La distancia geodésica es la que Isomap usa en la clase anterior.
Su relevancia para el aprendizaje automático llega por dos vías. La hipótesis de la variedad convierte el espacio de datos en un objeto geométrico donde la distancia relevante es la geodésica y no la euclídea. Y la geometría de la información de la clase siguiente aplica estas mismas herramientas al espacio de parámetros, dotándolo de una métrica natural.
Hélice: rapidez y longitud de arco verificadas.
curva: r(t) = (cos t , sin t , 0,3t)
velocidad en t = 1:
(−0,841471 ; 0,540302 ; 0,300000)
rapidez = ‖r'(1)‖ = 1,044031
teórica = √(1 + 0,09) = 1,044031 ✓
longitud de arco de 0 a 2π:
calculada = 6,559838
teórica = 2π · 1,044031 = 6,559838 ✓
La rapidez es constante porque la hélice avanza
de forma uniforme: es una parametrización natural.Geometría diferencial: métrica, longitud de curva y curvatura.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | rapidez, rapidez_teorica_√(1+0.09), longitud_de_arco_0_a_2π, longitud_teorica, curvatura, curvatura_teorica_1/1.09 |
| Comprobaciones (0) | — |
compmath run 349Aprendizaje sobre variedades, robótica y planificación de trayectorias, relatividad, geometría de espacios latentes y optimización sobre variedades.
9780486806990 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.2104.13478 verificado en DataCite (2026-08-19).La información de Fisher es la curvatura de la KL, y de ella salen Cramér-Rao y el gradiente natural.
I(θ) = E[(∂ log p/∂θ)²]
KL(p_θ ‖ p_{θ+ε}) ≈ ½·I(θ)·ε²
Cramér-Rao: Var(θ̂) ≥ 1/(n·I(θ))La geometría de la información trata el conjunto de distribuciones de una familia paramétrica como una variedad, donde cada punto es una distribución. La pregunta natural es qué métrica usar en ese espacio, y la respuesta es la información de Fisher.
Su significado es que la KL, localmente, se comporta como una forma cuadrática cuya matriz es Fisher. La comprobación numérica lo confirma: para un desplazamiento minúsculo ε, la KL entre p y p+ε coincide con ½·I(p)·ε² con razón 1,0. Esa identidad es lo que convierte a Fisher en la métrica natural del espacio de parámetros, no una elección arbitraria.
De ahí salen dos resultados centrales. La cota de Cramér-Rao establece un límite inferior a la varianza de cualquier estimador insesgado: donde la información es alta, se puede estimar con precisión; donde es baja, ningún estimador puede ser preciso. En la Bernoulli, la información es máxima en los extremos —11,1 para p = 0,1— y mínima en 0,5, lo que dice que es más fácil estimar un parámetro cercano a los extremos.
El gradiente natural preacondiciona el gradiente con la inversa de Fisher, con lo que la dirección de descenso deja de depender de cómo se hayan parametrizado los pesos. Es elegante y costoso —requiere invertir Fisher— y de ahí vienen aproximaciones prácticas como K-FAC. La restricción de KL de PPO en la clase 339 es una manifestación de la misma idea: medir el cambio de la política en el espacio de distribuciones, no en el de parámetros.
Información de Fisher y su relación con la KL.
Bernoulli:
p = 0,1 → I = 11,111111
p = 0,5 → I = 4,000000
p = 0,9 → I = 11,111111
máxima en los extremos ✓
Normal:
σ = 0,5 → I = 4,00
σ = 1,0 → I = 1,00
σ = 2,0 → I = 0,25
KL localmente es una métrica (p = 0,1):
KL(p ‖ p+ε) = 5,5523e-08
½·I(p)·ε² = 5,5556e-08
razón ≈ 1,0 ✓
Cramér-Rao: Var(θ̂) ≥ 1/(n·I(θ))
Gradiente natural: ∇̃ = I(θ)⁻¹∇Información de Fisher: la métrica natural del espacio de parámetros.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (0) | — |
| Comprobaciones (1) | la_informacion_es_maxima_en_los_extremos |
compmath run 350Gradiente natural y K-FAC, PPO, diseño experimental óptimo, cotas de precisión de estimadores y análisis de identificabilidad.
9784431559788 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1412.1193 verificado en DataCite (2026-08-19).En una SDE el ruido escala como √dt, no como dt: esa raíz lo cambia todo.
dX = f(X,t)dt + g(X,t)dW
Euler-Maruyama: X ← X + f·dt + g·√dt·ξ
Ornstein-Uhlenbeck: dX = θ(μ − X)dt + σ dWUna ecuación diferencial estocástica añade a la dinámica determinista un término de ruido continuo. El primer término, la deriva, describe hacia dónde tiende el sistema; el segundo, la difusión, describe la magnitud de las fluctuaciones aleatorias.
El detalle que hay que interiorizar es el escalado del ruido. El movimiento browniano tiene incrementos de varianza proporcional al tiempo, así que la desviación escala como √dt. En el integrador de Euler-Maruyama eso significa multiplicar el ruido por √dt y no por dt. Usar dt produce una simulación con la magnitud de ruido completamente equivocada, y es el error más frecuente al implementar SDE.
Ese mismo hecho tiene una consecuencia teórica: las trayectorias brownianas son continuas pero no derivables en ningún punto, y por eso el cálculo ordinario no sirve. El cálculo de Itô y su lema son la herramienta correcta, y son la razón de que la fórmula de Black-Scholes tenga el término adicional que tiene.
El proceso de Ornstein-Uhlenbeck del ejemplo es el prototipo con reversión a la media: la deriva empuja hacia μ con fuerza proporcional a la distancia, mientras el ruido lo aparta. Su distribución estacionaria es normal, y aparece en modelos de tipos de interés, en física y en la formulación en tiempo continuo de los modelos de difusión de la clase 334.
Ornstein-Uhlenbeck simulado con Euler-Maruyama.
SDE: dX = θ(μ − X)dt + σ dW
θ = 1,5 μ = 2,0 σ = 0,8
dt = 0,01 400 réplicas
paso t x
1 0,01 0,014091
101 1,01 1,xxxxxx
… → oscila alrededor de μ = 2,0
Escalado del ruido:
correcto: σ·√dt·ξ = 0,8·0,1·ξ = 0,08·ξ
incorrecto: σ·dt·ξ = 0,8·0,01·ξ = 0,008·ξ
factor 10 de diferencia
Con el escalado incorrecto la simulación parecería
casi determinista.SDE: proceso de Ornstein-Uhlenbeck simulado con Euler-Maruyama.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (7) | dt, replicas, media_estacionaria_empirica, media_estacionaria_teorica, varianza_estacionaria_empirica, varianza_estacionaria_teorica_σ²/(2θ), semilla |
| Comprobaciones (1) | el_termino_de_ruido_escala_como_√dt |
compmath run 351Modelos de difusión en tiempo continuo, finanzas cuantitativas, física estadística, dinámica de Langevin y modelado de ruido en sistemas.
9783642143946 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.2011.13456 verificado en DataCite (2026-08-19).El método adjunto calcula gradientes con memoria constante, sin guardar la trayectoria.
dz/dt = f(z, t, θ)
salida: z(T) = z(0) + ∫₀ᵀ f dt
gradientes por una EDO adjunta hacia atrásUn Neural ODE observa que una red residual —z ← z + f(z)— es un paso de Euler de una ecuación diferencial, y lleva la idea al límite: en vez de un número discreto de capas, una dinámica continua integrada por un solver numérico. La profundidad deja de ser un entero y pasa a ser un intervalo de tiempo.
La ventaja más citada es el método adjunto para calcular gradientes. En vez de guardar todas las activaciones intermedias como hace backpropagation, se resuelve una EDO auxiliar hacia atrás que reconstruye lo necesario sobre la marcha. El coste de memoria pasa a ser constante, independiente de la profundidad efectiva.
La otra ventaja es el cómputo adaptativo: un solver con paso adaptativo dedica más evaluaciones donde la dinámica es complicada y menos donde es suave. El modelo ajusta su esfuerzo al problema en vez de tener un número fijo de capas.
El coste es la velocidad. Los solvers adaptativos requieren muchas evaluaciones de la red y son más lentos que una pila de capas discretas. Su valor práctico está en dominios donde la dinámica continua es natural: series temporales irregularmente muestreadas, física, y los flujos continuos normalizadores. Toda la parte 11 se vuelve directamente relevante: elegir el integrador y su tolerancia es una decisión de modelado.
Neural ODE lineal con solución analítica conocida.
ODE: dz/dt = −θz solución: z₀·e^(−θt)
z(T) exacto = 0,16529889
convergencia de Euler:
5 pasos: z(T) = 0,10737418 error 0,0579
20 pasos: ... error menor
80 pasos: ... error/4 por duplicación
Orden 1 confirmado, como en la clase 236. ✓
pérdida: L = (z(T) − 0,2)²
dL/dθ por método adjunto = 0,168375
El adjunto obtiene el gradiente sin haber guardado
ninguna activación intermedia.Neural ODE: capas continuas y el método adjunto.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (3) | z(T)_exacto, dL/dθ_por_metodo_adjunto, dL/dθ_analitico |
| Comprobaciones (1) | coinciden_aproximadamente |
compmath run 352Series temporales irregulares, flujos continuos normalizadores, modelado físico, dinámica de sistemas y modelos de difusión en tiempo continuo.
10.48550/arxiv.1806.07366 verificado en DataCite (2026-08-19).10.48550/arxiv.2202.02435 verificado en DataCite (2026-08-19).El score no depende de la constante de normalización, y esa es precisamente la parte intratable.
score: s(x) = ∇ₓ log p(x)
log p(x) = log p̃(x) − log Z
∇ₓ log Z = 0, luego el score ignora ZEl score es el gradiente del logaritmo de la densidad respecto de la entrada. Apunta hacia las regiones de mayor densidad, y su magnitud indica cuán pronunciada es la subida. Es un campo vectorial que describe la distribución tan completamente como la densidad misma.
Su propiedad decisiva es que no depende de la constante de normalización. Como el logaritmo convierte el producto en suma y la constante no depende de x, su gradiente es cero y desaparece. Eso importa muchísimo porque Z es una integral sobre todo el espacio, intratable en cualquier modelo interesante, y es lo que bloqueaba históricamente el entrenamiento de modelos basados en energía.
La demostración numérica es directa: multiplicar la densidad por una constante arbitraria no cambia el score en ningún punto. Se puede modelar la distribución salvo un factor y aun así caracterizarla completamente.
Conocido el score, la dinámica de Langevin genera muestras: seguir el score con un poco de ruido converge a la distribución. Combinar esa idea con múltiples niveles de ruido es exactamente lo que hacen los modelos de difusión de la clase 335 —la red que predice el ruido está estimando el score— y esa equivalencia unifica dos líneas de trabajo que parecían distintas.
Score de una normal, con y sin constante arbitraria.
distribución: Normal(1,5 ; 0,7)
score analítico: −(x − μ)/σ²
x analítico numérico
0,0 3,061224 3,061224 ✓
1,5 0,000000 0,000000 ✓
2,5 −2,040816 −2,040816 ✓
Con la densidad multiplicada por una constante:
score en x = 1,0: 1,020408
idéntico al de la densidad normalizada ✓
El score en el máximo vale 0: es donde la densidad
deja de crecer.
Por eso importa: Z es una integral intratable,
y el score no la necesita.Score matching: aprender ∇ log p sin conocer la constante de normalización.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | score_con_constante_arbitraria |
| Comprobaciones (1) | es_el_mismo |
compmath run 353Modelos de difusión, modelos basados en energía, dinámica de Langevin, estimación de densidad y generación de imágenes.
10.48550/arxiv.1907.05600 verificado en DataCite (2026-08-19).El signo del vector de Fiedler dice por dónde partir el grafo en dos.
L = D − A; autovalores 0 = λ₁ ≤ λ₂ ≤ …
λ₂ = conectividad algebraica
partición por el signo del autovector de λ₂El agrupamiento espectral resuelve un problema difícil mediante una relajación continua. Partir un grafo minimizando el número de aristas cortadas es un problema combinatorio NP-difícil; relajarlo a variables continuas lo convierte en un problema de autovectores, que se resuelve en tiempo polinómico.
El autovector asociado al segundo autovalor —el vector de Fiedler— es la solución de esa relajación, y el signo de cada componente indica a qué lado del corte asignar cada nodo. En el ejemplo, cuatro nodos tienen componente negativa y cuatro positiva, y esa partición corresponde exactamente a la estructura de comunidades del grafo.
La conectividad algebraica λ₂ cuantifica cuán bien separado está el grafo. Un valor pequeño —0,29 en el ejemplo, frente a autovalores posteriores de 2 y 4— indica que existe un corte barato y que la partición es significativa. Si λ₂ fuera comparable a los demás, el corte sería arbitrario.
El método se generaliza a más de dos grupos usando los primeros k autovectores como coordenadas y aplicando k-means en ese espacio. Su ventaja sobre k-means directo es que funciona con grupos no convexos, que es justamente donde k-means falla. Su límite es el coste: calcular autovectores de un grafo enorme requiere métodos iterativos como los de la parte 11.
Grafo de 8 nodos partido por el vector de Fiedler.
8 nodos, 11 aristas
autovalores del Laplaciano:
[0,0 ; 0,29072464 ; 2,0 ; 2,80606343 ; 4,0 ; 4,0 ; 4,0 ; 4,90321193]
multiplicidad de 0: 1 → grafo conexo ✓
conectividad algebraica: 0,29072464
vector de Fiedler:
[−0,432487 ; −0,369619 ; −0,369619 ; −0,199295 ;
0,199295 ; 0,369619 ; 0,369619 ; 0,432487]
partición por signo:
grupo A: nodos 0, 1, 2, 3
grupo B: nodos 4, 5, 6, 7
λ₂ = 0,29 frente a λ₃ = 2,0: el corte es claro.Clustering espectral: el vector de Fiedler separa el grafo.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | nodos, aristas, conectividad_algebraica, aristas_cortadas, corte_minimo_esperado |
| Comprobaciones (2) | grafo_conexo, particion_correcta |
compmath run 354Detección de comunidades, segmentación de imágenes, partición de mallas, análisis de redes sociales y agrupamiento de datos no convexos.
10.48550/arxiv.0711.0189 verificado en DataCite (2026-08-19).10.1109/34.868688 verificado en Crossref (2026-08-19).El coeficiente sin ajustar estima 1,02 un efecto que en realidad es cero.
criterio de puerta trasera: bloquear todos los caminos X ← … → Y
confusor: Z → X y Z → Y
colisionador: X → C ← Y, condicionar crea asociaciónLa inferencia causal formaliza qué significa que X cause Y y cuándo se puede estimar ese efecto a partir de datos observacionales. Su lenguaje son los grafos causales dirigidos, donde las flechas representan relaciones causales y los caminos determinan qué asociaciones aparecen.
El criterio de puerta trasera dice qué variables hay que ajustar: un conjunto que bloquee todos los caminos no causales entre X e Y. Ajustar por ese conjunto permite estimar el efecto causal correctamente. La demostración numérica es contundente: con un efecto causal real de cero, el coeficiente sin ajustar estima 1,02 —una relación fuerte e inexistente— y al ajustar por el confusor baja a 0,007.
El resultado que más contradice la intuición es el sesgo de colisionador. Si dos variables independientes causan una tercera, condicionar sobre esa tercera crea correlación entre ellas donde no había ninguna. Ajustar por todo lo disponible no es una estrategia conservadora: puede introducir sesgo donde no lo había.
La conclusión metodológica es que no se puede decidir qué ajustar mirando solo los datos. Hace falta un modelo causal, es decir, conocimiento del dominio sobre qué causa qué. Los datos por sí solos no distinguen un confusor de un colisionador, y esa es la razón profunda de que la aleatorización sea tan valiosa: rompe todos los caminos de puerta trasera a la vez, conocidos y desconocidos.
Efecto real cero, estimado en 1,02 sin ajustar.
estructura: Z → X, Z → Y, X ↛ Y
efecto causal real de X sobre Y: 0,0
coeficiente sin ajustar: 1,0243 ✗
coeficiente ajustando por Z: 0,0074 ✓
El ajuste recupera el efecto real.
Criterio de puerta trasera:
bloquear todos los caminos X ← … → Y
Colisionador (X → C ← Y):
correlación X-Y sin condicionar C: −0,0145
(independientes, como deben ser)
al condicionar sobre C aparecería correlación
donde no la hay.Confusión, ajuste por backdoor y el sesgo de colisionador.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (5) | efecto_causal_real_de_X_sobre_Y, coeficiente_sin_ajustar, coeficiente_ajustando_por_Z, correlacion_X_Y_sin_condicionar_el_colisionador, correlacion_condicionando_el_colisionador |
| Comprobaciones (2) | el_ajuste_recupera_el_efecto, condicionar_un_colisionador_crea_sesgo |
compmath run 355Evaluación de políticas y tratamientos, atribución en marketing, análisis de equidad algorítmica, epidemiología y diseño de experimentos.
9780511803161 verificado en International ISBN Agency (2026-08-19).Con 25 parámetros y 30 datos se acierta el 80 % en entrenamiento sobre etiquetas aleatorias.
R(h) = R_emp(h) + brecha de generalización
la brecha crece con la complejidad y decrece con n
cota uniforme: sup_h |R(h) − R_emp(h)|La teoría estadística del aprendizaje separa dos cantidades que se confunden a diario. El riesgo empírico es el error medido sobre la muestra de entrenamiento; el riesgo verdadero es el error esperado sobre la distribución real. Minimizar el primero es lo que se puede hacer; controlar el segundo es lo que interesa.
La diferencia entre ambos es la brecha de generalización, y depende de dos cosas: la complejidad de la clase de hipótesis y el número de ejemplos. Con muchos datos y una clase simple la brecha es pequeña; con pocos datos y una clase rica puede ser enorme, y el modelo memoriza en vez de aprender.
La demostración usa etiquetas completamente aleatorias, sin ninguna señal que aprender, y por tanto con accuracy esperada de 0,5. Con 30 observaciones y 25 parámetros, el modelo acierta el 80 % en entrenamiento y el 48,5 % en test: la brecha entera es memorización. El número de entrenamiento no mide nada.
Las cotas teóricas acotan el peor caso sobre toda la clase de hipótesis, no el caso concreto. Esa uniformidad es lo que las hace válidas y también lo que las hace holgadas: son correctas y muy pesimistas. En redes profundas predicen que no debería haber generalización, y la hay. Explicar esa discrepancia es un área abierta, y conviene presentarla así en vez de fingir que la teoría clásica describe lo que ocurre.
Memorización pura sobre etiquetas aleatorias.
señal real en los datos: NINGUNA
accuracy esperada: 0,5
n = 30, d = 25:
accuracy train: 0,800
accuracy test: 0,485
brecha: 0,315
El 80 % de entrenamiento es memorización completa:
con 25 parámetros y 30 datos hay capacidad de sobra
para ajustar ruido.
El test confirma que no se aprendió nada: 0,485
es indistinguible del azar.
Descomposición: R(h) = R_emp(h) + brechaRiesgo empírico frente a riesgo verdadero y la brecha de generalización.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | accuracy_esperada, semilla |
| Comprobaciones (2) | mas_parametros_que_datos_memoriza, el_riesgo_empirico_solo_no_basta |
compmath run 356Diseño de experimentos de aprendizaje, elección de capacidad, comprensión del sobreajuste y justificación de la validación.
9781139950619 verificado en International ISBN Agency (2026-08-19).10.48550/arxiv.1611.03530 verificado en DataCite (2026-08-19).Una clase con infinitas hipótesis puede tener dimensión VC igual a 1.
VC = tamaño del mayor conjunto que la clase fragmenta
umbrales en 1D: VC = 1
hiperplanos en ℝᵈ: VC = d + 1La dimensión de Vapnik-Chervonenkis mide la capacidad de una clase de hipótesis por lo que puede hacer, no por cuántas hipótesis contiene. Una clase fragmenta un conjunto de puntos si puede realizar todas las 2ⁿ etiquetaciones posibles, y la dimensión VC es el tamaño del mayor conjunto que consigue fragmentar.
La distinción con el número de hipótesis es la aportación conceptual. La clase de los umbrales en una dimensión es infinita —hay un umbral por cada número real— y su dimensión VC es 1: puede etiquetar un punto de las dos formas, pero con dos puntos no puede producir la etiquetación «derecha positiva, izquierda negativa». Contar hipótesis no mide capacidad; fragmentar sí.
Los valores conocidos son informativos. Los intervalos en una dimensión tienen VC 2, porque no pueden etiquetar + − +. Los hiperplanos en ℝᵈ tienen VC d+1, así que en el plano son 3: con cuatro puntos en las esquinas de un cuadrado, la configuración XOR no es separable, exactamente el problema del perceptrón de la clase 301.
Su papel es dar cotas de generalización que dependen de la capacidad y no del número de hipótesis. Su límite práctico es severo: para redes neuronales la dimensión VC crece con el número de parámetros, lo que predice que las redes modernas no deberían generalizar en absoluto. La teoría es correcta y la cota es tan holgada que no informa; medidas alternativas como la complejidad de Rademacher o las basadas en normas se comportan algo mejor, sin resolver del todo la cuestión.
Dimensión VC de tres clases de hipótesis.
Umbrales en 1D:
fragmenta 1 punto: sí
fragmenta 2 puntos: no
VC = 1
(la clase es infinita y su VC vale 1)
Intervalos en 1D:
VC = 2
razón: no puede etiquetar + − + con un solo intervalo
Hiperplanos en ℝᵈ:
VC = d + 1
en ℝ²: VC = 3
Por qué no 4 puntos en ℝ²:
XOR en las esquinas de un cuadrado no es separable,
el mismo obstáculo del perceptrón.Dimensión VC: cuántos puntos puede fragmentar una clase de hipótesis.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | hiperplanos_en_R^2 |
| Comprobaciones (0) | — |
compmath run 357Cotas de generalización, comparación de familias de modelos, teoría del aprendizaje y análisis de complejidad de clases de hipótesis.
9781475732641 verificado en International ISBN Agency (2026-08-19).9781139950619 verificado en International ISBN Agency (2026-08-19).Reducir el error a la mitad duplica los datos; subir la confianza cuesta un logaritmo.
con probabilidad ≥ 1−δ, error ≤ ε
n ≈ (1/ε)·(VC + log(1/δ))
crece como 1/ε y como log(1/δ)El marco PAC —probablemente aproximadamente correcto— formaliza qué significa aprender. No se exige acertar siempre ni exactamente: se exige que, con probabilidad al menos 1−δ, el error de la hipótesis elegida sea a lo sumo ε. Dos parámetros, dos formas de fallar admitidas.
La complejidad muestral es el número de ejemplos necesarios para garantizar eso, y su forma revela una asimetría muy útil. Crece como 1/ε: reducir el error a la mitad duplica los datos necesarios. Pero crece solo como log(1/δ): pasar de un 95 % a un 99,9 % de confianza cuesta muy poco. Precisión es cara, confianza es barata.
La dependencia de la complejidad de la clase es lineal en la dimensión VC. Con ε = 0,1 y δ = 0,05, una clase de VC 10 necesita 261 ejemplos y una de VC 100 necesita 2 331. Diez veces más capacidad, diez veces más datos: la relación es directa y da una intuición correcta sobre el coste de la complejidad.
Hay que ser explícito sobre su alcance. Las cotas son válidas y muy holgadas: aplicadas a una red moderna piden más ejemplos que átomos hay en el universo observable. Su valor es cualitativo —cómo escalan las cosas— no cuantitativo. Interpretarlas como predicción del error real es un error de lectura, y decirlo evita presentar la teoría como algo que no es.
Muestras necesarias para distintos ε y complejidades.
δ = 0,05 (confianza del 95 %)
con ε = 0,1:
clase de 1 000 hipótesis: 100 ejemplos
VC = 10: 261 ejemplos
VC = 100: 2 331 ejemplos
Escalado:
ε a la mitad → datos × 2
δ a la décima → datos + log(10), casi nada
VC × 10 → datos × 10 aproximadamente
Precisión es cara; confianza es barata.
Aplicado a una red con 10⁹ parámetros, la cota
pediría un número de ejemplos absurdo. La teoría
es correcta; la cota, inservible en la práctica.PAC: cuántas muestras hacen falta para (ε, δ).
| Grupo | Salidas |
|---|---|
| Resultados numéricos (1) | delta |
| Comprobaciones (2) | el_coste_crece_como_1/ε, es_una_cota_del_peor_caso |
compmath run 358Fundamentos teóricos del aprendizaje, dimensionamiento conceptual de conjuntos de datos, comparación de familias de modelos y análisis de aprendibilidad.
10.1145/1968.1972 verificado en Crossref (2026-08-19).9781139950619 verificado en International ISBN Agency (2026-08-19).El error decae como una potencia del tamaño, y ese exponente es lo que predice el escalado.
error ≈ C·(parámetros)^α
polinomios sobre funciones suaves: convergencia muy rápida
lineal por trozos: error / 4 al duplicar los trozosLa teoría de aproximación estudia con qué precisión una familia de funciones puede representar otra, y cómo mejora esa precisión al aumentar los recursos. Es la base teórica de las leyes de escala que gobiernan el desarrollo de modelos grandes.
La forma general del resultado es una ley de potencias: el error decae como el número de parámetros elevado a un exponente negativo. Ese exponente depende de la suavidad de la función objetivo y de la familia aproximante, y es lo que determina si merece la pena aumentar el tamaño.
El ejemplo lo muestra en dos regímenes. Con polinomios sobre una función suave, el exponente empírico es −7,68: convergencia extraordinariamente rápida, porque la función es analítica. Con aproximación lineal por trozos, duplicar el número de trozos divide el error por 4, lo que corresponde a un exponente de −2: mucho más lento pero robusto, sin depender de la suavidad global.
La conexión con el aprendizaje profundo es directa. Las leyes de escala de Kaplan y de Hoffmann son leyes de potencias empíricas que relacionan pérdida con parámetros, datos y cómputo, y permiten predecir el rendimiento de un modelo antes de entrenarlo. La corrección de Chinchilla —que los modelos estaban infraentrenados en datos— salió de tomar en serio esos exponentes. Ninguna ley de potencias es eterna: hay saturación cuando se agota la información disponible, y ese límite es hoy una pregunta abierta.
Dos regímenes de aproximación sobre la misma función.
objetivo: e^(−x)·sin(4x) en [0,1]
Aproximación polinómica:
grado 1 (2 parámetros): error máximo 0,7920526488
grado 3 ( ... ): error mucho menor
exponente de escala empírico: −7,6813
convergencia rapidísima: la función es analítica
Aproximación lineal por trozos:
2 trozos: error máximo 0,3797908445
4 trozos: error menor
razón de error al duplicar: 3,9755 ≈ 4
exponente ≈ −2
Lectura: error ≈ C·(parámetros)^exponente
Los polinomios ganan aquí porque la función es suave;
con una función con esquinas, la victoria sería
del método por trozos.Teoría de aproximación y leyes de escala: el error como potencia del tamaño.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (2) | exponente_de_escala_empirico, razon_de_error_al_duplicar_trozos |
| Comprobaciones (0) | — |
compmath run 359Leyes de escala de modelos de lenguaje, planificación de presupuestos de cómputo, elección de arquitecturas y teoría de aproximación con redes neuronales.
10.48550/arxiv.2001.08361 verificado en DataCite (2026-08-19).10.48550/arxiv.2203.15556 verificado en DataCite (2026-08-19).Reproducir un resultado publicado con datos donde el óptimo se conoce por fuerza bruta.
coste de Sinkhorn → transporte óptimo cuando ε → 0
óptimo exacto verificado por barrido de todos los planes
reportar semilla, protocolo y discrepanciaEl capstone final del programa reproduce el núcleo matemático de un resultado publicado: el estimador de Sinkhorn converge al transporte óptimo verdadero cuando la regularización entrópica tiende a cero, según Cuturi en 2013. No es una implementación decorativa: es una verificación.
El diseño experimental es lo que hace la verificación válida. Se elige un problema suficientemente pequeño para que el óptimo se pueda calcular por fuerza bruta —barriendo todos los planes de transporte posibles— de modo que exista una referencia exacta contra la que comparar. Sin esa referencia, «el algoritmo converge» sería una afirmación no verificable.
Después se ejecuta Sinkhorn con ε decreciente y se comprueba que el coste se aproxima monótonamente al óptimo conocido. Lo que se está verificando no es que el código funcione, sino que el enunciado del artículo es cierto en un caso donde se puede comprobar.
Esa es la habilidad que el programa entero ha construido, clase a clase: leer un enunciado matemático, traducirlo a código, diseñar un caso donde la respuesta se conoce, comparar, y reportar el protocolo completo con semilla y discrepancias. Trescientas sesenta clases después de contar con los dedos en la parte 00, esa es la diferencia entre creer un resultado y saberlo.
Verificación del resultado de Cuturi sobre un caso exacto.
resultado reproducido:
el coste de Sinkhorn converge al transporte óptimo
cuando la regularización entrópica tiende a cero
fuente: Cuturi, M. Sinkhorn Distances, NIPS 2013
protocolo:
dos masas uniformes de 2 átomos en ℝ
coste cuadrático (x − y)²
matriz de coste:
[0,0 9,0]
[1,0 4,0]
óptimo exacto por barrido: 2,0
plan óptimo:
[0,5 0,0]
[0,0 0,5]
Sinkhorn con ε decreciente se acerca a 2,0
monótonamente: el enunciado se sostiene. ✓Capstone: reproducir el núcleo matemático de un resultado publicado.
| Grupo | Salidas |
|---|---|
| Resultados numéricos (6) | optimo_exacto_por_barrido, peor_plan_extremo, simetria_ida_A_a_B, simetria_vuelta_B_a_A, diferencia, tolerancia_declarada |
| Comprobaciones (6) | el_problema_no_es_degenerado, el_error_decrece_monotonamente, el_error_es_siempre_positivo, la_entropia_del_plan_baja_con_epsilon, coincide_con_d², es_simetrica |
compmath run 360Reproducción de artículos, validación de implementaciones, investigación aplicada, revisión por pares y verificación de resultados antes de construir sobre ellos.
10.48550/arxiv.1306.0895 verificado en DataCite (2026-08-19).10.48550/arxiv.1803.00567 verificado en DataCite (2026-08-19).Computational Mathematics Program v0.2.0 · MIT · generado automáticamente · ninguna cifra de este manual se escribió a mano: todas se derivan del repositorio.