01 · Punto de partida
¿Dónde se origina un resultado poco confiable?
Cuando una salida cambia demasiado al modificar ligeramente una entrada, podemos culpar al código, a los datos o al método. Sin embargo, existen tres fenómenos distintos:
Condicionamiento
Describe cuánto responde la solución exacta del problema ante pequeñas perturbaciones de los datos.
Estabilidad
Describe si el algoritmo introduce o amplifica errores innecesariamente durante el cálculo.
Convergencia
Describe si las aproximaciones se acercan a la solución al aumentar iteraciones o resolución.
Esta separación es esencial para diagnosticar. Un algoritmo excelente no puede recuperar información que un problema extremadamente sensible perdió en los datos. A la inversa, un problema bien condicionado puede resolverse mal con una implementación inestable.
02 · Sensibilidad del problema
¿Qué significa que un problema esté condicionado?
Imaginemos un problema representado por y = f(x). El dato real es x, pero recibimos x + Δx. Aun si evaluáramos f con aritmética exacta, la salida cambiaría:
Bien condicionado
La salida cambia de manera comparable
Pequeñas perturbaciones de entrada producen pequeñas perturbaciones de salida.
Mal condicionado
La salida amplifica la perturbación
Un cambio diminuto en los datos puede producir una diferencia relativa muy grande.
“Bien” y “mal” no son propiedades absolutas sin contexto. Dependen del punto donde evaluamos, de la forma de medir los errores y de la precisión que exige la aplicación.
03 · Medidas de sensibilidad
Número de condición absoluto y relativo
Para una función derivable de una variable, el cambio local cumple aproximadamente:
Por eso, una medida absoluta de condición es:
Si queremos relacionar errores relativos y x ≠ 0, f(x) ≠ 0, obtenemos:
La interpretación aproximada es:
| κ | Interpretación | Efecto aproximado |
|---|---|---|
| Menor que 1 | La perturbación relativa se atenúa | Se pierden menos cifras relativas |
| Cercano a 1 | La perturbación se conserva en escala | Entrada y salida tienen errores comparables |
| Mucho mayor que 1 | La perturbación se amplifica | Pueden perderse cifras significativas |
| Infinito o no definido | Punto singular o escala relativa inadecuada | Se requiere otro análisis |
04 · Comparar funciones
Ejemplos de números de condición
Potencia f(x) = xⁿ
Como f′(x) = nxⁿ⁻¹, el número relativo es:
Elevar al cuadrado duplica aproximadamente el error relativo; elevar a la décima potencia lo multiplica por diez.
Recíproco f(x) = 1/x
Para x ≠ 0, el número relativo es 1. Aunque la función crece cerca de cero, un pequeño error relativo en x produce aproximadamente el mismo error relativo en 1/x.
Función f(x) = 1/(1−x)
Su número relativo es:
Cerca de x = 1, el denominador se aproxima a cero y el condicionamiento empeora rápidamente.
function condicionReciprocoDesplazado(x) {
if (x === 1) return Infinity;
return Math.abs(x / (1 - x));
}
for (const x of [0, 0.5, 0.9, 0.99, 0.999999]) {
console.log(x, condicionReciprocoDesplazado(x));
}
05 · Un problema inherentemente sensible
Condicionamiento de una resta
Para calcular x − y con perturbaciones independientes en ambos datos, una medida relativa aproximada es:
Si x e y son cercanos, el denominador es pequeño y el número de condición crece.
| x | y | x − y | κ aproximado |
|---|---|---|---|
| 10 | 2 | 8 | 1.5 |
| 10 | 9 | 1 | 19 |
| 10 | 9.99 | 0.01 | 1999 |
| 10 | 9.999999 | 0.000001 | aprox. 20 millones |
La cancelación estudiada en el tema anterior es la manifestación computacional de esta sensibilidad. A veces podemos reformular el problema; otras veces la pequeña diferencia es precisamente el dato buscado y necesitamos entradas de mayor precisión.
06 · Dos formas de medir un algoritmo
Error hacia adelante y error hacia atrás
Sea y = f(x) la respuesta exacta y ỹ la respuesta calculada.
- Error hacia adelante
- Mide la distancia entre la salida calculada
ỹy la salida exactay. - Error hacia atrás
- Busca una entrada cercana
x + Δxpara la cual la salida calculada sea exacta:ỹ = f(x + Δx).
Ejemplo: raíz cuadrada
Si deseamos √2 y obtenemos ỹ = 1.4142:
- el error hacia adelante compara
1.4142conMath.sqrt(2); - el error hacia atrás observa que
1.4142es exactamente la raíz del dato perturbado1.4142² = 1.99996164.
const dato = 2;
const calculada = 1.4142;
const errorAdelante = Math.abs(calculada - Math.sqrt(dato));
const datoPerturbado = calculada ** 2;
const errorAtras = Math.abs(datoPerturbado - dato);
console.log({ errorAdelante, datoPerturbado, errorAtras });
07 · Comportamiento del algoritmo
Estabilidad numérica
Un algoritmo es numéricamente estable si los errores introducidos durante su ejecución no crecen de manera innecesaria. Una definición especialmente útil es la estabilidad hacia atrás: el resultado calculado es la solución exacta de un problema ligeramente perturbado.
Esto no garantiza por sí solo un error hacia adelante pequeño. Si el problema está mal condicionado, una pequeña perturbación hacia atrás puede producir una gran diferencia de salida.
Problema bien condicionado
Algoritmo estable
Combinación favorable: esperamos una solución precisa.
Problema mal condicionado
Algoritmo estable
El algoritmo hace lo posible, pero los datos limitan la precisión alcanzable.
Problema bien condicionado
Algoritmo inestable
Una reformulación o método diferente puede mejorar mucho el resultado.
Problema mal condicionado
Algoritmo inestable
Se combinan sensibilidad inherente y errores evitables.
08 · Mismo problema, algoritmos distintos
Evaluar √(x+1) − √x
Las expresiones directa y racionalizada resuelven el mismo problema:
Para x grande, la forma directa resta cantidades cercanas y pierde cifras. La forma racionalizada evita esa operación.
function formaDirecta(x) {
return Math.sqrt(x + 1) - Math.sqrt(x);
}
function formaEstable(x) {
return 1 / (Math.sqrt(x + 1) + Math.sqrt(x));
}
for (const x of [1, 1e8, 1e12, 1e16]) {
console.log(x, formaDirecta(x), formaEstable(x));
}
El condicionamiento pertenece a la función que queremos evaluar en el punto dado. La diferencia entre ambas implementaciones revela la estabilidad de la forma de cálculo.
09 · Aproximaciones sucesivas
Convergencia
Un método iterativo produce una sucesión x₀, x₁, x₂, …. Decimos que converge a x* si el error tiende a cero:
En un método basado en una discretización, como integración o ecuaciones diferenciales, el parámetro puede ser el tamaño de paso h. En ese caso buscamos que la aproximación converja cuando h → 0.
| Comportamiento | Descripción |
|---|---|
| Convergente | El error disminuye y tiende a cero. |
| Divergente | Las aproximaciones se alejan o crecen sin límite. |
| Oscilante | Alternan entre regiones sin acercarse a un único valor. |
| Estancado | Dejan de cambiar por precisión finita sin haber alcanzado la solución. |
10 · Velocidad asintótica
Orden de convergencia
Si eₙ = |xₙ − x*|, decimos informalmente que el método tiene orden p cuando, cerca de la solución:
| Orden | Nombre | Comportamiento aproximado |
|---|---|---|
p = 1, 0 < C < 1 | Lineal | El error se reduce por un factor aproximadamente constante. |
1 < p < 2 | Superlineal | La reducción mejora en cada iteración. |
p = 2 | Cuadrática | El número de cifras correctas puede duplicarse cerca de la solución. |
La bisección converge linealmente: el intervalo se reduce a la mitad. Newton-Raphson suele converger cuadráticamente cerca de una raíz simple si se cumplen sus condiciones.
function estimarOrden(errores) {
const ordenes = [];
for (let n = 2; n < errores.length; n++) {
const numerador = Math.log(errores[n] / errores[n - 1]);
const denominador = Math.log(errores[n - 1] / errores[n - 2]);
ordenes.push(numerador / denominador);
}
return ordenes;
}
console.log(estimarOrden([0.1, 0.01, 0.0001, 1e-8]));
11 · Métodos discretos
Consistencia, estabilidad y convergencia
En métodos que reemplazan un problema continuo por pasos discretos aparecen tres preguntas relacionadas:
- Consistencia
- ¿La ecuación discreta se aproxima a la ecuación original cuando el paso tiende a cero?
- Estabilidad
- ¿Los errores y perturbaciones permanecen controlados mientras avanza el cálculo?
- Convergencia
- ¿La solución discreta completa se acerca a la solución exacta?
Un método puede ser localmente razonable pero amplificar errores de un paso al siguiente. También puede ser estable y resolver con precisión una discretización que no representa correctamente el problema. En los temas de integración y ecuaciones diferenciales volveremos sobre esta relación.
12 · Diagnóstico
No confundir los tres conceptos
| Concepto | Objeto | Pregunta principal | Qué podemos cambiar |
|---|---|---|---|
| Condicionamiento | Problema y datos | ¿La solución es sensible a perturbaciones? | Datos, formulación o precisión |
| Estabilidad | Algoritmo | ¿El cálculo amplifica errores evitables? | Algoritmo, forma algebraica u orden |
| Convergencia | Secuencia o discretización | ¿Las aproximaciones se acercan a la solución? | Parámetros, paso, inicio o método |
La estrategia profesional consiste en analizar los tres niveles. Cambiar de algoritmo no arregla datos insuficientes; aumentar iteraciones no arregla una sucesión divergente; aumentar decimales mostrados no arregla inestabilidad.
13 · Exploración interactiva
Laboratorio: sensibilidad cerca de una singularidad
Estudiaremos f(x) = 1/(1−x) con x = 1−10⁻ᵏ. A medida que k crece, x se acerca a 1 y el número de condición aumenta. Después perturbamos la entrada con Δx = 10ᵖ.
Amplificación de una perturbación
x = 1 − 10⁻¹ = 0,9
La perturbación permanece controlada a esta distancia de la singularidad.
Preguntas para explorar
- Mantené fija la perturbación y acercá
xa 1. ¿Cómo cambia κ? - Compará el error relativo previsto con el observado cuando la perturbación es pequeña.
- ¿Qué sucede cuando la perturbación lleva la entrada exactamente a 1?
- ¿Ese resultado extremo es culpa del algoritmo de división o del problema?
14 · Método de análisis
Evaluar un método numérico paso a paso
- 1Definir las medidas.
Elegir errores absolutos o relativos y las unidades relevantes.
- 2Perturbar los datos.
Observar cómo responde la solución exacta o una referencia de alta precisión.
- 3Analizar el algoritmo.
Buscar cancelación, escalas extremas y crecimiento de errores intermedios.
- 4Estudiar la convergencia.
Registrar errores, residuos o diferencias al aumentar iteraciones o disminuir el paso.
- 5Comparar alternativas.
Contrastar formulaciones, valores iniciales y algoritmos con costos semejantes.
- 6Documentar límites.
Indicar rangos válidos, tolerancias y situaciones en las que el método puede fallar.
function experimentarPerturbacion(funcion, x, perturbacion) {
const y = funcion(x);
const yPerturbado = funcion(x + perturbacion);
const errorEntrada = Math.abs(perturbacion) / Math.abs(x);
const errorSalida = Math.abs(yPerturbado - y) / Math.abs(y);
return {
x,
perturbacion,
errorRelativoEntrada: errorEntrada,
errorRelativoSalida: errorSalida,
amplificacionObservada: errorSalida / errorEntrada
};
}
console.log(experimentarPerturbacion(x => 1 / (1 - x), 0.99, 1e-8));
15 · Comprensión
Confusiones frecuentes
«Mal condicionado significa que el algoritmo está mal programado»
El condicionamiento pertenece al problema. Una implementación perfecta seguirá reflejando la sensibilidad de los datos.
«Un algoritmo estable siempre produce una respuesta precisa»
Si el problema está mal condicionado o los datos son imprecisos, un algoritmo estable puede tener un error hacia adelante grande.
«Convergencia rápida implica estabilidad»
Son propiedades distintas. Un método puede converger rápidamente cerca de la solución y comportarse mal ante redondeos o valores iniciales inadecuados.
«Si las iteraciones no cambian, el método convergió»
Puede haber estancamiento por punto flotante. Debemos examinar el residuo, una cota o la teoría del método.
«El número de condición siempre es una constante del problema»
Con frecuencia depende del punto y de la medida utilizada. Una misma función puede estar bien condicionada en una región y mal condicionada en otra.
16 · Práctica guiada
Ejercicios
Ejercicio 1: número de condición de una potencia
Calculá el número de condición relativo de f(x) = x⁵ para x ≠ 0.
Ver solución
f′(x) = 5x⁴, por lo que |x f′(x)/f(x)| = |5x⁵/x⁵| = 5. Un error relativo pequeño en la entrada se amplifica aproximadamente por cinco.
Ejercicio 2: sensibilidad de una resta
Estimá κ = (|x|+|y|)/|x−y| para x = 100.01 e y = 100.
Ver solución
κ = 200.01/0.01 = 20 001. La pequeña diferencia es muy sensible a errores relativos de los operandos.
Ejercicio 3: clasificar afirmaciones
Indicá si cada frase se refiere a condicionamiento, estabilidad o convergencia:
- El intervalo se reduce a la mitad en cada iteración.
- Una perturbación de 0.001 % cambia la salida un 10 %.
- Una forma racionalizada evita restar raíces cercanas.
Ver solución
- Convergencia: describe la reducción de las aproximaciones.
- Condicionamiento: describe sensibilidad del problema.
- Estabilidad: compara formas algorítmicas para evitar error innecesario.
Ejercicio 4: orden de convergencia
Una sucesión presenta errores 0.1, 0.01, 0.0001 y 10⁻⁸. ¿Qué orden sugiere?
Ver solución razonada
Cada error es aproximadamente el cuadrado del anterior: 0.01 = 0.1², 0.0001 = 0.01². Sugiere convergencia cuadrática, p ≈ 2.
Ejercicio 5: experimento computacional
Implementá una función que estime la amplificación de una perturbación y comparala con κ = |x/(1−x)| para varios valores cercanos a 1.
Ver una posible solución
const f = x => 1 / (1 - x);
const condicion = x => Math.abs(x / (1 - x));
const perturbacionRelativa = 1e-10;
for (const x of [0.5, 0.9, 0.99, 0.999]) {
const dx = x * perturbacionRelativa;
const errorSalida = Math.abs(f(x + dx) - f(x)) / Math.abs(f(x));
console.log({
x,
condicion: condicion(x),
amplificacion: errorSalida / perturbacionRelativa
});
}
17 · Síntesis
Ideas para recordar
- El condicionamiento mide la sensibilidad inherente del problema ante perturbaciones.
- El número de condición relativo estima la amplificación de errores relativos pequeños.
- El error hacia adelante mide la salida; el error hacia atrás interpreta el resultado como exacto para datos perturbados.
- Un algoritmo estable controla los errores que introduce durante el cálculo.
- Un problema mal condicionado limita la precisión incluso con un algoritmo estable.
- Convergencia significa que el error tiende a cero al refinar la aproximación.
- El orden de convergencia describe la velocidad asintótica de esa reducción.
- Condicionamiento, estabilidad y convergencia deben analizarse por separado y en conjunto.
En el próximo tema definiremos tolerancias y criterios de parada para convertir estas medidas en decisiones robustas: cuándo aceptar una aproximación y cuándo detener un algoritmo.