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)
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;