MS211 - Cálculo Numérico

27
MS211 - Cálculo Numérico Aula 8 – Convergência e Implementação Computacional dos Métodos de Jacobi e Gauss-Seidel. Marcos Eduardo Valle Matemática Aplicada IMECC - Unicamp Marcos Eduardo Valle MS211 - Cálculo Numérico 1 / 27

Transcript of MS211 - Cálculo Numérico

Page 1: MS211 - Cálculo Numérico

MS211 - Cálculo NuméricoAula 8 – Convergência e Implementação Computacional dos

Métodos de Jacobi e Gauss-Seidel.

Marcos Eduardo ValleMatemática Aplicada

IMECC - Unicamp

Marcos Eduardo Valle MS211 - Cálculo Numérico 1 / 27

Page 2: MS211 - Cálculo Numérico

Introdução

Na aula anterior, apresentamos os métodos iterativos de Jacobi eGauss-Seidel para a solução de um sistema linear

Ax “ b,

em que A P Rnˆn é uma matriz não-singular (supostamenteesparsa) tal que aii ‰ 0 para todo i “ 1, . . . ,n.

Na aula de hoje comentaremos sobre a implementação dessesmétodos nos softwares MATLAB e GNU Octave.

Na aula de hoje também discutiremos a convergência dessesmétodos.

Marcos Eduardo Valle MS211 - Cálculo Numérico 2 / 27

Page 3: MS211 - Cálculo Numérico

Método de Jacobi

O método de Jacobi pode ser implementado no MATLAB ou GNUOctave usando o seguinte algoritmo:

Entrada: Matriz A P Rnˆn; vetor b P Rn; aproximação inicial x0.Dados: Número máximo de interações kmax e tolerância τ ą 0.Inicialize: k “ 0 e defina Dr “ τ ` 1.Defina: D “ diagpa11,a22, . . . ,annq e M “ A´ D.enquanto k ď kmax e Dr ą τ faça

Atualize: k “ k ` 1.Resolva: Dx “ b´Mx0 (ou seja, x “ Dzpb´Mx0q).

Calcule: Dr “}x´ x0}8

}x}8.

Atualize: x0 “ x.fimSaída: Aproximação para a solução x.

Marcos Eduardo Valle MS211 - Cálculo Numérico 3 / 27

Page 4: MS211 - Cálculo Numérico

Simplificadamente, no MATLAB ou no GNU Octave, criamos umarquivo MetodoJacobi.m contendo:

function [x,Dr]=MetodoJacobi(A,b,x0,kmax,tau);

D = diag(diag(A));M = A-D;k = 1; Dr(k) = tau+1;while (k<=kmax)&(Dr(k)>tau)k = k+1;x = D\(b-M*x0);Dr(k) = norm(x-x0,inf)/norm(x,inf);x0 = x;

end

Uma implementação mais rica em detalhes pode ser obtida pelolink: MetodoJacobi.m

Marcos Eduardo Valle MS211 - Cálculo Numérico 4 / 27

Page 5: MS211 - Cálculo Numérico

Para executar o método de Jacobi, digite no prompt:» x=MetodoJacobi(A,b,x0,kmax,tau)

Por exemplo, digite no prompt:

>> A=[2 1;3 4]; b=[1;-1];>> x0=[0;0]; kmax=100; tau=1.e-4;>> [x,Dr]=MetodoJacobi(A,b,x0,kmax,tau);>> xx =

0.99993-0.99989

>> semilogy(Dr);>> xlabel(’Iteracoes’); ylabel(’Diferença Relativa’);>> title(’Metodo de Jacobi’);>> grid; axis([1, length(Dr), min(Dr), max(Dr)]);

Marcos Eduardo Valle MS211 - Cálculo Numérico 5 / 27

Page 6: MS211 - Cálculo Numérico

10-4

10-3

10-2

10-1

100

2 4 6 8 10 12 14 16 18

Diferenca Relativa

Iteracoes

Metodo de Jacobi

Marcos Eduardo Valle MS211 - Cálculo Numérico 6 / 27

Page 7: MS211 - Cálculo Numérico

Método de Gauss-Seidel

Entrada: Matriz A P Rnˆn; vetor b P Rn; chute inicial x0.Dados: Número máximo de interações kmax e tolerância τ ą 0.Inicialize: k “ 0 e Dr “ τ ` 1.

Defina: L “

»

a11 0 . . . 0a21 a22 . . . 0...

.... . .

...an1 an2 . . . ann

fi

ffi

ffi

ffi

fl

e U “

»

0 a12 . . . a1n0 0 . . . a2n...

.... . .

...0 0 . . . 0

fi

ffi

ffi

ffi

fl

.

enquanto k ď kmax e Dr ą τ façaAtualize: k “ k ` 1.Resolva: Lx “ b´ Ux0 (ou seja, x “ Lzpb´ Ux0q).

Calcule: Dr “}x´ x0}8

}x}8.

Atualize: x0 “ x.fimSaída: Aproximação para a solução x.

Marcos Eduardo Valle MS211 - Cálculo Numérico 7 / 27

Page 8: MS211 - Cálculo Numérico

Simplificadamente, no MATLAB ou no GNU Octave, criamos umarquivo MetodoGaussSeidel.m contendo:

function [x,Dr]=MetodoGaussSeidel(A,b,x0,kmax,tau);

L = tril(A);U = A-L;k = 1; Dr(k) = tau+1;while (k<=kmax)&(Dr(k)>tau)k = k+1;x = L\(b-U*x0);Dr(k) = norm(x-x0,inf)/norm(x,inf);x0 = x;

end

Uma implementação mais rica em detalhes pode ser obtida pelolink: MetodoGaussSeidel.m

Marcos Eduardo Valle MS211 - Cálculo Numérico 8 / 27

Page 9: MS211 - Cálculo Numérico

Para executar o método de Gauss-Seidel, digite no prompt:» x=MetodoGaussSeidel(A,b,x0,kmax,tau)

Por exemplo, digite no prompt:

>> A=[2 1;3 4]; b=[1;-1];>> x0=[0;0]; kmax=100; tau=1.e-4;>> [x,Dr]=MetodoGaussSeidel(A,b,x0,kmax,tau);>> xx =

0.99997-0.99998

>> semilogy(Dr);>> xlabel(’Iteracoes’); ylabel(’Diferença Relativa’);>> title(’Metodo de Gauss-Seidel’);>> grid; axis([1, length(Dr), min(Dr), max(Dr)]);

Marcos Eduardo Valle MS211 - Cálculo Numérico 9 / 27

Page 10: MS211 - Cálculo Numérico

10-4

10-3

10-2

10-1

100

2 4 6 8 10

Diferenca Relativa

Iteracoes

Metodo de Gauss-Seidel

Marcos Eduardo Valle MS211 - Cálculo Numérico 10 / 27

Page 11: MS211 - Cálculo Numérico

Observações sobre GNU Octave e MATLAB

O nome MATLAB é derivado do termo MATrix LABoratory.

Essencialmente, tudo é matriz para o MATLAB e GNU Octave !

Nesse sentido, prefira sempre operações com matrizes e tenteformular seus algoritmos utilizando álgebra matricial.

Vamos ilustrar essa sentença considerando o método deGauss-Seidel.

Especificamente, vamos comparar o tempo de execução do códigono arquivo MetodoGaussSeidel.m, que está baseado numaformulação matricial, com uma outra implementação do método deGauss-Seidel sem utilizar a formulação matricial.

Marcos Eduardo Valle MS211 - Cálculo Numérico 11 / 27

Page 12: MS211 - Cálculo Numérico

Método de Gauss-Seidel

Na aula anterior, apresentamos o método de Gauss-Seidel daseguinte forma:

Dada uma aproximação inicial xp0q para a solução do sistemaAx “ b, o método de Gauss-Seidel define txpkqukě0 através daseguinte relação de recorrência para k “ 0,1, . . .:

$

&

%

x pk`1q1 “

´

b1 ´ pa12x pkq2 ` . . .` a1nx pkqn q

¯

{a11,

x pk`1q2 “

´

b2 ´ pa21x pk`1q1 ` . . .` a2nx pkqn q

¯

{a22,

......

......

x pk`1qn “

´

bn ´ pan1x pk`1q1 ` . . .` an,n´1x pk`1q

n´1 q

¯

{ann,

Baseado nessas equações, podemos conceber o seguinte códigoque não usa a formulação matricial.

Marcos Eduardo Valle MS211 - Cálculo Numérico 12 / 27

Page 13: MS211 - Cálculo Numérico

function [x,Dr]=MetodoGaussSeidel2(A,b,x0,kmax,tau);

k = 1; Dr(k) = tau+1;while (k<=kmax)&(Dr(k)>tau)k = k+1;x = x0;for i=1:size(A,1) % size(A,1) = # linhas de A.x(i) = b(i)/A(i,i);for j=1:i-1x(i)=x(i)-(A(i,j)*x(j))/A(i,i);

endfor j=i+1:size(A,1)x(i)=x(i)-(A(i,j)*x(j))/A(i,i);

endendDr(k) = norm(x-x0,inf)/norm(x,inf);

end

Marcos Eduardo Valle MS211 - Cálculo Numérico 13 / 27

Page 14: MS211 - Cálculo Numérico

Matriz Esparsa Aleatória

Considere o sistema linear Ax “ b, em que A P R100ˆ100 é tal quePrtaij “ 0u “ 0.99 com aij “ 1 exceto aii “ 1`

řnj“1 aij .

O vetor b é escolhido de modo que as componentes xi da solução xtem distribuição normal padrão.

Marcos Eduardo Valle MS211 - Cálculo Numérico 14 / 27

Page 15: MS211 - Cálculo Numérico

O gráfico abaixo mostra o tempo de execução e o erro relativo dosmétodos numéricos:

10-6

10-5

10-4

10-3

10-2

10-1

100

101

102

103

Fat. LU Jacobi Gauss-Seidel Gauss-Seidel2

Tempo Exec.

Erro Relativo

Marcos Eduardo Valle MS211 - Cálculo Numérico 15 / 27

Page 16: MS211 - Cálculo Numérico

Note que:‚ A fatoração LU demorou mais que os métodos iterativos de

Jacobi e Gauss-Seidel. Além disso, o erro relativo da fatoraçãoLU foi significativamente grande.

‚ O método de Gauss-Seidel, baseado na formulação matricial,produziu a solução numérica com menor erro e menor tempo deexecução.

‚ A implementação Gauss-Seidel que não está baseado numaformulação matricial requer um tempo muito maior de execução,superando a fatoração LU.

Marcos Eduardo Valle MS211 - Cálculo Numérico 16 / 27

Page 17: MS211 - Cálculo Numérico

Os métodos de Jacobi e Gauss-Seidel não convergem sempre paraa solução do sistema Ax “ b.

Exemplo 1

Ambos os métodos divergem quando aplicados para resolver osistema linear Ax “ b em que

A “„

1 23 4

.

Com efeito, as 20 primeiras iterações do método de Gauss-Seidel,com xp0q “ r0,0sT , corresponde à sequência de pontos vermelhosmostrados na figura abaixo:

-1000

0

1000

2000

3000

4000

-5000 -4000 -3000 -2000 -1000 0

Marcos Eduardo Valle MS211 - Cálculo Numérico 17 / 27

Page 18: MS211 - Cálculo Numérico

Convergência dos Métodos Iterativos

Ambos os métodos de Jacobi e Gauss-Seidel podem ser escritos naforma matricial como

xpk`1q “ Cxpkq ` g, para k “ 0,1, . . . ,

em que x˚ “ Cx˚ ` g se, e somente se, Ax˚ “ b.

No método de Jacobi, temos:

xpk`1q “ D´1pb´Mxpkqq “ ´D´1Mlooomooon

C

xpkq ` D´1bloomoon

g

.

No método de Gauss-Seidel, temos:

xpk`1q “ L´1pb´ Uxpkqq “ ´L´1Uloomoon

C

xpkq ` L´1bloomoon

g

.

Marcos Eduardo Valle MS211 - Cálculo Numérico 18 / 27

Page 19: MS211 - Cálculo Numérico

A diferença entre duas iterações consecutivas do métodoxpk`1q “ Cxpkq ` g, k ě 1, satisfaz

xpk`1q ´ xpkq “´

Cxpkq ` g¯

´

´

Cxpk´1q ` g¯

“ C`

xpkq ´ xpk´1q˘.

Considerando uma norma matricial subordinada, temos que

}xpk`1q ´ xpkq} ď }C}}xpkq ´ xpk´1q}, @k “ 1, . . . .

Aplicando k -vezes a inequação, concluímos que

}xpk`1q ´ xpkq} ď }C}k}xp1q ´ xp0q}, @k “ 1, . . . .

Portanto, se }C} ă 1, então }xpk`1q ´ xpkq} Ñ 0, ou seja, o métodoiterativo converge!

Marcos Eduardo Valle MS211 - Cálculo Numérico 19 / 27

Page 20: MS211 - Cálculo Numérico

Critério de Convergência

Concluindo, o seguinte teorema estabelece um critério deconvergência para os métodos iterativos (incluindo Jacobi eGauss-Seidel) definidos pela equação

xpk`1q “ Cxpkq ` g, k ě 0,

independentemente da aproximação inicial xp0q.

Teorema 2 (Critério de Convergência)

A sequência

xpk`1q “ Cxpkq ` g, @k “ 0,1, . . . ,

converge para x˚ “ Cx˚ ` g se }C} ă 1, em que } ¨ } denota umanorma matricial subordinada.

Marcos Eduardo Valle MS211 - Cálculo Numérico 20 / 27

Page 21: MS211 - Cálculo Numérico

No método de Jacobi, temos

C “

»

0 a12a11

. . . a1na11a21

a110 . . . a2n

a22...

.... . .

...an1ann

an2ann

. . . 0

fi

ffi

ffi

ffi

fl

.

Considerando a norma subordinada } ¨ }8, temos

}C}8 ă 1 ðñ maxi“1:n

ÿ

j‰i

ˇ

ˇ

ˇ

ˇ

aij

aii

ˇ

ˇ

ˇ

ˇ

ă 1

ðñÿ

j‰i

ˇ

ˇ

ˇ

ˇ

aij

aii

ˇ

ˇ

ˇ

ˇ

ă 1, @i “ 1, . . . ,n

ðñÿ

j‰i

|aij | ă |aii |, @i “ 1, . . . ,n.

Em palavras, o método de Jacobi converge se a matriz A édiagonalmente estritamente dominante.

Marcos Eduardo Valle MS211 - Cálculo Numérico 21 / 27

Page 22: MS211 - Cálculo Numérico

Definição 3 (Matriz com Diagonal Estritamente Dominante)

Dizemos que A P Rnˆn é uma matriz diagonalmente estritamentedominante se

|aii | ąÿ

j‰i

|aij |, @i “ 1, . . . ,n.

Exemplo 4

Determine quais matrizes são diagonalmente estritamentedominante:

A “

«

2 ´1 0´1 2 ´10 ´1 2

ff

, B “

«

7 2 03 5 ´10 5 ´6

ff

e C “

«

6 4 ´34 ´2 0´3 0 1

ff

.

Resposta: Somente B é diagonalmente estritamente dominante.

Marcos Eduardo Valle MS211 - Cálculo Numérico 22 / 27

Page 23: MS211 - Cálculo Numérico

Critério das Linhas

Pode-se mostrar que, se A é diagonalmente estritamentedominante, então o método de Gauss-Seidel também converge.

Teorema 5 (Critério das Linhas)

Considere o sistema linear Ax “ b. Se a matriz A é diagonalmenteestritamente dominante, ou seja,

αi “1|aii |

¨

˝

ÿ

j‰i

|aij |

˛

‚ă 1, @i “ 1, . . . ,n,

então ambos os métodos de Jacobi e Gauss-Seidel geram umasequência que converge para a solução do sistema linearindependentemente da aproximação inicial xp0q.

Marcos Eduardo Valle MS211 - Cálculo Numérico 23 / 27

Page 24: MS211 - Cálculo Numérico

Critério de Sassenfeld

Analogamente, considerando a norma matricial subordinada } ¨ }8 ea matriz C “ ´L´1U, encontramos a seguinte condição suficientepara a convergência do método de Gauss-Seidel:

Teorema 6 (Critério de Sassenfeld)

Considere o sistema linear Ax “ b. Se

βi “1|aii |

¨

˝

i´1ÿ

j“1

|aij |βj `

nÿ

j“i`1

|aij |

˛

‚ă 1, @i “ 1, . . . ,n.

então o método de Gauss-Seidel gera uma sequência txpkqu queconverge para a solução do sistema linear independentemente daaproximação inicial xp0q.

Marcos Eduardo Valle MS211 - Cálculo Numérico 24 / 27

Page 25: MS211 - Cálculo Numérico

Exemplo 7

Verifique se o critério das linhas é válido para o sistema linear$

&

%

3x1 `x3 “ 3x1 ´x2 “ 1

3x1 `x2 2x3 “ 9

Resposta: No critério das linhas, determinamos

α1 “1|a11|

p|a12| ` |a13|q “13p0` 1q “

13ă 1, X

α2 “1|a22|

p|a21| ` |a23|q “11p1` 0q “ 1 ­ă 1.

Logo, o critério das linhas não vale para esse sistema linear!Os métodos de Jacobi e Gauss-Seidel podem ou não convergirnesse caso!

Marcos Eduardo Valle MS211 - Cálculo Numérico 25 / 27

Page 26: MS211 - Cálculo Numérico

Exemplo 8

Verifique se o critério de Sassenfeld é válido para o sistema linear$

&

%

3x1 `x3 “ 3x1 ´x2 “ 1

3x1 `x2 2x3 “ 9

Resposta: No critério de Sassenfeld, determinamos

β1 “1|a11|

p|a12| ` |a13|q “13p0` 1q “

13ă 1, X

β2 “1|a22|

p|a21|β1 ` |a23|q “11p1

13` 0q “

13ă 1, X

β3 “1|a33|

p|a31|β1 ` |a32|β2q “12p3

13` 1

13q “

23ă 1, X

Logo, o critério de Sassenfeld é satisfeito!O método de Gauss-Seidel certamente converge nesse caso.

Marcos Eduardo Valle MS211 - Cálculo Numérico 26 / 27

Page 27: MS211 - Cálculo Numérico

Considerações Finais

Na aula de hoje implementamos os métodos iterativos de Jacobi eGauss-Seidel no GNU Octave e MATLAB. Destacamos que, nessesdois softwares, devemos priorizar uma formulação matricial dométodo.

Na aula de hoje discutimos também critérios de convergência paraos métodos de Jacobi e Gauss-Seidel!

Observe que o critério apresentado é uma condição suficiente, masnão necessária, para a convergência. Em outras palavras, o métodoconverge se o critério for satisfeito. Nada podemos dizer sobre aconvergência se o critério não for satisfeito.

Muito grato pela atenção!

Marcos Eduardo Valle MS211 - Cálculo Numérico 27 / 27