ms211 - cálculo numéricovalle/teaching/ms211/aula08.pdf · a fatoração lu demorou mais que os...
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)]);
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)]);
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!