Você está na página 1de 17

1

Métodos Iterativos de Jacobi e Gauss‐Seidel  
para resolução de sistemas de equações lineares Ax=b 
 
Para resolver um sistema  , os métodos iterativos partem de uma solução inicial 
  e  constroem  uma  sucessão  de  aproximações  , ,…, ,…    converge 
para a solução exacta x do sistema 
lim →∞       ou  lim →∞      0 
Para  implementar  os  métodos  iterativos  é  necessária  uma  fórmula  que  permita  obter 
cada solução a partir da anterior:    →      . Para construir a fórmula iterativa, o 
sistema    é convertido num sistema equivalente do tipo 

 x + c 
 obtendo a fórmula iterativa  
                                                             ,          1, 2, …, 
 onde G é a matriz iteração e c um vector. 
O método iterativo é repetido até que o vector     esteja suficientemente próximo da 
solução exacta x. Para interromper o processo, necessitamos de estabelecer pelo menos 
um critério de paragem:  

9           ( tolerância absoluta) 
( parar se a diferença de duas aproximações consecutivas, para alguma norma,  é  
menor que a tolerância dada ) 
 
     
9   (tolerância relativa) 
  
(parar se a diferença relativa de duas aproximações consecutivas, para alguma 
norma, é menor que a tolerância dada ) 
9          (majorante do erro) 
 
9           (pelo vector resíduo) 
( parar se a norma do vector resíduo é menor que uma tolerância dada)  
 
9 Impondo um número máximo de iterações,    

Após a paragem do método, obtém‐se a solução aproximada    da solução exacta do 
sistema Ax=b, com a tolerância desejada. 

Gladys Castillo, 2010 
2

Resumo dos métodos Iterativos de Jacobi e Gauss‐Seidel 
Forma Matricial
Jacobi  Gauss‐Seidel 

1º.  Decompor a matriz  A= D + L + U  - A={aij} onde:


D={dij}-estritamente diagonal, L={lij}- triangular inferior, U={uij}- triangular superior
aij se i=j (aij≠0) aij se i>j aij se i<j
dij = lij = uij =
0 se i≠j 0 se i≤j 0 se i≥j

2º.  Construir fórmula iterativa:   
   , 1, 2, …, 
                            G ‐ matriz iteração , c  ‐ vector       
GJ  = ‐  D‐1  (  L + U )   GGS = ‐ ( D + L )‐1  U 
 cJ  =    D‐1  b    cGS =    ( D + L )‐1   b  
 x(k) = ‐D‐1  [L+U]  x(k-1) +  D‐1 b    x(k)= ‐(D+L)‐1  U  x(k-1) +  (D+L)‐1 b ⇔ 
  x(k) = ‐ D‐1  [L  x(k)  + U  x(k-1)  ] + D‐1 b  

Forma Algébrica
Cálculo das componentes xi da aproximação x(k) , k=1,2,…, i=1,2,…,n
i −1
1 n
1 n
x(k )
i = (bi − ∑a ij x ( k −1)
j ) x (k )
i = (bi − ∑ aij x j − ∑ aij x (jk −1) )
(k )

aii j =1, j ≠i aii j =1 j =i +1

se j < i – usar valores xj calculados na presente iteração


∀ j ≠ i – usar valores xj calculados
se j > i – usar valores xj calculados na iteração anterior
na iteração anterior

Critérios de Convergência

(CS) 1.  A matriz A é estritamente diagonal dominante por linhas:  | aii |> ∑ aij , ∀i        


j
j ≠i

(CS) 2. ||G|| < 1  para alguma norma  
(CNS) 3. ℘(G)  <1 , ℘(G) = max i |λi(G)| – raio espectral da matriz G      
                                                                           λi  – valores próprios de G, i=1,2,…,n 
(CS) ‐ condição suficiente ,   (CNS) – condição necessária e suficiente   

Gladys Castillo, 2010 
3

Exemplo 
 
Considere o sistema 
 
⎧5 x1 + 2 x2 + 2 x3 = 15

    ⎨2 x1 + 3x2 + 6 x3 = 26  
⎪ x + 3 x + x = 10
⎩ 1 2 3

Efectue  três  iterações  dos  métodos  de  Jacobi  e  de  Gauss‐Seidel  partindo  da 
aproximação  0, 0,0 .  Se  necessário,  reescreva  o  sistema  por  forma  a  poder 
garantir a convergência de ambos os métodos para a solução exacta. 
 
Para  começar,  devemos  provar  a  convergência  dos  métodos  iterativos  verificando  a 
condição suficiente nº 1: 
    (note que esta verificação é imediata pois depende apenas dos elementos da matriz A do sistema) 
 
CS 1: Se a matriz dos coeficientes A for estritamente diagonal dominante (SDD) por linhas, 
  então  os  métodos  iterativos  de  Jacobi  e  Gauss‐Seidel  geram  uma  sucessão  convergente 
  para a solução única do sistema Ax=b, para qualquer escolha da solução inicial   . 
 
 
Para o sistema dado a matriz A não é estritamente diagonal dominante por linhas. 
 
5 2 2
2 3 6
1 3 1

Observa‐se que para a primeira linha, |5|   |2| |2|, enquanto que para as segunda e 


terceira linhas, |3|   |2| |6| e |1|   |1| |3|,  respectivamente, o que não satisfaz a 
condição requerida.  Não entanto, podemos tentar trocar as linhas do sistema de modo 
a obter uma matriz estritamente diagonal dominante por linhas.  
 
5 2 2
1 3 1 
2 3 6
 
Neste  caso,  trocando  as  linhas  2  e  3  da  matriz  A  obtemos  para  a  primeira  linha 
|5|   |2| |2|, para a segunda, |3|   |1| |1| e para a terceira |6|   |2| |3|. 
 
Como a condição suficiente se verifica1 fica provado que os métodos de Jacobi e Gauss‐
Seidel  convergem  para  a  única  solução2  do  sistema  equivalente    com 
15, 10, 26  . 
 
 
 

1
No caso de não se verificar a CS 1 devemos então verificar a CS 2 baseada no cálculo de uma norma para a matriz de iteração G (se não for indicada  
uma norma, utilizar a norma do máximo).  Se a condição CS 2 também não se verifica então devemos utilizar a CNS 3 para provar a convergência, pois é 
a única conclusiva. Para isto precisamos calcular todos os valores próprios da matriz de iteração G, o que representa uma prova muito mais custosa.  
2
 O determinante de A é igual a 61 pelo que o sistema   tem solução única  1, 2, 3 . 

Gladys Castillo, 2010 
4

 
Métodos de Jacobi e Gauss‐Seidel na forma matricial 
 
Dada a aproximação inicial  0   0  0  , o objectivo é  calcular três aproximações 
da solução exacta utilizando os métodos iterativos de Jacobi e Gauss‐Seidel. 
 
O primeiro passo é decompor a matriz   como uma soma de três matrizes, D, L e U 
 
      = D + L + U 
 
onde 
9 D é a matriz diagonal formada pelos elementos da diagonal principal de A 
9 L  é a matriz triangular inferior formada pelos elementos de A que estão abaixo 
da diagonal principal  
9 U é a matriz triangular superior formada pelos elementos de A que estão acima 
da diagonal principal 
                                                                             D                L            U        
 
0 0 0 0 0 0
0 0 0 0 0 0  
0 0 0 0 0 0
 
A seguir, dada a solução inicial  0, 0,0 , constrói‐se a fórmula iterativa 
 
           ,         1, 2, …,  
 
Para o método de Jacobi a matriz de iteração G e o vector c podem ser calculados pelas 
fórmulas 
 
 
‐1   ‐1     
                            G=  GJ = ‐ D ( L + U ) e  c  = c J =  D b

 
Então, de  
 
0 0
0 15
   0 0  ,       0 ,   10  
   0 26
0 0
 
obtém‐se 
 
 
0 3
0 ,               
0
 

Gladys Castillo, 2010 
5

que conduz ao processo iterativo, 
 
2 2
0 3
5 5 10
1 1
0 3 ,    1, 2, …, 
3 3 13
1 1
0 3
3 2
 
Pela fórmula iterativa podemos então calcular três aproximações para  k=1, 2, 3 a partir 
de   0  0  0 .   
 
Para  1 
x(0) x(1)
0 3 3
0
0 0 =  
0
0
 
Para  2  x(1) x(2)
0 3 3
0 =      
0    
 
Para  3  x(2) x(3)
0 3   
0     =     
0        
 
Como resultado obtemos a aproximação  1.9778  2.8000 3.9111   da solução 
exacta do sistema Ax = b. 
 
Para o método de Gauss‐Seidel a matriz de iteração G e o vector c podem ser calculados 
pelas fórmulas 
 
‐1   ‐1     
                             G = GGS = ‐ (D+L) U  e  c = c GS = (D+L) b

 
Para  poder  construir  a  fórmula  iterativa  de  Gauss‐Seidel  necesitamos  determinar  a 
matriz inversa de  (D+L) 
  
                                                                            D               L               U        

0 0 0 0 0 0
0 0 0 0 0 0  
0 0 0 0 0 0
 

Gladys Castillo, 2010 
6

        0    0


 5  0    0
 3    0   ⇒          0  
   6
   
 
Então,  de 
        0    0
0 15
          0 ,  0  0 ,   10  
0 0  0 26
   
 
obtém‐se 
        0    0 0
0
                0 0  0 0      
0 0  0
    0          
 
        0    0 3
15
                0 10  
26
   
   
 
que conduz ao processo iterativo, 
    
2 2
0 3
5 5 7
2 1
0     3 ,    1, 2, …, 
15 5 13
1 7
0           6
15 30
 
Pela fórmula iterativa podemos então calcular três aproximações para k = 1, 2, 3 a partir 
de  0  0  0 .   
 
Para  1 
  x(0) x(1)
0 3
0 7 3.0000
0     0 3 = 2.3333  
0 13 2.1667
0           6
 
Para  2 
  x(1) x(2)
2 0 3
1 3.0000 7 1.2000
2
2
0     2.3333 3 = 2.2111  
2 2.1667 13  2.8278
3 0           6
 
 

Gladys Castillo, 2010 
7

 
Para  3 
x(2) x(3)
0 3
1.2000  0.9844
0     2.2111 = 2.0626  
 2.8278 2.9739
0          
 
Como resultado obtemos a aproximação  0.9844  2.0626  2.9739   da solução 
exacta do sistema  Ax = b. 
 
 
Métodos de Jacobi e Gauss‐Seidel na forma algébrica. 
 
Considere‐se o sistema linear Ax = b 
 

 
 
Assumindo  que  ≠ 0 ∀    1,2, … ,   ,  o  primeiro  passo  na  implementação  dos 
métodos de Jacobi e Gauss Seidel consiste no isolamento do vector x no lado esquerdo 
mediante a separação pela diagonal.  
 

A partir de aqui podemos construir as fórmulas iterativas para Jacobi e Gauss‐Seidel na 
forma algébrica. 
 
  
 
 
 
 
 
 

Gladys Castillo, 2010 
8

Método de Jacobi 
 
para  k=1,2, …,  
 
(k)  (k-1)  (k-1)

∀ j ≠ i – usar os valores 
calculados  na 
(k)  (k-1)  (k-1) (k-1)  iteração anterior

(k)  (k-1)  (k-1) (k-1)

 
 
Método de Gauss‐Seidel: 
 
para  k=1,2, …,  
 
(k)  (k-1)  (k-1)

se j < i – usar valores calculados 


na presente iteração 
(k)  (k)  (k-1) (k-1) se j > i – usar valores calculados 
na iteração anterior  

(k)  (k)  (k)  (k) 

 
 
Em  cada  iteração  k  do  método  Jacobi,  para  o  cálculo  da  componente  ,  usam‐se 
todas as componentes  , ,…, , ,…, calculadas na iteração 
anterior.  O  método  de  Gauss‐Seidel  difere  do  Jacobi,  em  que  em  cada  iteração    são 
utilizados  todos  os  valores  da  aproximação    que  foram  acabados  de  calcular  na 
mesma  iteração.  Ou  seja,  no  cálculo  de  cada  componente    no  método  de  Gauss‐
Seidel,  usam‐se  os  valores , ,…, previamente  calculados  na  mesma 
iteração  e  os  valores  , ,…,   calculados  na  iteração  anterior.  
 
Desta forma, o método de Gauss‐Seidel, em cada iteração usa dados mais actualizados 
que  o  método  de  Jacobi.  Isto  não  significa  que  necessariamente  o  método  de  Gauss‐
Seidel converge sempre mais rapidamente. 
 
 

Gladys Castillo, 2010 
9

Exemplo (continuação) 
 
Considere o sistema 
 
⎧5 x1 + 2 x2 + 2 x3 = 15

    ⎨2 x1 + 3x2 + 6 x3 = 26  
⎪ x + 3 x + x = 10
⎩ 1 2 3

Efectue  três  iterações  dos  métodos  de  Jacobi  e  de  Gauss‐Seidel  partindo  da 
aproximação  0  0 0 .  Se  necessário,  reescreva  o  sistema  por  forma  a  poder 
garantir a convergência de ambos os métodos para a solução exacta. 

Anteriormente  já  tínhamos  analisado  que  para  garantir  a  convergência  dos  métodos 
iterativos  precisamos  de  reescrever  o  sistema  por  forma  a  que  a  matriz  A  seja 
estritamente diagonal dominante por linhas 
 
 
⎧5 x1 + 2 x 2 + 2 x3 = 15

⎨ x1 + 3 x 2 + x3 = 10  
⎪2 x + 3 x + 6 x = 26
⎩ 1 2 3

 
O primeiro passo na implementação dos métodos de Jacobi e Gauss Seidel consiste no 
isolamento do vector x no lado esquerdo mediante a separação pela diagonal.  
 

⎧ 1
⎪ x1 = 5 (15 − 2 x 2 − 2 x3 )

⎪ 1
⎨ x 2 = (10 − x1 − x3 )
⎪ 3
⎪ 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x 2 )

 
 
 
 
 
 
 
 
 
 

Gladys Castillo, 2010 
10

Método de Jacobi 
 
Uma vez isoladas as componentes do vector x, podemos construir a fórmula iterativa de 
Jacobi na forma algébrica 

⎧ (k ) 1 ( k −1) ( k −1)
⎪ x1 = 5 (15 − 2 x2 − 2 x3 )

⎪ (k ) 1 ( k −1) ( k −1)
⎨ x2 = (10 − x1 − x3 ) , k = 1,2 , ... ,
⎪ 3
⎪ (k ) 1 ( k −1) ( k −1)
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 )

Observe  que  esta  fórmula  iterativa  é  equivalente  à  fórmula  na  forma  matricial 
construída anteriormente. 

Efectuando algumas transformações algébricas obtém‐se: 

⎧ (k ) 1 ( k −1) ( k −1) ⎧ ( k ) 15 2 ( k −1) 2 ( k −1)


⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) ⎪ x1 = 5 − 5 x2 − 5 x3
⎪ ⎪
⎪ (k ) 1 ( k −1) ( k −1) ⎪ ( k ) 10 1 ( k −1) 1 ( k −1)
⎨ x2 = (10 − x1 − x3 ) ⇔ ⎨ x2 = − x1 − x3
⎪ 3 ⎪ 3 3 3
⎪ (k ) 1 ( k −1) ( k −1) ⎪ ( k ) 26 2 ( k −1) 3 ( k −1)
⎪ x3 = 6 ( 26 − 2 x1 − 3 x2 ) ⎪ x3 = 6 − 6 x1 − 6 x2
⎩ ⎩

⎧ (k ) 2 2
⎪ x1 = − x2( k −1) − x3( k −1) + 3
5 5

⎪ 1 1 10
⇔ ⎨ x2( k ) = − x1( k −1) − x3( k −1) + , k = 1,2,...,
⎪ 3 3 3
⎪ (k ) 1 ( k −1) 1 ( k −1) 13
⎪ x3 = − 3 x1 − 2 x2 +
⎩ 3

x(k) =            G x(k‐1)               +     c 

2 2
0 3
5 5 10
1 1
   0 3 ,     1, 2, …,  
3 3 13
1 1
0 3
3 2

Gladys Castillo, 2010 
11

Pela  fórmula  iterativa  podemos  então  calcular  três  aproximações  para  k=  1,  2,  …,    a 
partir de  0  0  0 .   

⎧ (k ) 1 ( k −1) ( k −1)
⎪ x1 = 5 (15 − 2 x2 − 2 x3 )

⎪ (k ) 1 ( k −1) ( k −1)
⎨ x2 = (10 − x1 − x3 ) , k = 1,2 , ...,
⎪ 3
⎪ (k ) 1 ( k −1) ( k −1)
⎪ x3 = 6 ( 26 − 2 x1 − 3 x2 )

 
 
 
Para  1 
 
⎧ (1) 1 1 15
⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) = 5 (15 − 2 × 0 − 2 × 0) = 5 = 3.0000
(0) (0)


⎪ (1) 1 1 10
⎨ x2 = (10 − x1 − x3 ) == (10 − 0 − 0) = = 3.3333
(0) ( 0)

⎪ 3 3 3
⎪ (1) 1 1 26 13
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 ) = 6 ( 26 − 2 × 0 − 3 × 0) = 6 = 3 = 4.3333
( 0) (0)

Para  2 
 
⎧ ( 2) 1 1
⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) = 5 (15 − 2 × 3.3333 − 2 × 4.3333) = −0.0067
(1) (1)


⎪ ( 2) 1 1
⎨ x2 = (10 − x1 − x3 ) == (10 − 3.0000 − 4.3333) = 0.8889
(1) (1)

⎪ 3 3
⎪ ( 2) 1 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 ) = 6 ( 26 − 2 × 3.0000 − 3 × 3.3333) = 1.6667
(1) (1)

Para  3 
 
⎧ ( 3) 1 1
⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) = 5 (15 − 2 × 0.8889 − 2 × 1.6667) = 1.9778
( 2) ( 2)


⎪ ( 3) 1 1
⎨ x2 = (10 − x1 − x3 ) == (10 − (−0.0067) − 1.6667) = 2.8000
( 2) ( 2)

⎪ 3 3
⎪ ( 3) 1 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 ) = 6 ( 26 − 2 × (−0.0067) − 3 × 0.8889) = 3.9111
( 2) ( 2)


 
Como resultado obtemos a aproximação  1.9778  2.8000  3.9111   da solução 
exacta do sistema  Ax = b. 
 

Gladys Castillo, 2010 
12

Método de Gauss‐Seidel 
 
Uma vez isoladas as componentes do vector x, podemos construir a fórmula iterativa de 
Gauss‐Seidel na forma algébrica 

⎧ (k ) 1 ( k −1) ( k −1)
⎪ x1 = 5 (15 − 2 x2 − 2 x3 )

⎪ (k ) 1 ( k −1)
⎨ x2 = (10 − x1 − x3 ) , k = 1, 2 , ...,
(k )

⎪ 3
⎪ (k ) 1
⎪ x3 = 6 ( 26 − 2 x1 − 3 x2 )
(k ) (k )


 
Esta fórmula iterativa é diferente da fórmula de Jacobi unicamente porque em cada iteração   
são utilizados todos os valores já calculados na presente aproximação  . Observe‐se que no 
cálculo  da  primeira  componente    são  utilizados  os  valores  e     calculados  na 
iteração anterior  1. Porém, para calcular a componente   é utilizado o valor   acabado 
de  calcular  em  vez  do  anterior  ,  pois  já  temos  um  valor  mais  actualizado  desta 
componente.  Como  ainda  não  temos  calculado    utilizamos  o  valor    calculado  na 
anterior iteração. Finalmente, quando calculamos o valor de    podemos utilizar os valores de 
todas as restantes componentes  e    acabados de calcular na mesma iteração. 
 
Para  1 
⎧ (1) 1 1 15
⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) = 5 (15 − 2 × 0 − 2 × 0) = 5 = 3.0000
(0) (0)


⎪ (1) 1 1
⎨ x2 = (10 − x1 − x3 ) == (10 − 3.0000 − 0) = 2.3333
(1) ( 0)

⎪ 3 3
⎪ (1) 1 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 ) = 6 ( 26 − 2 × 3.0000 − 3 × 2.3333) = 2.1667
(1) (1)


 
Para  2 
⎧ ( 2) 1 1
⎪ x1 = 5 (15 − 2 x2 − 2 x3 ) = 5 (15 − 2 × 2.3333 − 2 × 2.1667) = 1.2000
(1) (1)


⎪ ( 2) 1 1
⎨ x2 = (10 − x1 − x3 ) == (10 − 1.2000 − 2.1667) = 2.2111
( 2) (1)

⎪ 3 3
⎪ ( 2) 1 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x2 ) = 6 ( 26 − 2 × 1.2000 − 3 × 2.2111) = 2.8278
( 2) ( 2)


 
Para  3 
⎧ ( 3) 1 1
⎪ x1 = 5 (15 − 2 x 2 − 2 x3 ) = 5 (15 − 2 × 2.2111 − 2 × 2.8278) = 0.9844
( 2) ( 2)


⎪ ( 3) 1 1
⎨ x 2 = (10 − x1 − x3 ) == (10 − 0.9844 − 2.8278) = 2.0626
( 3) ( 2)

⎪ 3 3
⎪ ( 3) 1 1
⎪ x3 = 6 ( 26 − 2 x1 − 3x 2 ) = 6 ( 26 − 2 × 0.9844 − 3 × 2.0626) = 2.9739
( 3) ( 3)

Gladys Castillo, 2010 
13

Como resultado obtemos a aproximação  0.9844  2.0626  2.9739   da solução 


exacta do sistema  Ax = b. 
 
Finalmente, podemos comparar as aproximações obtidas pelos dois métodos utilizando 
a  norma    do  máximo  (norma  infinito)  do  vector  resíduo  associado  a  cada  uma  das 
aproximações.  
 
Para o método de Jacobi: 
 
O vector resíduo associado à aproximação  1.9778  2.8000 3.9111  é:  
 
  r(3) =   b    ‐        A           x(3) 
   
15 5 2 2 1.9778 8.3111
26 2 3 6 2.8000 9.8222  
10 1 3 1 3.9111 4.2889
 
Calculando a norma do máximo obtém‐se 

max |r | 9.8222 
, ,
 
Para o método de Gauss‐Seidel 
 
O vector resíduo associado à aproximação   0.9844  2.0626  2.9739  
 
  r(3) =   b    ‐        A           x(3)
   
15 5 2 2 0.9844 0.0048
26 2 3 6 2.0626 0  
10 1 3 1 2.9739 0.14611

Calculando a norma do máximo obtém‐se 

max |r | 0.14611 
, ,
 
Comparando as normas do vector resíduo podemos concluir que a melhor aproximação 
ao finalizar três iterações é a obtida pelo método de Gauss‐Seidel. 
 
Como conhecemos a solução exacta do sistema Ax = b,   1  2  3 , podemos ainda 
calcular o erro absoluto cometido em cada aproximação. 
 
 
 
e(3) =  x    ‐   x(3) 
1 1.9778 0.9778
Jacobi                  2 2.8000 0.8000     ⇒  max , , |e | 0.9778 
3 3.9111 0.9111
 
1 0.9844     0.0156
Gauss‐Seidel      2 2.0626 0.0626    ⇒  max , , |e | 0.0626 
3 2.9739     0.0261

Gladys Castillo, 2010 
14

 
 
 
Implementação em MatLab 
 
Para  a  implementação  dos  métodos  iterativos  de  Jacobi  e  Gauss‐Seidel  em  MatLab 
podem ser utilizados comandos de MatLab que permitem resolver o problema na forma 
matricial  ou  utilizar  duas  rotinas,  jacobi.m  e  gseid.m,    que  foram  criadas  e 
disponibilizadas no pacote de rotinas da disciplina de Métodos Numéricos.  
 
Para jacobi.m e 
Entradas:  
gseid.m 
9 A (n x n) ‐ matriz dos coeficientes (não singular) 
  
9 b (n x 1) ‐ vector dos termos independentes 
 
9 xa (n x 1) ‐ vector aproximação inicial  
  9 delta ‐ tolerância de convergência do critério de paragem 
  o                 ( tolerância absoluta) 
     
  ou       (tolerância relativa) 
  

  (é usada a norma máxima ‐ inf) 
9 maxit ‐ máximo de iterações 
 
Saída: 
 
9 x (n x 1) ‐ vector aproximação da solução de Ax=b  
 
 
No caso de ser definido outro critério de paragem, por exemplo, o critério pela norma 
do  resíduo,  é  preciso  introduzir  alterações  no  código  destas  rotinas,  substituindo  a 
validação do critério implementado (tolerância absoluta ou relativa)  
  errox=norm(x'-xa,inf);
errorelx=errox/norm(x,inf);
  if (errox < delta) | (errorelx < delta)
disp(' ');
  disp('Gauss-Seidel converge com a tolerância desejada');
  break;
end
 
pelo critério da norma do vector resíduo 
  if (norm(b-A*x',inf) < delta)
  disp(' ');
disp('Gauss-Seidel converge com a tolerância desejada');
  break;
end
 
 
Resolução do exemplo utilizando as rotinas jacobi.m e gseid.m  
 
  format long;
A=[5 2 2; 1 3 1; 2 3 6]
  b=[15 10 26]'
  X0=[0 0 0]' % solução inicial
delta = 0 % evita que pare pelo critério da tolerância absoluta
  %e/ou relativa a não ser que encontre a solução exacta
  maxit = 3 % número máximo de iterações
 
xJ =jacobi(A,b,X0, delta, maxit)
  xGS =gseid(A,b,X0, delta, maxit)
 
norm_rJ=norm(b-A*xJ,inf) % norma infinito do vector resíduo
norm_rGS=norm(b-A*xGS,inf)

Gladys Castillo, 2010 
15

Resolução do exemplo utilizando os comandos do MatLab para resolver os métodos de 
Jacobi e Gauss‐Seidel pela forma matricial  
 
  format short;
  % Dados de entrada
  A=[5 2 2; 1 3 1; 2 3 6]
b=[15 10 26]'
  x0=[0 0 0]' % solução inicial
 
% Metodo de Jacobi
 
  D=diag(diag(A)) % matriz com elementos da diagonal de A
C =A-D % A= D + L + U -> C = L + U = A - D
 
  Gj=-inv(D) * C % matriz de iteração de Jacobi
cj= inv(D) * b
 
  x1 = Gj * x0 + cj
x2 = Gj * x1 + cj
  x3 = Gj * x2 + cj
 
display (['Após k=', num2str(maxit),' iterações a solução
  aproximada pelo método de Jacobi é'])
  x=x3

  % Metodo de Gauss-Seidel
  L =[0 0 0; 1 0 0; 2 3 0]
  U =[0 2 2; 0 0 1; 0 0 0]
  C = inv(D+L) % C é a inversa de (D+L)
  Ggs= - C * U % matriz de iteração de Gauss-Seidel
cgs= C * b
 
  x1 = Ggs * x0 + cgs
x2 = Ggs * x1 + cgs
  x3 = Ggs * x2 + cgs
 
display (['Após k=', num2str(maxit),' iterações a solução
  aproximada pelo método de Gauss-Seidel é'])
  x=x3
  disp('Norma do resíduo Jacobi');
 
norm_rJ=norm(b-A*xJ,inf)
 
  disp('Norma do resíduo Gauss-Seidel');
  norm_rGS=norm(b-A*xGS,inf)

 
 
 
 
 
 
 
 
 
 
 
 
 

Gladys Castillo, 2010 
16

 
Propostas de exercícios.  
 
1. Resolver o sistema 
 
⎧10 x1 + x 2 − x3 = 10

⎨ x1 + 10 x 2 + x3 = 12  
⎪ 2 x − x + 10 x = 11
⎩ 1 2 3

 
pelo método de Jacobi na forma algébrica com  0  0  0   e tolerância absoluta  10 . 
Calcule a norma de máximo do vector resíduo associado à aproximação encontrada.  
 
2. Dado o sistema 
 
⎧10 x1 + x2 + x3 = 10

⎨ x1 + 10 x2 + 8 x3 = 20
⎪ 7 x + x + 10 x = 20
⎩ 1 2 3

a) Verificar  a  convergência  do  método  de  Jacobi    utilizando  a  condição  suficiente  nº  2  (CS2) 
baseada no cálculo da norma da matriz de iteração G. 
b) Partindo  da  aproximação  inicial  0  0  0 ,  calcule  uma  aproximação   
      da  solução  do  sistema  dado    utilizando  o  método  de  Jacobi  na  forma 
matricial. 
 
3. Dado o sistema 
 
⎧4 x1 + 2 x 2 + 6 x3 = 1

⎨4 x1 − x 2 + 3x3 = 2
⎪ - x + 5 x + 3x =3
⎩ 1 2 3

 
a)  Reescreva  o  sistema3  para  poder  garantir  que  os  métodos  de  Jacobi  e  Gauss‐Seidel 
convergem para a solução exacta do sistema Ax = b. 
b)  Partindo  da  aproximação  inicial  40.9   31.2  37.5   calcule  uma  aproximação    da 
solução  do  sistema  dado    utilizando  o  método  de  Gauss‐Seidel  na  forma  algébrica  com 
tolerância absoluta  10  
 
 
 
 

3
 A matriz A  é quase diagonal dominante por linhas se se verificar que  | aii |≥ ∑a
j ≠i
ij , ∀i  . Neste caso os métodos 
de Jacobi e Gauss‐Seidel  convergem para a solução exacta mas a convergência é mais lenta 
   

Gladys Castillo, 2010 
17

 
 
 
4. Dado o sistema 
 
⎧5 x1 + 2 x 2 + x3 = 7

⎨- x1 + 4 x 2 + 2 x3 = 3
⎪2 x − 3 x + 10 x = −1
⎩ 1 2 3
 
 
a) Verifique a convergência dos métodos de Jacobi e Gauss‐Seidel. 
b) Partindo  da  aproximação  inicial  1.2 1.2  0.2  aplique  o  métodos  de  Gauss‐Seidel 
utilizando  a  forma  algébrica  por  forma  a  determinar    uma  solução  aproximada  cujo  vector 
resíduo associado tenha norma de máximo inferior a 10‐2 . 
 
5.  Dado o sistema 
 
⎧4 x1 + x 2 + x3 = 6

⎨ x1 + 6 x 2 + x3 = 8
⎪2 x + x + 8 x = 11
⎩ 1 2 3
 
 
a) Verifique a convergência do métodos de Jacobi utilizando a condição necessária e suficiente 
(CNS nº 3) baseada no cálculo do raio espectral da matriz G de iteração. 
b) Resolva  pelo  método  de  Jacobi  (3  iterações)  a  partir  da  aproximação  inicial 
2.4, 5, 0.3 . 
 
6.  O sistema linear  
 
1      1    2 1
2    3    2 1  
1     2    1 1
 
pode ser resolvido pelo método iterativo 
      
⎧ x1( k ) = 1 − x 2( k −1) − 2 x3( k −1)

⎪ (k ) 1 2 (k ) 2
  ⎨ x 2 = - + x1 + x3( k −1) , k = 1,2 ,3, ...
⎪ 3 3 3
⎪⎩ x3 = 1 − x1 − 2 x 2( k )
(k ) (k )

 
a) De que método iterativo se trata? Justifique. 
b) Partindo  de  0  0  0 ,  use  o  método  iterativo  considerado  para  calcular  uma 
aproximação         da solução do sistema dado. 
 
Soluções: 
 
1.  1.0000  1.0001   0.9999 ;  .91 10 ;  2.  GJ 0.9 1;  0.86 1.06  1.55 ;  3  b) 
41.1080  31.4286    37.7149 ;  4.  0.9995  0.9991   0.0002 ;  .46 10 ;  5.a)  ℘(GJ)    = 
0.4045 <1;  0.9500 1.0229  1.0547 ; 6. a) Gauss‐Seidel (em cada iteração   são utilizados todos os valores já 
calculados na presente aproximação  … ler mais na pag 11); b)  2.0000   0.5556  2.1111  

Gladys Castillo, 2010 

Você também pode gostar