Documentaciónsor(A, b, x0, omega, tol, maxiter)

sor(A,b,x0,ω,tol,maxiter)\texttt{sor}(A, b, x_{0}, \omega, tol, maxiter)

Nombre

sor - Resuelve un sistema lineal Ax=b con el metodo SOR.

Sinopsis

x = gauss.sor(A, b, x0, omega, tol, maxiter)

Descripcion

Aplica el metodo SOR (Successive Over-Relaxation), que parte del esquema de Gauss-Seidel y le agrega un factor de relajacion omega.

Formula:

xi(k+1)=(1ω)xi(k)+ωxi,GS(k+1)x_i^{(k+1)}=(1-\omega)x_i^{(k)}+\omega x_{i,\mathrm{GS}}^{(k+1)}

Validaciones y casos borde

  • Valida que A sea cuadrada y no vacia.
  • Valida que b y x0 sean matrices columna n x 1 compatibles con A.
  • Valida que tol sea mayor que cero.
  • Valida que maxiter sea entero y mayor que cero.
  • Valida que la diagonal de A no contenga ceros.
  • Valida que omega cumpla 0 < omega < 2.
  • Si alguna condicion falla, emite ERROR().
  • Si no converge dentro de maxiter, retorna la ultima aproximacion calculada.

Comportamiento

  • Requiere un factor de relajacion omega con 0 < omega < 2.
  • Calcula primero el valor tipo Gauss-Seidel y luego aplica la relajacion.
  • Usa la diferencia maxima entre iteraciones como criterio de parada.
  • Retorna una MATRIZ columna con la solucion aproximada.

Funciones API relacionadas

  • gauss.gauss_seidel()
  • gauss.jacobi()
  • gauss.gauss_seidel_residuo()

Parámetros

ParámetroTipoDescripción
AMATRIZMatriz de coeficientes A de tamaño n x n.
bMATRIZVector columna de términos independientes b, representado como MATRIZ n x 1.
x0MATRIZAproximación inicial x0, representada como MATRIZ n x 1.
omegaNUMERICOFactor de relajación omega del método SOR. Debe cumplir 0 < omega < 2.
tolNUMERICOTolerancia numérica usada como criterio de parada.
maxiterNUMERICOCantidad máxima de iteraciones permitidas.

Valor de retorno

MATRIZ - Matriz columna x de tamaño n x 1 con la solución aproximada.

Ejemplo

ejemplo.blox
Solo lectura
INCLUIR "matrices.api"
INCLUIR "gauss.api"

FUNCION PRINCIPAL
INICIO
    MATRIZ A[3][3], b[3][1], x0[][]
    MATRIZ x_sor[][], r_sor[][]
    NUMERICO i, nr_sor, omega

    // Definimos la matriz A
        A = [[ 4, -1,  1],
             [-2,  6,  1],
             [-1,  1,  7]]

    // Definimos la matriz B
        b = [[ 7],
             [ 9],
             [-6]]


    IMPRIMIR("\nPROBLEMA:")
    IMPRIMIR(" Ax = b\n\n")

    IMPRIMIR("\nA = ")
    matrices.imprimir(A)
    IMPRIMIR("\nb = ")
    matrices.imprimir(b)


    // x0
    x0 = matrices.carga_cero(3,1)

    omega = 1.01   // por ejemplo

    x_sor = gauss.sor(A, b, x0, omega, 0.1, 100)

    IMPRIMIR("\nSolución aproximada por SOR (omega = ", omega, "):\n")

    IMPRIMIR("\nx = ")
    matrices.imprimir(x_sor)

    r_sor  = gauss.gauss_seidel_residuo(A, x_sor, b)
    nr_sor = gauss.gauss_seidel_norma_infinito(r_sor)

    IMPRIMIR("\nResiduo SOR:\n")
    matrices.imprimir(r_sor)
    IMPRIMIR("\n||r_sor||_inf = ", nr_sor:4)

FINAL


Restringido: este ejemplo no puede ejecutarse en el Playground web porque la API requerida no está disponible en el sandbox.