Está en la página 1de 4

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)<tol
imprime(SOR converge en k iteraciones)
return
fin si
x2=x
fin k
imprime(SOR no converge en maxiter)
fin SOR

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.

También podría gustarte