BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN
ING. EN CIENCIAS DE LA COMPUTACIÓN
Métodos Numéricos PRACTICA # 9 Método De sor PROFESOR: González Flores Marcos
ALUMNOS: Gómez Hernández Cirino Armando SERRANO ESCOBAR VÍCTOR
HEROICA PUEBLA DE ZARAGOZA, PUE. NOVIEMBRE DE 2009
Objetivo Aprender a programar el método de SOR.
Introducción Este método es una variante del de Gauss-Seidel, de igual forma se utiliza en la resolución de un sistema de ecuaciones y es mejor en cuanto a una rápida convergencia.
Desarrollo % Entradas: A→ Matriz. b→ vector solución. maxiter→ Máximo de iteraciones. tol→ Tolerancia. w→ Parámetro acelerador Salidas: x, vector solución o mensaje de error. % Algoritmo Sor(n,A,x0,tol,maxiter,w) para k=1, maxiter para i=1, n tem=bi -sum(A(i,[i-1 i+1,n]*x0([1,i-1 i+1,n])))/Aij xi=tem*w + (1-w)*x0(i) x0(i)=x(i) fin i si norm(x-x0)
Codificación function [A,b,x0] = leeMa(n) for i=1:n
for j=1:n+1 if(j==n+1) fprintf('igual a'); te = input(': ' ); b(i)=te; fprintf('valor inicial x(%d)',i); te2 = input(': ' ); x0(i)=te2; else fprintf('A(%d,%d)',i,j); te = input(': ' ); A(i,j)=te; end end fprintf('\n'); end % Codificación Método SOR function [x] = sor(n,tol,maxiter,w) [A,b,x0]=leeMa2(n) [m n]= size(A); if m~=n, error('Matriz del sistema no cuadrada'), end if m~= length(b), error ('sistema no coherente'),end x=zeros(size(b)); x2=x; if any(abs(diag(A))<eps) error('Metodo no valido. Elemento diagonal nulo') end for k=1:maxiter for i=1:n tem=(b(i)-sum(A(i,[1:i-1 i+1:n])*x0([1:i-1 i+1:n])'))/A(i,i); x(i)=tem*w + (1-w)*x0(i); x0(i)=x(i); end if norm(x-x2)< tol fprintf('\n SOR CONVERGE en %d iteraciones\n',k), return end x2=x; end fprintf('\n SOR NO CONVERGE en %d iteraciones\n',maxiter)
Muestra de ejecución
Conclusiones
En análisis numérico el método de SOR es un método iterativo, usado para resolver sistemas de ecuaciones lineales del tipo Ax = b.
Este método para converger más rápido que el de Gauss-Seidel, ocupa un término denominado “w”, el cual es un valor „incierto‟ que oscila entre 1 y 2.