Está en la página 1de 7

MÉTODO DE GAUSS - SEIDEL

Al igual que el Método de Jacobi, El Método de Gauss-Seidel consiste en hacer iteraciones, a partir de un


vector inicial, para encontrar los valores de las incógnitas hasta llegar a una tolerancia deseada, la
diferencia radica en que cada vez que se desee encontrar un nuevo valor de una xi, además de usar los
valores anteriores de las x, también utiliza valores actuales de las x encontradas antes (desde x0 hasta xi-
1).
La ecuación es la siguiente:

Este proceso de usar valores actuales para hallar un valor de x puede facilitar la convergencia del mismo.
Convergencia del método:
Para determinar si el método de Gauss-Seidel converge hacia una solución. Se evalúan las siguientes
condiciones de convergencia (Nota: las siguientes van en un órden de modo que si se cumple una de las
condiciones, comenzando por la primera por supuesto, la evaluación de las siguientes no es necesario
realizarlas):
La matriz sea estrictamente dominante diagonalmente por filas (E.D.D. por filas), es decir, para
todo i desde 1 hasta n que es el tamaño de la matriz A:

Es decir, el elemento de la diagonal correspondiente a la fila i debe ser mayor a la suma de los elementos
de esa fila i.
A partir de la siguiente identidad:

Donde D corresponde a la matriz formada por los elementos de la diagonal de A


(D=diag(a11, a22, ..., ann)), -L corresponde a la matriz triangular inferior obtenida de la parte triangular
estrictamente inferior de A, y -U corresponde a la matriz triangular superior obtenida de la parte triangular
estrictamente superior de A, se puede deducir la fórmula vectorial de este método:

, k = 1, 2, ...
De donde BG (conocida como la matriz de iteración de Gauss-Seidel) es (D-L)-1U. Para que el método de
Jacobi converja hacia una solución,

, para una norma matricial inducida.


ρ(BG), que corresponde al máximo de los valores absolutos de las raíces de la ecuación característica de la
matriz BG (det(BG - λI)) es menor que 1.
El método de Gauss-Seidel es el más comúnmente usado para resolver sistemas muy grandes de
ecuaciones lineales.
Es una modificación del método de Jácobi que hace que la convergencia sea mas rápida.
Comienza con una aproximación inicial x(0) a la solución x y genera una sucesión de
vectores x(k) que convergen a la solución x.
Un sistema de ecuaciones algebraicas lineales es un conjunto de ecuaciones de la forma:

::                      ::               ::

O bien en su forma matricial:

Que a su vez se puede expresar como:


Ax = b
Donde “A” es la matriz de coeficientes, x es el vector de incógnitas y b el vector de términos
independientes.

La solución del sistema de ecuaciones es un conjunto de n valores   que satisfacen


simultáneamente todas las ecuaciones.
Tanto en el método de Gauss-Seidel como en el de Jácobi, el valor  que se le de al vector inicial
carece de importancia, ya que el método convergirá a la solución rápidamente no obstante que el
vector inicial tenga valores muy lejanos a la solución. Es por esto que se acostumbra a dar el
vector 0 como vector inicial.
En la solución de estos problemas pueden presentarse 3 casos:
1.- Solución única                                           Sistema compatible determinado.
2.- Mas de una solución                                Sistema compatible e indeterminado.
     (numero infinito de soluciones)
3.- Sin solución                                               Sistema incompatible.
Ilustrando el método de Gauss-Seidel con un sistema de ecuaciones de 3x3, si el vector:

Es el vector aproximación a la solución x después de k iteraciones, entonces se tiene que para la


siguiente aproximación:

b)
Elaborar los algoritmos y programas en Matlab de los métodos numéricos vistos en los capítulos 4 y 5. 

% METODO ITERATIVO DE GAUSS SEIDEL


clc %permite borrar el area de trabajo

clear %permite borrar las variables almacenadas

format long %permite utilizar la maxima capacidad de la maquina

fprintf('METODO ITERATIVO DE GAUSS SEIDEL\n\n\n')

%fprintf me permite ingresar comentarios de manera textual que pueden

%orientar al usuario en el uso del programa

%input es un comando de solicitud de entrada de datos del usuario. a=input('Ingrese la matriz de


coeficientes:\n '); b=input('\nIngrese los términos independientes:\n ');

x=input('\nIngrese el vector con las aproximacimaciones Iniciales:\n '); iter=input('\nIngrese el número


máximo de iteraciones:\n '); tol=input('\nIngrese la tolerancia:\n ');

k=norm(a)*norm(a^-1);%Se calcula el condicional de la matriz de coeficientes disp('condicional=')

disp(k)

% la funcion disp nos permite imprimir una variable en el espacio de trabajo determinante=det(a);%se
calcula el determinante de la matriz de coeficientes if determinante==0

disp('El determinante es cero, el problema no tiene solución única') end

n=length(b); %numero de elementos del vector b d=diag(diag(a)); %obtencion de la matriz diagonal

l=d-tril(a); %obtencion de la matriz diagonal superior L u=d-triu(a); %obtencion de la matriz diagonal


inferior u

fprintf('\n SOLUCION:\n')

fprintf('\nLa matriz de transicion de gauss seidel:\n')

T=((d-l)^-1)*u; % matriz de transicion de gauss disp(T)

re=max(abs(eig(T))) %calculo del radio espectral

if re>1

disp('Radio Espectral mayor que 1') disp('el método no converge')


return end

fprintf('\nEl vector constante es::\n')

C=((d-l)^-1)*b; % vector constante C, para el metodo disp(C)

i=0;

err=tol+1;

z=[i,x(1),x(2),x(3),err]; %vector que me permite graficar la tabla

c) Elaborar al menos 1 ejemplo de uso del código planteado y los resultados que muestra. 

function [x]=Gauss_Seidel (A,b,Xe)


n=length(A);
x=zeros(n,1);
e=1;
while (e>0.0001)
for i=1:n
sum=0;
for j=1:n
if (j~=i)
sum=sum+A(i,j)*Xe(j);
end
x(i)=(b(i)-sum)/A(i,i);
end
e=norm(Xe-x);
Xe=x;
end
end

También podría gustarte