01 · Punto de partida
Una solución que no cambia al aplicar la función
Un número r es un punto fijo de una función g cuando:
Si transformamos una ecuación f(x)=0 en una forma equivalente x=g(x), sus soluciones se convierten en puntos fijos. Esto sugiere un algoritmo muy sencillo:
Comenzamos con una estimación x₀ y aplicamos repetidamente g. La sencillez de la fórmula oculta la decisión más importante: cómo elegir g.
Dos transformaciones algebraicamente equivalentes pueden producir:
- convergencia rápida hacia la solución;
- convergencia lenta;
- oscilación entre varios valores;
- alejamiento y crecimiento sin límite.
02 · De raíces a puntos fijos
Construir una función iteradora
Una misma ecuación puede reordenarse de muchas formas. Para x²−2=0:
| Transformación | Iteración | Comportamiento cerca de √2 |
|---|---|---|
x = 2/x | xₙ₊₁=2/xₙ | Oscila; la derivada tiene magnitud 1 |
x = x + ¼(2−x²) | xₙ₊₁=xₙ+¼(2−xₙ²) | Converge localmente |
x = ½(x+2/x) | Método babilónico | Convergencia muy rápida cerca de la raíz |
x = x + (2−x²) | xₙ₊₁=xₙ+2−xₙ² | La raíz positiva es repulsiva |
Todas las expresiones mantienen √2 como punto fijo, pero su dinámica es diferente. La equivalencia algebraica no garantiza equivalencia numérica.
function iterar(g, inicial, cantidad) {
const valores = [inicial];
let x = inicial;
for (let i = 0; i < cantidad; i++) {
x = g(x);
valores.push(x);
}
return valores;
}
console.log(iterar(x => 2 / x, 1, 6));
console.log(iterar(x => (x + 2 / x) / 2, 1, 6));
03 · Interpretación gráfica
Intersección de y=g(x) con y=x
Los puntos fijos son las intersecciones entre la curva y=g(x) y la diagonal y=x. El proceso iterativo puede visualizarse mediante un diagrama de telaraña:
- 1Partir de x₀.
Ubicar el valor inicial sobre el eje horizontal.
- 2Subir hasta la curva.
El punto vertical representa
(x₀,g(x₀))=(x₀,x₁). - 3Ir a la diagonal.
El movimiento horizontal lleva a
(x₁,x₁). - 4Repetir.
Desde allí volvemos a la curva para obtener
x₂.
Si los segmentos forman una escalera o espiral que se cierra sobre la intersección, observamos convergencia. Si se alejan, el punto fijo es repulsivo para ese valor inicial.
04 · Criterio local
La derivada indica atracción o repulsión
Cerca de un punto fijo r, podemos aproximar:
Por lo tanto, el error local se multiplica aproximadamente por |g′(r)| en cada iteración.
| Condición | Tipo | Comportamiento esperado |
|---|---|---|
|g′(r)| < 1 | Atractivo | Los errores pequeños se reducen |
|g′(r)| > 1 | Repulsivo | Los errores pequeños se amplifican |
|g′(r)| = 1 | Inconcluso | Se necesita un análisis de orden superior |
g′(r)=0 | Fuertemente atractivo | Puede aparecer convergencia superlineal o cuadrática |
El signo también describe el patrón: una derivada positiva suele acercarse desde un mismo lado; una negativa puede alternar alrededor de la solución.
05 · Garantía en un intervalo
Teorema de contracción
Un criterio local en la raíz es útil, pero la raíz todavía es desconocida. Podemos obtener una garantía sobre un intervalo [a,b] si:
genvía el intervalo dentro de sí mismo:g([a,b]) ⊆ [a,b];- existe un número
q<1tal que|g′(x)|≤qpara todox∈[a,b].
Entonces g tiene un único punto fijo en el intervalo y la iteración converge hacia él desde cualquier valor inicial del intervalo.
La desigualdad expresa que g contrae distancias. Cada aplicación acerca dos trayectorias al menos por el factor q.
06 · Ejemplo clásico
Resolver cos(x)=x
La ecuación ya está escrita como punto fijo:
En [0,1], cos(x) permanece dentro del intervalo y:
Por lo tanto, existe un único punto fijo en el intervalo y la iteración converge desde cualquier x₀∈[0,1].
let x = 1;
for (let iteracion = 1; iteracion <= 12; iteracion++) {
const siguiente = Math.cos(x);
console.log(iteracion, siguiente, Math.abs(siguiente - x));
x = siguiente;
}
La solución es aproximadamente 0.7390851332. La convergencia es lineal y alternante porque g′(r)=−sin(r) es negativo.
07 · Cotas de error
Usar el factor de contracción
Si conocemos una cota q<1, podemos estimar el error sin conocer el punto fijo.
Cota a priori
Permite estimar antes de iterar cuántos pasos podrían ser necesarios.
Cota a posteriori
Utiliza el último cambio observado. Si q está cerca de 1, el factor q/(1−q) es grande y un cambio pequeño puede corresponder a un error todavía considerable.
function cotaPosteriori(q, anterior, actual) {
if (!(q >= 0 && q < 1)) {
throw new Error("q debe pertenecer a [0, 1)");
}
return q / (1 - q) * Math.abs(actual - anterior);
}
console.log(cotaPosteriori(0.85, 0.74, 0.739));
08 · Diseñar g(x)
Elegir una transformación conveniente
Al comparar funciones iteradoras buscamos:
- que tengan exactamente las raíces deseadas como puntos fijos;
- que estén definidas y sean finitas en la región de trabajo;
- que mantengan las iteraciones dentro de un intervalo válido;
- que
|g′|sea menor que 1 y, preferentemente, pequeño; - que su evaluación sea estable y poco costosa.
Ejemplo con √2
Para g(x)=½(x+2/x):
Esto explica la convergencia rápida cerca de la raíz. En cambio, para g(x)=2/x tenemos g′(√2)=−1, y desde x₀=1 se forma el ciclo 1→2→1→2….
09 · Modificar la dinámica
Relajación
Podemos combinar la iteración original con el valor actual:
El parámetro ω controla cuánto avanzamos:
| Rango | Nombre | Uso |
|---|---|---|
0<ω<1 | Subrelajación | Reduce oscilaciones, pero puede ralentizar |
ω=1 | Iteración original | No modifica g |
ω>1 | Sobrerrelajación | Puede acelerar o desestabilizar |
La derivada en el punto fijo cambia a:
Elegir ω requiere estimar la dinámica. No existe un valor universalmente óptimo.
function relajar(g, omega) {
return x => (1 - omega) * x + omega * g(x);
}
const oscilante = x => 2 / x;
const suavizada = relajar(oscilante, 0.5);
console.log(iterar(oscilante, 1, 5));
console.log(iterar(suavizada, 1, 5));
Con ω=0.5, la transformación resultante es precisamente el método babilónico.
10 · Dinámicas no convergentes
Divergencia, oscilación y escape
Divergencia
El error crece
Las iteraciones se alejan del punto fijo y pueden alcanzar magnitudes enormes.
Ciclo
Se repiten varios estados
La secuencia alterna sin acercarse a un único valor.
Escape del dominio
g deja de estar definida
Aparecen NaN, infinitos o una operación inválida.
Estancamiento
El Number deja de cambiar
La actualización se pierde por precisión finita, con o sin buen residuo.
Una implementación debe detectar valores no finitos, estancamiento, ciclos cortos y máximo de iteraciones. La teoría local no protege una estimación inicial situada fuera de la región de atracción.
11 · Código reutilizable
Implementación robusta
function puntoFijo(g, inicial, opciones = {}) {
const {
residual = null,
toleranciaAbsoluta = 1e-12,
toleranciaRelativa = 1e-9,
toleranciaResiduo = 1e-10,
maxIteraciones = 100,
guardarHistorial = false
} = opciones;
if (!Number.isFinite(inicial)) {
throw new Error("El valor inicial debe ser finito");
}
if (!Number.isInteger(maxIteraciones) || maxIteraciones < 1) {
throw new Error("El máximo debe ser un entero positivo");
}
let haceDos = null;
let anterior = inicial;
const historial = [];
for (let iteracion = 1; iteracion <= maxIteraciones; iteracion++) {
const actual = g(anterior);
const cambio = Math.abs(actual - anterior);
const limite = toleranciaAbsoluta
+ toleranciaRelativa * Math.abs(actual);
const residuo = residual ? Math.abs(residual(actual)) : null;
if (!Number.isFinite(actual)
|| (residuo !== null && !Number.isFinite(residuo))) {
return crearResultado(actual, false, "valor_no_finito",
iteracion, { cambio, residuo, historial });
}
if (guardarHistorial) {
historial.push({ iteracion, anterior, actual, cambio, residuo });
}
const cambioAceptable = cambio <= limite;
const residuoAceptable = residuo === null
|| residuo <= toleranciaResiduo;
if (cambioAceptable && residuoAceptable) {
return crearResultado(actual, true, "tolerancias",
iteracion, { cambio, residuo, historial });
}
if (actual === anterior) {
return crearResultado(actual, false, "estancamiento",
iteracion, { cambio, residuo, historial });
}
if (haceDos !== null && actual === haceDos) {
return crearResultado(actual, false, "ciclo_periodo_2",
iteracion, { cambio, residuo, historial });
}
haceDos = anterior;
anterior = actual;
}
const residuo = residual ? Math.abs(residual(anterior)) : null;
return crearResultado(anterior, false, "maximo_iteraciones",
maxIteraciones, { residuo, historial });
}
function crearResultado(valor, convergio, motivo, iteraciones, datos = {}) {
return { valor, convergio, motivo, iteraciones, ...datos };
}
El residuo es opcional porque no toda aplicación conserva explícitamente la función original, aunque proporcionarlo mejora la verificación.
12 · Aplicar y verificar
Resolver cos(x)−x=0
const resultado = puntoFijo(
x => Math.cos(x),
1,
{
residual: x => Math.cos(x) - x,
toleranciaAbsoluta: 1e-12,
toleranciaRelativa: 1e-10,
toleranciaResiduo: 1e-10,
maxIteraciones: 100,
guardarHistorial: true
}
);
console.log(resultado);
console.table(resultado.historial.slice(0, 8));
La salida debe incluir aproximación, residuo, cambio, iteraciones y motivo. Si solo comprobáramos el cambio, una transformación con ciclo o estancamiento podría producir una interpretación incorrecta.
13 · Exploración interactiva
Laboratorio: diagramas de telaraña
Las cuatro transformaciones tienen √2 como punto fijo positivo, pero generan dinámicas diferentes. Elegí una, modificá x₀ y recorré las iteraciones.
Atracción y repulsión
g(x) = ½(x + 2/x)
El punto fijo es atractivo y la iteración converge rápidamente.
Preguntas para explorar
- Compará Herón y la transformación relajada con el mismo valor inicial.
- Seleccioná
2/x. ¿Qué ciclo aparece desdex₀=1? - Probá la transformación repulsiva con valores iniciales cercanos a √2.
- ¿Cómo se relaciona el diagrama con el valor de
|g′(√2)|?
14 · Conexión con otros métodos
Newton-Raphson también es punto fijo
La iteración de Newton puede escribirse como:
En una raíz simple r, bajo condiciones adecuadas, g′(r)=0. Esto explica su convergencia cuadrática local.
La visión de punto fijo permite analizar muchos algoritmos con las mismas herramientas:
- puntos atractivos y repulsivos;
- regiones de convergencia;
- factores de contracción;
- relajación y aceleración;
- ciclos y estancamiento.
En el próximo tema derivaremos Newton geométricamente y estudiaremos sus ventajas y fallos específicos.
15 · Comprensión
Confusiones frecuentes
«Cualquier despeje x=g(x) converge»
La equivalencia conserva soluciones, pero no la dinámica. Debemos analizar la derivada, el dominio y la región de atracción.
«Si |g′(r)|<1, converge desde cualquier valor inicial»
Es un criterio local. Para una garantía sobre todo un intervalo necesitamos que g lo preserve y sea contractiva allí.
«Un cambio pequeño demuestra que llegamos al punto fijo correcto»
Puede existir estancamiento. Debemos comprobar el residuo de la ecuación original y la validez del dominio.
«La relajación siempre mejora la velocidad»
La subrelajación puede estabilizar a costa de lentitud; la sobrerrelajación puede acelerar o provocar divergencia.
«|g′(r)|=1 implica divergencia»
El criterio de primer orden es inconcluso. Puede haber convergencia lenta, ciclos o divergencia según términos superiores.
16 · Práctica guiada
Ejercicios
Ejercicio 1: comprobar puntos fijos
Verificá que g(x)=½(x+3/x) tiene como puntos fijos reales a ±√3.
Ver solución
Imponemos x=½(x+3/x). Multiplicando por 2x: 2x²=x²+3, luego x²=3 y x=±√3, con x≠0.
Ejercicio 2: clasificar una raíz
Para g(x)=cos(x) y el punto fijo r≈0.739085, estimá |g′(r)| y clasificá el punto.
Ver solución
g′(x)=−sin(x). Entonces |g′(r)|≈sin(0.739085)≈0.674, menor que 1. El punto fijo es atractivo y la convergencia local es lineal.
Ejercicio 3: detectar un ciclo
Calculá cuatro iteraciones de g(x)=2/x desde x₀=1.
Ver solución
x₁=2, x₂=1, x₃=2, x₄=1. Aparece un ciclo de período 2 y no hay convergencia.
Ejercicio 4: cota a posteriori
Si q=0.6 y |xₙ−xₙ₋₁|=10⁻⁵, calculá la cota a posteriori.
Ver solución
q/(1−q) × 10⁻⁵ = 0.6/0.4 × 10⁻⁵ = 1.5×10⁻⁵.
Ejercicio 5: diseñar una iteración
Para f(x)=x³+x−1=0, proponé g(x)=1/(x²+1). Estudiá si es contractiva en [0,1].
Ver solución razonada
g([0,1])=[1/2,1], contenido en [0,1]. Además g′(x)=−2x/(x²+1)². Su magnitud alcanza como máximo aproximadamente 0.65 en ese intervalo, menor que 1. Por lo tanto, la iteración es contractiva y converge al único punto fijo desde cualquier valor inicial de [0,1].
17 · Síntesis
Ideas para recordar
- Un punto fijo satisface
g(r)=r. - La iteración utiliza
xₙ₊₁=g(xₙ), pero su éxito depende de la elección de g. |g′(r)|<1indica atracción local y|g′(r)|>1, repulsión.- Una contracción que preserva un intervalo garantiza un único punto fijo y convergencia.
- El factor q permite construir cotas de error a priori y a posteriori.
- La relajación modifica la dinámica sin cambiar los puntos fijos.
- Una implementación debe detectar ciclos, estancamiento, escape y valores no finitos.
- Newton-Raphson es una iteración de punto fijo especialmente diseñada.
En el próximo tema estudiaremos el método de Newton-Raphson: su interpretación mediante rectas tangentes, su convergencia cuadrática y los cuidados necesarios para elegir el valor inicial.