• Nenhum resultado encontrado

Aula 8 (24/08/2017)- Convergência dos Métodos de Jacobi e Gauss-Seidel, Introdução ao MATLAB e GNU Octave.

N/A
N/A
Protected

Academic year: 2021

Share "Aula 8 (24/08/2017)- Convergência dos Métodos de Jacobi e Gauss-Seidel, Introdução ao MATLAB e GNU Octave."

Copied!
29
0
0

Texto

(1)

MS211 - Cálculo Numérico

Aula 8 – Convergência dos Métodos de Jacobi e Gauss-Seidel, Introdução ao MATLAB e GNU Octave.

(2)

Introdução

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

Ax = b,

em queA ∈ Rn×n é uma matriz não-singular (e supostamente

esparsa).

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

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

(3)

Método de Jacobi

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

Entrada: Matriz A ∈ Rn×n; vetorb ∈ Rn; aproximação inicialx0.

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)eM = 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 = kx − x0k∞ kxk∞ . Atualize:x0=x. fim

(4)

Simplificadamente, no MATLAB ou no GNU Octave, criamos um arquivo 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 pelo link:MetodoJacobi.m

(5)

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); >> x x = 0.99993 -0.99989 >> semilogy(Dr);

>> xlabel(’Iteracoes’); ylabel(’Diferença Relativa’); >> title(’Metodo de Jacobi’);

(6)

10-4 10-3 10-2 10-1 100 2 4 6 8 10 12 14 16 18 Diferenca Relativa Iteracoes Metodo de Jacobi

(7)

Método de Gauss-Seidel

Entrada: Matriz A ∈ Rn×n; vetorb ∈ Rn; chute inicialx 0.

Dados: Número máximo de interações kmax e tolerância τ > 0.

Inicialize: k = 0 e Dr = τ +1. Defina:L =      a11 0 . . . 0 a21 a22 . . . 0 .. . ... . .. ... an1 an2 . . . ann      eU =      0 a12 . . . a1n 0 0 . . . a2n .. . ... . .. ... 0 0 . . . 0      .

enquanto k ≤ kmax e Dr > τ faça

Atualize: k = k + 1.

Resolva: Lx = b − Ux0 (ou seja,x = L\(b − Ux0)). Calcule: Dr = kx − x0k∞ kxk∞ . Atualize:x0=x. fim

(8)

Simplificadamente, no MATLAB ou no GNU Octave, criamos um arquivo 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 pelo link:MetodoGaussSeidel.m

(9)

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); >> x x = 0.99997 -0.99998 >> semilogy(Dr);

>> xlabel(’Iteracoes’); ylabel(’Diferença Relativa’); >> title(’Metodo de Gauss-Seidel’);

(10)

10-4 10-3 10-2 10-1 100 2 4 6 8 10 Diferenca Relativa Iteracoes Metodo de Gauss-Seidel

(11)

Observações sobre GNU Octave e MATLAB

O nome MATLAB é derivado do termoMATrix LABoratory.

Essencialmente, tudo é matriz para o MATLAB e GNU Octave! Nesse sentido, prefira sempre operações com matrizes e tente formular seus algoritmos utilizando álgebra matricial.

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

Especificamente, vamos comparar o tempo de execução do código no arquivoMetodoGaussSeidel.m, que está baseado numa formulação matricial, com uma outra implementação do método de Gauss-Seidel sem utilizar a formulação matricial.

(12)

Método de Gauss-Seidel

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

Dada uma aproximação inicialx(0)para a solução do sistema

Ax = b, o método de Gauss-Seidel define {x(k )}

k ≥0através da

seguinte relação de recorrência para k = 0, 1, . . .:                x1(k +1)=  b1− (a12x2(k )+ . . . +a1nxn(k ))  /a11, x2(k +1)=b2− (a21x (k +1) 1 + . . . +a2nx (k ) n )  /a22, .. . ... ... ... xn(k +1)=  bn− (an1x1(k +1)+ . . . +an,n−1xn−1(k +1))  /ann,

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

(13)

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-1 x(i)=x(i)-(A(i,j)*x(j))/A(i,i); end for j=i+1:size(A,1) x(i)=x(i)-(A(i,j)*x(j))/A(i,i); end end Dr(k) = norm(x-x0,inf)/norm(x,inf); end

(14)

Matriz Esparsa Aleatória

Considere o sistema linearAx = b, em que A ∈ R100×100é tal que Pr {aij =0} = 0.99 com aij =1 exceto aii =1 +

Pn

j=1aij.

O vetorb é escolhido de modo que as componentes xi da solução

(15)

O gráfico abaixo mostra o tempo de execução e o erro relativo dos 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.

(16)

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ção LU foi significativamente grande.

• O método de Gauss-Seidel produziu a solução numérica com menor erro e menor tempo de execução.

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

(17)

Os métodos de Jacobi e Gauss-Seidel não convergem sempre para a solução do sistemaAx = b.

Exemplo 1

Ambos os métodos divergem quando aplicados para resolver o sistema linearAx = b em que

A =1 2

3 4 

(18)

Com efeito, as 20 primeiras iterações do método de

Gauss-Seidel, comx(0)= [0, 0]T, corresponde à sequência de

pontos vermelhos mostrados na figura abaixo:

-1000 0 1000 2000 3000 4000 -5000 -4000 -3000 -2000 -1000 0

(19)

Convergência dos Métodos Iterativos

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

x(k +1)=Cx(k )+g, para k = 0, 1, . . . , em quex∗ =Cx∗+g se, e somente se, Ax∗ =b.

No método de Jacobi, temos:

x(k +1)=D−1(b − Mx(k )) = −D−1M | {z } C x(k )+D−1b | {z } g .

No método de Gauss-Seidel, temos:

x(k +1)=L−1(b − Ux(k )) = −L−1U | {z } C x(k )+L−1b | {z } g .

(20)

A diferença entre duas iterações consecutivas do método

x(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 kx(k +1)− x(k )k ≤ kCkkx(k )− x(k −1)k, ∀k = 1, . . . .

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

kx(k +1)− x(k )k ≤ kCkkkx(1)− x(0)k, ∀k = 1, . . . .

Portanto, se kCk < 1, então kx(k +1)− x(k )k → 0, ou seja, o método iterativo converge!

(21)

Critério de Convergência

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

x(k +1)=Cx(k )+g, k ≥ 0, independentemente da aproximação inicialx(0).

Teorema 1 (Critério de Convergência)

A sequência

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

converge parax∗ =Cx∗+g se kCk < 1, em que k · k denota uma

(22)

No método de Jacobi, temos C =      0 a12 a11 . . . a1n a11 a21 a11 0 . . . a2n a22 .. . ... . .. ... an1 ann an2 ann . . . 0      .

Considerando a norma subordinada k · k∞, temos

kCk∞<1 ⇐⇒ max i=1:n X j6=i aij aii <1 ⇐⇒ X j6=i aij aii <1, ∀i = 1, . . . , n ⇐⇒ X j6=i |aij| < |aii|, ∀i = 1, . . . , n.

Em palavras, o método de Jacobi converge se a matrizA é

(23)

Critério das Linhas

Pode-se mostrar que, seA é diagonalmente estritamente

dominante, então o método de Gauss-Seidel também converge.

Teorema 2 (Critério das Linhas)

Considere o sistema linearAx = b. Se a matriz A é

diagonalmente estritamente dominante, ou seja,

αi = 1 |aii|   X j6=i |aij|  <1, ∀i = 1, . . . , n,

então ambos os métodos de Jacobi e Gauss-Seidel geram uma sequência que converge para a solução do sistema linear independentemente da aproximação inicialx(0).

(24)

Critério de Sassenfeld

Analogamente, considerando a norma matricial subordinada k · k∞e a matrizC = −L−1U, encontramos a a seguinte condição

suficiente para a convergência do método de Gauss-Seidel:

Teorema 3 (Critério de Sassenfeld)

Considere o sistema linearAx = b. Se

βi = 1 |aii|   i−1 X j=1 |aij|βj+ n X j=i+1 |aij|  <1, ∀i = 1, . . . , n.

então o método de Gauss-Seidel gera uma sequência {x(k )} que converge para a solução do sistema linear independentemente da aproximação inicialx(0).

(25)

Exemplo 4

Verifique se o critério das linhas é válido para o sistema linear    3x1 +x3 = 3 x1 −x2 = 1 3x1 +x2 2x3 = 9

(26)

Exemplo 4

Verifique se o critério das linhas é válido para o sistema linear    3x1 +x3 = 3 x1 −x2 = 1 3x1 +x2 2x3 = 9

Resposta: No critério das linhas, determinamos

α1= 1 |a11| (|a12| + |a13|) = 1 3(0 + 1) = 1 3 <1, X α2= 1 |a22| (|a21| + |a23|) = 1 1(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 convergir nesse caso!

(27)

Exemplo 5

Verifique se o critério de Sassenfeld é válido para o sistema linear    3x1 +x3 = 3 x1 −x2 = 1 3x1 +x2 2x3 = 9

(28)

Exemplo 5

Verifique se o critério de Sassenfeld é válido para o sistema linear    3x1 +x3 = 3 x1 −x2 = 1 3x1 +x2 2x3 = 9

Resposta: No critério de Sassenfeld, determinamos

β1= 1 |a11| (|a12| + |a13|) = 1 3(0 + 1) = 1 3 <1, X β2= 1 |a22| (|a21|β1+ |a23|) = 1 1(1 1 3 +0) = 1 3 <1, X β3= 1 |a33| (|a31|β1+ |a32|β2) = 1 2(3 1 3+1 1 3) = 2 3 <1, X

Logo, o critério de Sassenfeld é satisfeito!

(29)

Considerações Finais

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

Na aula de hoje discutimos também critérios de convergência para 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, o método converge se o critério for satisfeito. Nada podemos dizer sobre a convergência se o critério não for satisfeito.

Referências

Documentos relacionados

Taking into account the theoretical framework we have presented as relevant for understanding the organization, expression and social impact of these civic movements, grounded on

Variables most strongly associated with a low self-efficacy score were the following: higher level of pain; lower subjective sense of well-being; higher depression; not living

Descrição: Este é o processo pelo qual o cliente pode escolher a forma de pagamento do pacote de viagem e suas reservas (hotéis, passagens, guia turístico, passeios

No primeiro, destacam-se as percepções que as cuidadoras possuem sobre o hospital psiquiátrico e os cuidados com seus familiares durante o internamento; no segundo, evidencia-se

A maior diversidade de presas, encontrada na dieta das fêmeas adultas, pode estar relacionada com a necessidade de maior aporte energético para a reprodução em relação

Na fundamentação teórica são abordados os aspetos teóricos relativamente à vivência da prematuridade e da parentalidade pela família, as necessidades sentidas pelos pais durante a

Segundo Martins e Duarte (2010) de acordo com as mudanças nas políticas e práticas de ensino, o educador deve ensinar visando o aluno em questão de sua

A Prova de conhecimento teórico e construção argumentativa será realizada no dia 26 de janeiro de 2015 e a Arguição oral do projeto de pesquisa e do Currículo cadastrado na