Você está na página 1de 14

Ce P ÍTU LO

5
Método iterativo
de Gauss-Seidel
"Uma viagem de mil milhas começa com um simples passo-'
Lao Tsu, filósofo chiÊ

5.L Introdução
Esse método é usado para a resolução de sistemas lineares por iterações sucessivas,
..ti
q chegando a uma aproximação da solução do sistema linear. Essa idéia é bem simpler
rl'
e fácil de ser implementada em linguagens de programação.
*! lsso é feito através do isolamento de cada uma das incógnitas a partir de cada urrn
*.lÍl das equações do sistema. Em seguida, a partir de valores inicialmente atribuÍdos àr
incógnitas, são feitas várias iterações, tendo como critério as expressões obtidas ini-
.3:lr
íIirl cialmente.
qil

5.2 Método iterativo de Gauss-Seidel


Dado um sistema linear

a1lq + a,x2 +. '. * ar,xn = b,


a2rx1 + azzx2 + '.'l ar,xn = b,

arn-t,1',txt + alr-r)2xz ! "' * açn-tynx, = br-t


a,1x1 + an2x2 +... i annxn = b,

podem-se isolar as incógnitas, de tal forma que


Método Iterativo de Gauss-seidel 53

*, = - atzxz - atzxz - ...- ar,x,l


|lu,
*, = Llu, - aztxr - azzxz -...- ar,x,f
(s.2)

*, ,= - ar.,-tltxr- a(,-t)zxz -'"- o*-rr,r,f


o**lu,-,
*, = - a,rxt - a,zxz -. ..- aç,-r,nx,-r)
[lu,
Então, apartir de uma aproximação inicial da solução, ou seja, um conjunto de va-
lores p0 = xf;, .. .,rf Oa-r" início à seqüência de iterações, conforme as expres-
{rl, },
sões de Gauss-Seidel;

,l*' = - o,,*! - o,,x! -...- ,,,*:f


*f,
,:*' =*fO- orrrfn' - arrx! -...- or,":)
(5.3)

xo*] = q1,-\rxl*' - a1n-r;r*! or.r,*l)


Ufilu,-r-
*:n' = - r,r*[*' - o,r"!*' -... - a(, r,*::lf
*lu,
observe que o valor xrk*t,ot seja, o valor dex, do próximo passo, depende ape-
nas de valores do passo atr.al, pk ={rl, x!,...,*l}.mo valor de xrk*r depende de
pu'={*f*t,x[,...,*!,];*{.,dependede{xf.', x,!*t,...,*:},"assimpordiante.Dessa
forma, pode-se ir da iteraçáo k paru a iteração k + 1 sem maiores dificuldades.
As iterações continuam até que seja alcançada uma precisão preestabelecida. Ao flnal
de cada iteração, é calculado o valor máximo do desvio para as incógnitas através de

í(rl.' - ri)' *(rl.' - ri)' +...+(rlli - *!,u)' *(rX. - r!,)'


r

Âo*, = (s.4)

ou

Ào*, = -a*{ lrf.' - *il, lr!.' - *ll, ..., l*!,li - *!,_,1, V:., - .:l} (s.s)

ou outro critério semelhante que traduza a noção de "distância percorrida" entre o ponto
dado por pÉ, no espaço de k dimensões das incógnitas, e o ponto pÉ*1. euando Ào*, for
menor do que a precisão desejada, as iterações podem ser interrompidas, e o último
valor de À pode ser usado como estimativa da margem de er:ro do resultado.
54 Capítulo Cinco

Figura 5.1 Representação das aproximações sucessivas no espaço das incógnitas.

Uma outra forma de flnalizar o pÍocesso é estabelecer um número máximo de itera-


por dois motivos: 1)
ções. Esse critério, apesar de parecer simplista, é bem adequado,
muitos sistemas podem não ter uma solução absolutamente exata, principalmente se
q
út forem deduzidos a partir de aproximações do rnundo físico; e 2) é possível determinar
o tempo máximo necessário paÍa um programa executar as iterações se esse limite for
.n estabelecido.
rL, É importante dispor, através da troca de linhas do sistema original, os maiores va-
.ã. lores absolutos na diagonal principal. Esse procedimento simples acelera o processo
fl't
a=lr iterativo e traz mais precisão ao resultado flnal.
.Ití
lÊltr
-*r

5.3 Exemplos
Exnnmlo I
Resolva o sistema linear pelo método de Gauss-Seidel.

{4x,+xr*xr=5
j :r, * xr*6xr= -6,5
l-2x,+5xr+xr=0
1. Rearranjam-se as linhas de forma que os maiores valores absolutos flquem na dia-
gonal principal. Nesse caso, será necessário apenas trocar de lugar as linhas 2 e 3:

l4xr+xr*xr=5
I

l-2xr+5x,
*x. =0 (5.7)

f3.r, + x,46x,=-.6,5

2. Escrevem-se as expressões de Gauss-Seidelparu cada incógnita:


Método Iterativo de Gauss-Seidel

,ln' =ifr- *l-.!7


x:*'=*[0. zx{., *xlf (5.8)

*\*' =f [-u,r -3*l*' - 47


3. Escolhem-se os valores do ponto inicial, po. Por uma questão de facilidade, uma es-
colha trivial é um conjunto de zeros. Esta escolha pode levar a um número maior de
iterações, mas é mais adequada ao nível exigido nesta obra do que um critério mais
sofisticado. Assim:

po =
{rf, *1, *il = {0, o, o}. (s.e)

4. Proceda com as iterações. Isso pode ser facilmente acompanhado através de uma
Íabela:

onde para À foi utiiizada a fórmula (5.4).


Como resultado, obtém-se

{xr, xr, xr} = {1,5; 1,0; -2,0} (5.10)

Nesse ponto é interessante observar qual seria o andamento do processo (e o re-


sultado), caso fosse escolhido um outro conjunto de valores para po. uma boa esco-
tha (ainda que também trivial) seria

po =
{r? , *1, *?} = {b,, br, br} = {5; 0; -6,5}. (s.11)

Observe o comportamento das iterações:


Capítulo Cinco

Apesar de o resultado ser o mesmo, foi necessária uma iteração a mais.

Exnlrplo 2

t'f, Resolva o sistema linear pelo método de Gauss-Seidel.
)"
[ :i' &+it2*x, =1ç
§
.11
x,*xr=8 (s.12\
E
#
,tlr -x *2x, * x, * 4
i
G:rI
a*'t 1. Rearranjam-se as linhas de forma que os maiores valores absolutos fiquem na dia-
:-h gonal principal. Nesse caso isso é particularmente importante, pois não pode haver
zeÍos na diagonal principal, porque esses valores são usados como os denominado-
res das expressões de Gauss-Seidel'

I x,+x,*x.=lg
)-*,',,*ir" i *, = 4 (s.13)

| *;, =;
2. Escrevem-se as expÍessões de Gauss-Seidel para cada incógnita:

{*!*' = 1o-xj -x{


I

jrl.' =*[o*rl-' -rá] (s.14)


t' ,L

L,j*' = 8 -*l*'
3. Escolhem-se os valores do ponto inicial:

po ={rl, ,i,*\} - {o, o, o}. (5.15)


Método Iterativo de Gauss-Seidel

4. Proceder com as iteracões.

:
:,,,,:'',,',;'
1;rti,+,,,1
: :y rl{
0 0,000 0,000 0,000 10,000 2,800 -2,000 10,s7s
1 10,000 2,800 *2,000 9,20A 3,040 -1,200 1,151
2 g,zo0 3,040 -1,200 8,160 2,612 -0,160 1,516
--) 8,160 2,612 -0,160 7,488 2,330 0,512 1,010
4 7,488 2,330 o 51? 7.158 2,t29 0,842 0,507
f 7,158 2,129 0,842 1,029 2,038 0,97t 0,205
6 7,029 2,038 4,97 t 6,992 2,004 1,008 0,063
7 6,992 2,004 1,008 6,987 1,996 1,013 0,010
8 6,9g7 t,996 1,013 6,992 1,996 1,008 0,006
9 6 qq) 1,996 1,008 6,996 1.99'7 1,004 0,006
10 6,996 1,997 1,004 6,998 1,999 1,002 0,004
11 6,998 1,999 1,002 6,999 2,000 1,001 0,002
t2 6,999 2,000 1,001 7,000 2,000 1,000 0,001
13 7,000 2,000 1,000 7,000 2,000 1,000 0,000
Resultado: {x,.rr.x,} = {7. 2. l} (s.16) ffi

5,4 Critério de convergência


Quando utilizamos o método iterativo de Gauss-Seidel para resolver sistemas lineares,
devemos nos preocupar com a convergência da seqüência de aproximações da solução.
Existem condições sobre os elementos damaÍriz dos coeficientes do sistema que, se
satisfeitas, são suÍicientes para garantir a convergência do método.
Entretanto. se os critérios de convergência não forem satisfeitos, a seqüência de
iterações não levará a um resultado satisfatório, e os valores flnais não serão obtidos
num tempo flnito.
Uma condição suÍiciente para garantir a convergência do método de Gauss-Seidel.
quando aplicada a um sistema linear, com aii + 0, é

Ilr,
ll ttl I
<lct
t út l.
i= t. 2, ..., tr (s.17)
CapÍhrlo Cinco

Por exemplo, o sistema

{*,+*o=19
1*,**^=+
l*, *r, = s
Aplicando a expressão (5.17) paÍa cada linha:

Não
fltl+lol.ltlt
{lol+ltl<ltlt Nã0

[14*q.p1r Não

A convergência não está garantida. Isso pode ser demonstrado se tentarmos aplicar

método. As expressões de Gauss-Seidel são:

{*f*'=lo-xl
)**"' = 4* *\
Lri-'=a-*f.'
Ao aplicarmos as iterações, o resultado é:

Observe que as incógnitas apÍesentam valores oscilantes, sem que haja uma f,
zaçáo com um grupo fixo de valores. Entretanto, esse sistema tem soluçáo {7,3, I
que pode ser facilmente obtida por substituição ou pelo método de triangulari
de Gauss.
Método Iterativo de Gauss-Seidel 59

5.5 Programa em linguagem C


A Figura 5.2 apresenta a listagem de um programa que resolve um sistema
através do
método iterativo de Gauss-Seidel. A rotina de entrada de dados é a mesma
usada no
progÍama de triangulatizaçáo de Gauss. A rotina principal está escrita
na função ite-
racao. Nesta função, as incógnitas são alteradas uma a uura (primeiro xo, depois
x,,
etc.), e no flnal é testado o critério de flm das iterações, c,,Jculando-se
À através da
fórmula (5.5). A cada iteração, o resultado parcial é mostrado, com todas as incógnitas
e o valor de Â. O processo é parado automaticamente quando < 10-8. Esse critério,
bem como o número máximo de linhas permitido, trinta,pode ^ ser facilmente alterado
para que o programa possa ser usado para resolver vários problemas.

Programa Seidel
resolve um sistema de N equacoes lineares pelo metodo
iterativo de Gauss-Seidel
-----------^/
#incl-ude <stdio. h>
#include <math.h>
int N;
float B[30],x0t30l,xj_t301,
float A[30] [30];
float Maxdif;
/* esta rotina Ie via teclado a ordem do sistema,
as linhas da matriz de coeficientes e a matriz de resul_tados ,!,/
void LeMatriz()
JI
int I, J;
printf("Ordem do sistema: n= ");
scanf( "%d" , &N) ;
printf( "\n\nDigite os valores separados por espacos .
for(I:0;f<N;I++) \n\n" ) ;
JL
printf( "linha %3d\n" , I+1)
for (J=0 ; J<N; J++)
J
L
scanf( "%f",&(Atrl tJl ) ) ;
]
scanf("%f",&(BII]));
a
J

]
/* calcula a maior diferenca entre X1 e X0 'r,/
float Maximo()
{
int i;
float d,m=0;
for(i=0;i<N;i++) {
d : fabs(x1til-x0til);
if (d>m) m:d;
]
a
return m;
J

(continua)
60 Capítulo Cinco

/'k mostra o resultado da matlríz de solucoes * /


void Imprime(float *X, int K, int P)
{
int f;
printf("\nSolucao do sistema linear\n\n") ;
for ( I:0 ; I<N ; I++ )
printf("x(%3d)= %10.6g\n" , I,XII] );
if (K>0) printf("\n\nfteracao %d MaxDif = %g\n\
fl",K,Maximo());
if (P:=0) printf( "Problema encerrado . \n" ) ;
printf("<ENTER> ");
getch();
]
/'r faz uma iteracao do metodo */
voj-d iteracao(int k)
JL
int i,j;
for(i:0 ; i<N; i++) X1[i]:X0[i] ;
for(i=0;i<N;j-++) {
x1tíl : Btil;
for(j=g;i<N;i++)
if (i!=i)
xl-til -= Atiltjl*xltjl ;
tl
í
-l ! ,r, x1[i] /= Atil til ;

]
*- I
-\:
a
Imprj-me(X1 , k+1 ,1) ;
J
Rl,
.tt
\F /* programa principaL 'x1
int main()
.g'i JL
c'*r int i, k:0 ;
.;:.r
! dl
êt, LeMatriz();
for(i:0 ; j-<N; i++) X0til=0. 0 ;
Imprime (X0 , k, 1) ;
do{
iteracao(k);
Maxdif = Maximo();
for(i:0 ; i<N ; i++) X0 til:X1 [i]
k++;
1I
whj-le (Maxdj-f > 1.0e-8) ;
Imprime(X]-,k,0);
return 0;
aI

Figura 5.2 Listagem de programa em linguagem C que aplica o Método de Gauss-Seidel para
a solução de um sistema linear.

A Figura 5.3 apresenta a listagem de um programa que calcula o critério de conver-


gência de um sistema através do método iterativo de Gauss-Seidel. A rotina de entrada
de dados é a mesma usada no programa apresentado na Figura 5.2. Arotina que calcula
o critério foi implementada na função criterio, que implementa a expressão (5.17).
O resultado é passado para o programa principal que exibe o resultado.
Método Iterativo de Gauss-seidel 6t

Programa Criterio
Verifica se um sistema de N equacoes lineares satisfaz
O critério de eonvergência do método iterativo de Gauss-Seidel

#incl-ude <stdio. h>


#include <math.h>
i-nt N;
float B[301;
float A[30] l30l;
/* esta rotina le via teclado a ordem do sistema,
as linhas da matriz de coeficientes e a matri_z de resultados */
void LeMatriz()
JL
int T, J;
printf("Ordem do sistema; n: ,');
scanf("%d",&N);
p_r1ntf("\n\nDigite os valores separados por espacos.\n\n,,)
for(f=0 ; I<N; I++) ;

JL
printf( "Iinha %Bd\n" , f+1) ;
for(J=0 ; J<N; J++)
{
scanf("%f",&(AII
a
ItJt));
J
scanf("%f",&(BtIl) );
]
ínt criterio()
JL
int i,j;
float s;
for i++) {
(i-=0 ; i<N;
s=0-0;
for(j:6;i<N;j++)
if (i!:j)
s += fabs(Atil ljl);
if (s >= fabs(Atiltil)) return O;
a
J
return -1;
a
)

/'x programa principal


int main()
JL
int teste;
LeMatriz();
teste=criterio();
if (teste)
prj-ntf ( "O criterio e sati-sfeito \n" ) ;
.
else
printf("O criterio nao e satisfeito, \n") ;

return 0;
]
Figura 5.3 Listagem de programa em linguagem C que veriflca o critério de convergência do
Método de Gauss-Seidel para um sistema linear.
62 Capítulo Cinco

5.6 Técnicas avançf;las: Decomposição de cholesky


André-Louis cholesky (1875-1918)
Esta técnica foi proposta pelo matemático francês
e pe:.rni.te ;:breviar u, pur.ug"ns na busca
de soluções de sistemas lineares em determi-
Aiie def,nida
nadas situac óes. Se uma matriz quadrada A for simétrica, isto é, todo A,1=
então é possível aplicar um aI-
positiva (ou seja. para qualquer vetor v, v 'A' Y > 0)'
goritmoespecialp,.r!§eobteraformatriangular.Estetipoespecialdematrtz,def,nida
em algumas aplicações, o que faz o
positiva e simétrica J" reqüentemente encontrado
paÍa se ter à mão'
método de Chole:ll.y ser uma interessante ferramenta
Parte-se da supt,sição que exista umamatriz
L tal que

(s.21)
L.Ií =A

em A. Para se obter a transposta de


crr seja, o produto de L por sua transposta resulta
L, basta criar uma nova matriz tal que
(s.22)
4, = L,,

O que signiflca "trocar as linhas pelas colunas"'


de "tirar a raiz quadrada de A"' Ex-
Este tipo de tatoração é chamado comumente
pandindo a expressão dada, obtém-se

(5.23)

para adiagonal PrinciPal e

-?-'.'-)' j = i+l,i+2, ..., N (s.24\


',,= f,(',
para os outros elementos.
na ordem i = 1,,2, ...,
Aplicando-se estas duas últimas expressões seqüencialmente
obtidos naturalmente à medida
N, nota-se que os elementos de L à direita vão sendo
os componentes 4rcom7
>
i são refe-
que forem necessários. Por outro lado, apenas
ponto, conveniente substituir o triângu-
renciados (pois A é simétrica). Torna-se, nesse
equivalente de L, preservando o
lo inferior (sem incluir a diagonal) de A pela porção
forma, para se aÍmazerlaÍ a diagonal
triângulo superior com os valores originais. Dessa
principaldeL(querestou..')énecessárioapenasumvetordetamanhoN.Todaesta
a triangular\zaçáo de matrizes genéricas'
operação toma muito menos tempo do que
mas há a inclusão de N raízes quadradas'
Método Iterativo de Gauss-Seidel 63

O processo de decomposição pode agora seguir seu curso normal (via triangul arizaçáo
ou Gauss-Seidel) com a vantagem de que esta transformação garante maior estabilidade
numérica e ef,ciência. O algoritmo falhaú somente se A não for definida positiva.

5,7 Exercícios
1. Resolva o sistema pelo método iterativo de Gauss-Seidel. Verifique, antes de resolveío sis-
tema, se ele satisfaz o critério de convergência.

l4xr-Zxr-x: = 10
*", +gx.
' '", -5x.
Il*zx, ""4 -= -5" (S.28)
| -x, +6x. -3xo = g
[-5x, -sx, +10x0 =g
2. Verifique se o sistema linear dado a seguir satisfaz o critério de convergência de Gauss-
Seidel.

l4x, *2x. =o
1 -z'r. * r.- x- = o
(5.26)
t'^'_'
l-X2*ZXo=J
3. Resolva o sistema pelo método iterativo de Gauss-Seidel. Troque as linhas, de forma que o
sistema satisfaça o critério de convergência.

+6xo =5
lxr+xr+x,
)7xr+xri-X3*Xo=2 $.27)
+ x3 + xo =l)
lxr+9x,
fx, +x, -8xr+xo=4
4. Determine qual deve ser o valor de apara que o sistema linear dado possa ser resolvido pelo
método iterativo de Gauss-Seidel.

l6xr-zxr*aaX==Q
(5.28)
]-zxr+axr-xz=*2
t-
laxl-x2 -bx3 -5
5. lnclua uma rotina chamada "trocalinhas" no programa "critério" que faça a troca de linhas
do sistema linear, de forma que os maiores valores absolutos sejam colocados na diagonal
principal antes de o teste prosseguir. O sistema alterado deve ser apresentado no final do
programa.

6. Dado o sistema linear:

*2t +152 = 67
lzx (s.29)
l9x+21+32 =59
| 2x+4y-z =I
Resolva o sistema e verifique a quantidade de iterações necessárias para encontrar solu-
a.
ções com precisão de 10
b. Troque as Iinhas do sistema linear, de forma a otimizar a solução do sistema. Quantas
iterações foram necessárias?
CapÍtulo Cinco

7. É necessário determinar as forças nas 17 barras da treliça mostrada na Figura 5.4. As bar-
ras da treliça estão unidas por juntas sem atrito. Um dos teoremas da Mecânica Clássica
garante que se o número de nós 7 está relacionado com o número de barras m por 2i - 3 =
m, então a treliça é estaticamente determinada. lsto quer dizer que as forças nas barras são
determinadas inteiramente pelas condições de equilíbrio estático nos nós. Fl simboliza os
componentes das forças horizontais e Frsimboliza os componentes das forças verticais.

tl 1kN
@, 10 @14
l,,u n*
Figura 5.4 Figura do Exercício 7.

Suponha que o ângulo entre as barras inclinadas seja de 450, seja o = sen 450 = cos 45o,
então as condições de equilíbrio são

fa+ afu=Q,
-r, =-aft+
{i; --(r\-ft-afu=Qi
-,. = -fz*fa =0,
{r,l =1.-1,0=0;
-,- =-fq't fe=0,
{}; -_f - ô.

--afs- fe- afg- fio= 0,


-,.
{i; -afu+ f1 + af, - 1,5= 0;

*u u
ilr =-fa-afg+ frr+ afç=0,
tÍr, --dfg- + ofr. = f11 Q;

-r, =-fio* fu=O,


{i; =fit=0;
-fv *
-,' =-frc- = aflu = Q;

{i; afru=Qt

-r, -= -dfn f1a + fr, = Q,

{i; = afr, +- 1,0 = 0;


f15

Nó 10 If,, =-dfrc-frr=O

Encontre a solução para o sistema de equações formado.


Método Iterativo de Gauss-Seidel

Para a treliça da Figura 5.5 aplique o mesmo desenvolvimento mostrado acima e encontre
as forças em cada barra.

'@'O
7 l1
12

1013/1 1i
Or
{,uo
**
Figura 5.5 Figura do Exercício 8.

Um escritório de engenharia civil foi solicitado a projetar uma sala de cinema cuja sustenta-
ção deve ser garantida por quatro colunas principais. Para calcular as dimensões das colunas,
os engenheiros chegaram ao seguinte sistema linear:

[
I
3,2Ix +7,89 y + 4,952 -6.35 = 31,07

)8,O5x-a,7Oy+5,052+L,2Sw =38,21 (s.30)


2,O2x +7 ,77 y -3,042 -6,72w =O
|
[
0, 32x + 9,05 y - 4,77 z - 4,78w = -20,67

t0. Resolva o seguinte sistema Iinear pelo método de Gauss-Seidel:

13,stx
+7,62y -8,732 = -I3,72
lA,O2x +15,24y -t4,462 =27,44 (5.s1)
lz I o - +t,s2 y - 6t,7 4z = 98,44
^
11. Um professor de cálculo numérico deseja criar um interessante exercício de sistemas linea-
res, para o qual não haja solução. Assim, ele criou o seguinte sistema linear:

t'lx*2v-3=O
1x-y+mz=z $.32)
lz^**y*42=*Zm
Quais são os valores de m que fazem com que o sistema não tenha solução?

Você também pode gostar