🧮 Computational Mathematics

Inicio · Parte 11 — Métodos numéricos y computación científica

232 — Jacobi y Gauss-Seidel

cientifico clase 12 de 20 4 horas demostración jacobi_gauss_seidel

Gauss-Seidel usa los valores recién calculados y converge en la mitad de iteraciones.

Fórmulas

Jacobi: xᵢ⁽ᵏ⁺¹⁾ = (bᵢ − Σⱼ≠ᵢ aᵢⱼ·xⱼ⁽ᵏ⁾) / aᵢᵢ
Gauss-Seidel: usa xⱼ⁽ᵏ⁺¹⁾ para j < i
convergencia garantizada si A es diagonalmente dominante

Desarrollo

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.

Ejemplo trabajado

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.

Qué calcula el laboratorio

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

Salidas del laboratorio (8)

Muestra de la ejecución real

{
  "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
}

Errores comunes

Dónde se usa

Resolución de sistemas dispersos enormes, discretización de PDE, PageRank y precondicionado dentro de métodos de Krylov.

Idea rectora de la parte

Newton converge cuadráticamente, pero solo cerca de la raíz.

Error a evitar

Aplicar Runge-Kutta con paso fijo a un sistema rígido.

Conexión con IA

Los Neural ODE, los samplers de difusión y los optimizadores de segundo orden son métodos numéricos con parámetros aprendidos.

Bibliografía de la clase

Archivos de la clase