ms211 - cálculo numéricovalle/teaching/ms211/aula08.pdf · a fatoração lu demorou mais que os...

29
MS211 - Cálculo Numérico Aula 8 – Convergência dos Métodos de Jacobi e Gauss-Seidel, Introdução ao MATLAB e GNU Octave. Marcos Eduardo Valle

Upload: ngodiep

Post on 09-Dec-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

MS211 - Cálculo NuméricoAula 8 – Convergência dos Métodos de Jacobi e Gauss-Seidel,

Introdução ao MATLAB e GNU Octave.

Marcos Eduardo Valle

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 ∈ Rn×n é uma matriz não-singular (e supostamenteesparsa).

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

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

Método de Jacobi

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

Entrada: Matriz A ∈ Rn×n; vetor b ∈ 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 = diag(a11,a22, . . . ,ann) e M = A− D.enquanto k ≤ kmax e Dr > τ faça

Atualize: k = k + 1.Resolva: Dx = b−Mx0 (ou seja, x = D\(b−Mx0)).

Calcule: Dr =‖x− x0‖∞‖x‖∞

.

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

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

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

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

10-4

10-3

10-2

10-1

100

2 4 6 8 10 12 14 16 18

Diferenca Relativa

Iteracoes

Metodo de Jacobi

Método de Gauss-Seidel

Entrada: Matriz A ∈ Rn×n; vetor b ∈ 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

e U =

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

.... . .

...0 0 . . . 0

.

enquanto k ≤ kmax e Dr > τ façaAtualize: k = k + 1.Resolva: Lx = b− Ux0 (ou seja, x = L\(b− Ux0)).

Calcule: Dr =‖x− x0‖∞‖x‖∞

.

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

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

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

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

10-4

10-3

10-2

10-1

100

2 4 6 8 10

Diferenca Relativa

Iteracoes

Metodo de Gauss-Seidel

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 docódigo no arquivo MetodoGaussSeidel.m, que está baseadonuma formulação matricial, com uma outra implementação dométodo de Gauss-Seidel sem utilizar a formulação matricial.

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

Dada uma aproximação inicial x(0) para a solução do sistemaAx = b, o método de Gauss-Seidel define {x(k)}k≥0 através daseguinte relação de recorrência para k = 0,1, . . .:

x (k+1)1 =

(b1 − (a12x (k)

2 + . . .+ a1nx (k)n ))/a11,

x (k+1)2 =

(b2 − (a21x (k+1)

1 + . . .+ a2nx (k)n ))/a22,

......

......

x (k+1)n =

(bn − (an1x (k+1)

1 + . . .+ an,n−1x (k+1)n−1 )

)/ann,

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

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

Matriz Esparsa AleatóriaConsidere o sistema linear Ax = b, em que A ∈ R100×100 é tal quePr{aij = 0} = 0.99 com aij = 1 exceto aii = 1 +

∑nj=1 aij .

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

O gráfico abaixo mostra o tempo de execução e o erro relativodos mé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

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 produziu a solução numérica commenor erro e menor tempo de execução.

• A implementação Gauss-Seidel que não está baseado numaformulação matricial requer um tempo muito mair de execução.

Os métodos de Jacobi e Gauss-Seidel não convergem semprepara a 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 deGauss-Seidel, com x(0) = [0,0]T , corresponde à sequência depontos vermelhos mostrados na figura abaixo:

-1000

0

1000

2000

3000

4000

-5000 -4000 -3000 -2000 -1000 0

Convergência dos Métodos IterativosAmbos os métodos de Jacobi e Gauss-Seidel podem ser escritosna forma matricial como

x(k+1) = Cx(k) + g, para k = 0,1, . . . ,

em que x∗ = Cx∗ + g se, e somente se, Ax∗ = b.

No método de Jacobi, temos:

x(k+1) = D−1(b−Mx(k)) = −D−1M︸ ︷︷ ︸C

x(k) + D−1b︸ ︷︷ ︸g

.

No método de Gauss-Seidel, temos:

x(k+1) = L−1(b− Ux(k)) = −L−1U︸ ︷︷ ︸C

x(k) + L−1b︸ ︷︷ ︸g

.

A diferença entre duas iterações consecutivas do métodox(k+1) = Cx(k) + g, k ≥ 1, satisfaz

x(k+1) − x(k) =(

Cx(k) + g)−(

Cx(k−1) + g)= C

(x(k) − x(k−1)).

Considerando uma norma matricial subordinada, temos que

‖x(k+1) − x(k)‖ ≤ ‖C‖‖x(k) − x(k−1)‖, ∀k = 1, . . . .

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

‖x(k+1) − x(k)‖ ≤ ‖C‖k‖x(1) − x(0)‖, ∀k = 1, . . . .

Portanto, se ‖C‖ < 1, então ‖x(k+1) − x(k)‖ → 0, ou seja, ométodo iterativo converge!

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

x(k+1) = Cx(k) + g, k ≥ 0,

independentemente da aproximação inicial x(0).

Teorema 1 (Critério de Convergência)

A sequência

x(k+1) = Cx(k) + g, ∀k = 0,1, . . . ,

converge para x∗ = Cx∗ + g se ‖C‖ < 1, em que ‖ · ‖ denota umanorma matricial subordinada.

No método de Jacobi, temos

C =

0 a12

a11. . . a1n

a11a21a11

0 . . . a2na22

......

. . ....

an1ann

an2ann

. . . 0

.Considerando a norma subordinada ‖ · ‖∞, temos

‖C‖∞ < 1 ⇐⇒ maxi=1:n

∑j 6=i

∣∣∣∣aij

aii

∣∣∣∣ < 1

⇐⇒∑j 6=i

∣∣∣∣aij

aii

∣∣∣∣ < 1, ∀i = 1, . . . ,n

⇐⇒∑j 6=i

|aij | < |aii |, ∀i = 1, . . . ,n.

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

Critério das Linhas

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

Teorema 2 (Critério das Linhas)

Considere o sistema linear Ax = b. Se a matriz A édiagonalmente estritamente dominante, ou seja,

αi =1|aii |

∑j 6=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 x(0).

Critério de Sassenfeld

Analogamente, considerando a norma matricial subordinada‖ · ‖∞ e a matriz C = −L−1U, encontramos a a seguinte condiçãosuficiente para a convergência do método de Gauss-Seidel:

Teorema 3 (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 {x(k)} queconverge para a solução do sistema linear independentemente daaproximação inicial x(0).

Exemplo 4

Verifique se o critério das linhas é válido para o sistema linear3x1 +x3 = 3

x1 −x2 = 13x1 +x2 2x3 = 9

Exemplo 4

Verifique se o critério das linhas é válido para o sistema linear3x1 +x3 = 3

x1 −x2 = 13x1 +x2 2x3 = 9

Resposta: No critério das linhas, determinamos

α1 =1|a11|

(|a12|+ |a13|) =13(0 + 1) =

13< 1, X

α2 =1|a22|

(|a21|+ |a23|) =11(1 + 0) = 1 6< 1.

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

Exemplo 5

Verifique se o critério de Sassenfeld é válido para o sistema linear3x1 +x3 = 3

x1 −x2 = 13x1 +x2 2x3 = 9

Exemplo 5

Verifique se o critério de Sassenfeld é válido para o sistema linear3x1 +x3 = 3

x1 −x2 = 13x1 +x2 2x3 = 9

Resposta: No critério de Sassenfeld, determinamos

β1 =1|a11|

(|a12|+ |a13|) =13(0 + 1) =

13< 1, X

β2 =1|a22|

(|a21|β1 + |a23|) =11(1

13+ 0) =

13< 1, X

β3 =1|a33|

(|a31|β1 + |a32|β2) =12(3

13+ 1

13) =

23< 1, X

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

Considerações FinaisNa aula de hoje implementamos os métodos iterativos de Jacobie Gauss-Seidel no GNU Octave e MATLAB. Destacamos que,nesses dois softwares, devemos priorizar uma formulaçãomatricial do método.

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

Observe que o critério apresentado é uma condição suficiente,mas não necessária, para a convergência. Em outras palavras, ométodo converge se o critério for satisfeito. Nada podemos dizersobre a convergência se o critério não for satisfeito.

Muito grato pela atenção!