MS211 - Cálculo Numérico
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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