You are on page 1of 10

Mtodo de Gauss-Seidel

O mtodo de Gauss-Seidel um mtodo iterativo para resoluo de sistemas de


equaes lineares. semelhante ao mtodo de Jacobi (e como tal, obedece ao mesmo
critrio de convergncia). condio suficiente de convergncia que a matriz seja
estritamente diagonal dominante, i. e., fica garantida a convergncia da sucesso de
valores gerados para a soluo exata do sistema linear.
Procuramos a soluo do conjunto de equaes lineares, expressadas em termos
de matriz como a iterao Gauss-Seidel :

onde ; as matrizes , , e representam respectivamente os
coeficientes da matriz : a diagonal, triangular estritamente inferior, e triangular
estritamente superior; e o contador da iterao. Esta expresso matricial utilizada
principalmente para analisar o mtodo. Quando implementada, Gauss-Seidel, uma
aproximao explcita de entrada por entrada utilizada:

Diferenciando-se do mtodo de Gauss-Jacob:

Sendo que o mtodo de Gauss-Seidel apresenta convergncia mais rpida que
este ltimo.
Note que o clculo de utiliza apenas os elementos de que j
havia sido calculada e apenas aqueles elementos de j haviam avanado para a
iterao . Isto significa que nenhum armazenamento adicional necessrio, e que
computacionalmente pode ser substitudo ( por ). A iterao geralmente
continua at que a soluo esteja dentro da tolerncia especificada.

EXEMPLO:
Utilizando a equao dois, vamos calcular uma iterao da matriz, sendo que a
anlise da convergncia dada pela diagonal dominante, ou seja, a soma dos mdulos
de todos os elementos em que i difere de j de uma dada linha tem que ser menor do que
o mdulo do elemento em que i igual a j nesta mesma linha. Verificado isso, parte-se
para a prxima etapa:
Matriz:

Em que bi igual:

Usando a equao:
Obtemos o sistema :

Utilizando a pressuposio inicial de vetor nulo:

necessrio notar que, ao fazer as iteraes, o x que recebe o valor substituido
e jogado na equao de baixo. Por exemplo:

Resulta em:

Que resulta em:

Como esse jogado na equao seguinte, no caso x2:

Aps a substituio essa ficar assim:

Ou seja, somente o valor de x1 est definido, pois uma iterao j havia sido
feita, o resto dos x's assumem seu valor inicial, no caso, zero. Por fim, aps uma
iterao temos:



Mtodos de Jacobi
O mtodo de Jacobi trata-se dum algoritmo para determinar a soluo de
um sistema de equaes lineares com os maiores valores absolutos em cada linha e
coluna dominados pelo elemento da sua diagonal. Trata-se duma verso simplificada
do algoritmo de valores prprios de Jacobi.
Tcnicas iterativas so raramente utilizadas para solucionar sistemas lineares de
pequenas dimenses, j que o tempo requerido para obter um mnimo de preciso
ultrapassa o requerido pelas tcnicas diretas como a eliminao gaussiana. Contudo,
para sistemas grandes, com grande porcentagem de entradas de zero, essa tcnicas so
eficientes em termo de clculo como de armazenamento. Sistemas desse tipo
freqentemente surgem na anlise de circuitos e na soluo numrica de problemas de
valor de limite e equaes diferenciais parciais.
Dado uma matriz quadrada de n equaes lineares:

em que:
Ento A pode ser decomposto num componente diagonal D e o resto R:

O sistema de equaes lineares pode ser reescrito como:

O mtodo de Jacobi um mtodo iterativo que resolve o membro esquerdo da
expresso em ordem a x ao usar o mtodo resultante da iterao anterior no membro
direito. Analiticamente, isto pode ser escrito como:

A expresso pode ser ento:

Nota-se que a computao de feita com base em todos os valores obtidos
em iteraes anteriores. Ao contrrio do mtodo de Gauss-Seidel, no se pode
reescrever com , pois esse valor necessrio durante a continuao da
computao. Esta a diferena mais significativa entre o mtodo de Jacobi e o mtodo
de Gauss-Seidel e o motivo que o torna um algoritmo paralelo.

EXEMPLO:
Um sistema linear dado por
e
Pretende-se usar a equao . Agora necessrio
encontrar a matriz inversa dos valores da diagonal A atravs duma
decomposio
e
Para se encontrar T recorre-se equao .

Agora, encontrada T, torna-se necessrio obter C recorrendo
expresso .

Assim, agora teremos .

E agora estamos em posio de encontrar .

Agora que se est na posse de X matrizes possvel avaliar a convergncia para
aproximar as solues.

Convergncia dos Mtodos de Jacobi e Gauss-Seidel
O mtodo converge sempre se a matriz A estrita ou irredutivelmente
uma matriz estritamente diagonal dominante. Se A diagonal dominante ou
irredutivelmente diagonal dominante, ento o raio espectral da matriz de iterao

O mtodo de Jacobi por vezes converge quando estas condies so satisfeitas.
Recentemente, uma tcnica de duplo ciclo foi introduzida para forar a
convergncia para a soluo correta do algoritmo de Jacobi mesmo quando as
condies suficientes para convergncia no so verificadas. A tcnica de duplo
ciclo funciona para matrizes positivas definidas ou dependentes de colunas.
Sejam (i autovalores de uma matriz A tal que . Ento ,
chamado raio espectral de A. Podemos, ento, apresentar o seguinte teorema sobre
condies necessrias e suficientes para a convergncia de um processo iterativo para a
soluo de sistemas lineares.
O mtodo iterativo converge soluo U, qualquer que seja o vetor
inicial X0, se e somente se .
Exemplo
Sendo a matriz A = , as matrizes de iterao sero:

Logo a iterao de Jabobi converge e a de Gauss-Seidel diverge.
Qual Mtodo melhor: O Direto ou o Interativo?
Os mtodo direto para soluo de um sistema cuja matriz esparsa no em
geral recomendado, pois ao tentar eliminar os elementos da parte triangular inferior
da matriz, muitos elementos que eram nulos na matriz original tornam-se no-nulos
ao longo do processo. Isto chamado fill in.
Os mtodos iterativos no sofrem o problema do fill in pois esses mtodos
requerem somente o resultado da multiplicao da matriz coeficiente por um vetor, e
portanto o padro de zeros da matriz no sofre qualquer modificao ao longo do
processo.
Por outro lado os mtodos iterativos nem sempre produzem uma soluo do
problema, pois sua convergncia no est assegurada, no caso de matrizes gerais, ao
passo que os mtodos diretos sempre produzem uma soluo geral mais confivel.

Implementao do Mtodo de Jacobi
function [x]=jacobi_solv(A, norma, tol_aprox, max_iter)

n=size(A,1);
m=size(A,2);

// construo das matrizes utilizadas na iterao

//B=diag(diag(A(:,1:n)));
//invB=inv(B);
//C=B-A(:,1:n);

invB=zeros(n,n);
for i=1:n
invB(i,i)=1/A(i,i);
end;

C=-A(:,1:n);
for i=1:n
C(i,i)=0;
end;

//invB_b=invB*A(:,n+1:m);
invB_b=zeros(n,m-n);
for i=1:n
invB_b(i,1:m-n)=invB(i,i)*A(i,n+1:m);
end;

//invB_C=invB*C;
invB_C=zeros(n,n);
for i=1:n
invB_C(i,1:n)=invB(i,i)*C(i,1:n);
end;

// aproximao inicial e inicializao das demais variveis.
x0=zeros(n,m-n);
segue=%T;
contador=0;

// iterao

while segue
x=invB_b+invB_C*x0;
ifnorm(x-x0,norma)<=tol_aprox | contador>=max_iter then
segue=%F;
end;
x0=x;
contador=contador+1;
end;

if contador>max_iterthen
warning('No houve convergncia.');
end;

endfunction;

Implementao do Mtodo de Gauss Seidel
clc
function [x]=gseidel_solv(A, norma, tol_aprox, max_iter)
// A matriz "A" deve ser a matriz completa de um sistema de equaes lineares.
// como o prprio nome diz, norma deve ser a norma matricial. Pode ser "1",
"'inf'"ou "'fro'"
// que corresponde norma 2 que estudamos.
// tol_aprox a tolerncia na diferena entre duas aproximaes sucessiva e
max_iter,
// o nmero mximo de iteraes.
n=size(A,1);
m=size(A,2);
// construo das matrizes utilizadas na iterao
//B=diag(diag(A(:,1:n)));
//invB=inv(B);
//C=B-A(:,1:n);
invB=zeros(n,n);
for i=1:n
invB(i,i)=1/A(i,i);
end;
C=-A(:,1:n);
for i=1:n
C(i,i)=0;
end;
//invB_b=invB*A(:,n+1:m);
invB_b=zeros(n,m-n);
for i=1:n
invB_b(i,1:m-n)=invB(i,i)*A(i,n+1:m);
end;
//invB_C=invB*C;
invB_C=zeros(n,n);
for i=1:n
invB_C(i,1:n)=invB(i,i)*C(i,1:n);
end;
// aproximao inicial e inicializao das demais variveis.
x0=zeros(n,m-n);
segue=%T;
contador=0;
// iterao
while segue
x=x0;
for i=1:n
x(i)=invB_b(i)+invB_C(i,:)*x;
end;
ifnorm(x-x0,norma)<=tol_aprox | contador>=max_iter then
segue=%F;
end;
x0=x;
contador=contador+1;
end;
if contador>max_iterthen
warning('No houve convergncia.');
end;
endfunction;



Exerccios
1) A = [ 2 1 1 2 33; 1 10 2 4 38.4; 1 2 10 1 43.5; 2 4 1 20 45.6]
A= 2. 1. 1. 2. 33. 1. 10. 2. 4. 38.4 1. 2. 10. 1. 43.5 2. 4. 1. 20. 45.6
-->gseidel_solv(A)
ans = 13.927934 1.7729699 2.5621616 0.4045045
->norma = 1 norma = 1.
-->tol_aprox = 10^-4 tol_aprox = 0.0001
-->max_iter = 30 max_iter =30.
-->A = [10 1 1 2 3 -2 6.57; 4 -20 3 2 -1 7 68.448; 5 -3 15 -1 -4 1 112.05; -1 1 2 8
-1 2 3.968; 1 2 1 3 9 -1 2.18; -4 3 1 2 -1 -12 10.882]
A= 10. 1. 1. 2. 3. - 2. 6.57 4. - 20. 3. 2. - 1. 7. 68.448 5. - 3. 15. - 1. - 4. 1. 112.05
- 1. 1. 2. 8. - 1. 2. 3.968 1. 2. 1. 3. 9. - 1. 2.18 4. 3. 1. 2. - 1. - 12. 10.882




2) jacobi_solv (A) ans = 0.0795330 - 2.836746 6.9563058 - 0.5673175
0.1499620 - 1.169886

You might also like