Inicio · Parte 11 — Métodos numéricos y computación científica
Jacobi: xᵢ⁽ᵏ⁺¹⁾ = (bᵢ − Σⱼ≠ᵢ aᵢⱼ·xⱼ⁽ᵏ⁾) / aᵢᵢ
Gauss-Seidel: usa xⱼ⁽ᵏ⁺¹⁾ para j < i
convergencia garantizada si A es diagonalmente dominante
Los 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.
python classes/part-11-metodos-numericos-y-computacion-cientifica/232-jacobi-y-gauss-seidel/lab.py
compmath run 232
Adiagonalmente_dominantejacobi_solucionjacobi_iteracionesgauss_seidel_soluciongauss_seidel_iteracionesgauss_seidel_es_mas_rapidojacobi_es_paralelizable{
"A": [
[
10.0,
-1.0,
2.0
],
[
-1.0,
11.0,
-1.0
],
[
2.0,
-1.0,
10.0
]
],
"diagonalmente_dominante": true,
"jacobi_solucion": [
1.0432692308,
2.2692307692,
-1.0817307692
],
"jacobi_iteraciones": 22,
"gauss_seidel_solucion": [
1.0432692308,
2.2692307692,
-1.0817307692
],
"gauss_seidel_iteraciones": 11
}
Resolución de sistemas dispersos enormes, discretización de PDE, PageRank y precondicionado dentro de métodos de Krylov.
Los Neural ODE, los samplers de difusión y los optimizadores de segundo orden son métodos numéricos con parámetros aprendidos.
9780898718003, pendiente de resolver.9781611975581, pendiente de resolver.