Sobrerrelajación sucesiva

método para resolver un sistema de ecuaciones lineales

En álgebra lineal numérica, el método de sobre-relajación sucesiva (SOR), es una variante del método de Gauss-Seidel para estimar la solución de un sistema lineal de ecuaciones, permitiendo una convergencia más rápida.

Radio espectral de la matriz de iteración del método SOR, para distintos valores de . Los distintos trazos corresponden a distintos valores del radio espectral de la correspondiente matriz de Jacobi:

Fue propuesto simultáneamente por David M. Young Jr. y Stanley P. Frankel en 1950, con el propósito de resolver sistemas lineales en ordenadores digitales. Anteriormente ya existían métodos de tipo sobre-relajación, como el método de Lewis Fry Richardson, y los métodos desarrollados por R. V. Southwell. Sin embargo, estos últimos estaban diseñados para ser utilizados por calculadoras humanas, requiriendo alguna pericia para asegurar convergencia a la solución, lo que los hacía inaplicables para ordenadores digitales. Se pueden encontrar detalles de estos aspectos en la tesis de David M. Young Jr.[1]

Formulación matricial editar

Se considera un sistema lineal cuadrado, de   ecuaciones, con variable desconocida  :

 

La matriz A se puede escribir como la suma de: su componente diagonal  , y sus componentes estrictamente triangular inferior y superior,   y   respectivamente:   dónde:

 


De esta forma, el sistema de ecuaciones lineales puede ser escrito como:

 
para cualquier constante  , denominada factor de relajación. El método SOR es una técnica iterativa que en cada iteración "despeja"   del lado izquierdo de esta igualdad, utilizando el valor de   del paso anterior en el lado derecho. Analíticamente, esto puede ser escrito como:
 
dónde   es la k-ésima aproximación de  , y   es la nueva estimación que se quiere determinar. Como se puede ver, la matriz de iteración del método es:
 

Formulación por coordenadas editar

En la práctica se evita hallar la inversa de forma explícita al aplicar SOR. En su lugar se puede resolver el sistema de ecuaciones lineales que se obtiene al multiplicar cada lado de la iteración por   a la izquierda:

 

Dado que la matriz   es triangular inferior, se puede hallar   mediante sustitución hacia adelante. De esta forma se obtiene una expresión para cada coordenada de la estimación  :

 

Vínculo con el método de Gauss-Seidel editar

Como se puede ver en la expresión anterior, si se toma  , se obtiene el método de Gauss-Seidel como caso particular de SOR. Para los demás valores de  , la estimación de SOR es una combinación convexa de la estimación SOR del paso anterior, y la estimación que se obtendría aplicando un paso de Gauss-Seidel a la estimación SOR del paso anterior:

 

Convergencia editar

Una condición necesaria para que el algoritmo SOR sea convergente, es que se cumpla que  .[2]​ En general esta condición no es suficiente para asegurar la convergencia, aunque sí lo es para cierto tipo de matrices. En 1947, Ostrowski probó que si   es simétrica y definida positiva, el método SOR converge si y solo si  .[2]

Tasa de convergencia editar

Generalmente es deseable seleccionar   de forma que el método no solo sea convergente, sino que logre la convergencia lo más rápido posible. El valor de   con el que se logra la mejor tasa de convergencia se denomina factor de relajación óptimo, y se denota  . Esta tasa o velocidad de convergencia viene dada por el recíproco del radio espectral   de la matriz de iteración, por lo que encontrar la mejor tasa de convergencia se reduce a minimizar   como una función de  . Por lo tanto, la elección de   no siempre es sencilla, y depende de las propiedades de la matriz   del sistema.

Bajo ciertas hipótesis, es posible obtener una expresión analítica para el radio espectral  , y hallar en particular el   donde éste se minimiza (mayor tasa de convergencia). Supongamos en particular que se cumplen las siguientes hipótesis:[3][4]

  • el parámetro de relajación cumple la condición necesaria de convergencia:  ,
  • los valores propios de la matriz de iteración de Jacobi,   son todos reales,
  • el método de Jacobi es convergente:  , y
  • la descomposición matricial   satisface la propiedad que   para todo   y  .

Entonces el radio espectral de la matriz de iteración de SOR puede ser expresado como:

 

donde el parámetro de relajación óptimo que minimiza el radio espectral es

 

En particular, para   (Gauss-Seidel) se cumple que  .

La última hipótesis se satisface para matrices tridiagonales, pues   para la matriz diagonal   con componentes  , y  .

Pseudo-código del algoritmo editar

Dado que las estimaciones del algoritmo pueden ser sobre-escritas cuando están siendo computadas, la implementación del algoritmo requiere un único vector de almacenamiento en cada iteración. Por lo tanto, en el siguiente pseudo-código se omite la indexación de cada vector.

Entradas: A, b, ω
Salida:  
Escoger una estimación inicial   de la solución
while (no converge)
    for i de 1 hasta n hacer
         
        for j de 1 hasta n hacer
            if j ≠ i entonces
                
            end if
        end (j-bucle)
         
    end (i-bucle)
    verificar posible convergencia
end
Nota
El término:   , puede ser escrito como:  . De esta forma se ahorra una multiplicación en cada iteración del bucle for exterior.

Ejemplo editar

Se considera el siguiente sistema de ecuaciones, de tamaño  :

 

Para estimar su solución se aplica SOR con un factor de relajación   y estimación inicial  . En cada iteración se obtienen las estimaciones que se muestran en la siguiente tabla. El método converge a la solución exacta (3, −2, 2, 1).

Iteración        
0 0 0 0 0
1 0.25 -2.78125 1.6289062 0.5152344
2 1.2490234 -2.2448974 1.9687712 0.9108547
3 2.070478 -1.6696789 1.5904881 0.76172125
... ... ... ... ...
37 2.9999998 -2.0 2.0 1.0
38 3.0 -2.0 2.0 1.0

Implementación en Python editar

Una implementación en Python del pseudo-código proporcionado más arriba es:

import numpy as np

def sor_solver(A, b, omega, initial_guess, convergence_criteria):
    """
    This is an implementation of the pseudo-code provided in the Wikipedia article.
    Arguments:
        A: nxn numpy matrix.
        b: n dimensional numpy vector.
        omega: relaxation factor.
        initial_guess: An initial solution guess for the solver to start with.
        convergence_criteria: The maximum discrepancy acceptable to regard the current solution as fitting.
    Returns:
        phi: solution vector of dimension n.
    """
    phi = initial_guess[:]
    residual = np.linalg.norm(np.matmul(A, phi) - b) #Initial residual
    while residual > convergence_criteria:
        for i in range(A.shape[0]):
            sigma = 0
            for j in range(A.shape[1]):
                if j != i:
                    sigma += A[i][j] * phi[j]
            phi[i] = (1 - omega) * phi[i] + (omega / A[i][i]) * (b[i] - sigma)
        residual = np.linalg.norm(np.matmul(A, phi) - b)
        print('Residual: {0:10.6g}'.format(residual))
    return phi

# An example case that mirrors the one in the Wikipedia article
residual_convergence = 1e-8
omega = 0.5 #Relaxation factor

A = np.matrix([[4, -1, -6, 0],
              [-5, -4, 10, 8],
              [0, 9, 4, -2],
              [1, 0, -7, 5]])

b = np.matrix([2, 21, -12, -6])

initial_guess = np.zeros(4)

phi = sor_solver(A, b, omega, initial_guess, residual_convergence)
print(phi)

Véase también editar

Referencias editar

  1. Young, David M. (1 de mayo de 1950), Iterative methods for solving partial difference equations of elliptical type, PhD thesis, Harvard University, consultado el 15 de junio de 2009 .
  2. a b Demmel, J. W. (1997). Applied Numerical Linear Algebra. Society for Industrial and Applied Mathematics (SIAM). 
  3. Hackbusch, Wolfgang (2016). «4.6.2». Iterative Solution of Large Sparse Systems of Equations | SpringerLink. Applied Mathematical Sciences (en inglés británico) 95. ISBN 978-3-319-28481-1. doi:10.1007/978-3-319-28483-5. 
  4. Greenbaum, Anne (1997). «10.1». Iterative Methods for Solving Linear Systems. Frontiers in Applied Mathematics (en inglés británico) 17. ISBN 978-0-89871-396-1. doi:10.1137/1.9781611970937.