Métodos Iterativos: Método de Jacobi

Propaganda
Sistemas Lineares - Métodos Iterativos : Jacobi e
Gauss-Seidel
Profa. Cynthia de O. Lage Ferreira
Métodos Numéricos e Computacionais I - SME0305
Métodos Iterativos
Nesta seção, vamos estudar métodos iterativos para a solução de sistemas lineares Ax = b de dimensão n. Técnicas iterativas raramente são utilizados para
a resolução de sistemas lineares de dimensão pequena uma vez que o tempo
necessário para obtermos uma solução suficientemente precisa é maior que o
tempo necessário para obtermos as soluções através das técnicas diretas, tais
como a eliminação de Gauss. Para sistemas grandes e com uma elevada quantidade de zeros na matriz A, no entanto, estas técnicas são eficientes em termos de
armazenamento no computador e de computação. Sistemas deste tipo surgem
frequentemente na análise de circuitos e na solução numérica de problemas de
valor de contorno e equações diferenciais parciais.
Uma técnica iterativa para resolver o sistema linear Ax = b começa com
uma aproximação inicial x(0) 2 Rn da solução x 2 Rn e gera uma sequência de
vectores {x(k), k 0} que converge para x, isto é,
limk!1 x(k) = x.
Considerando A = P
geral, podemos escrever
(P
A), tomando uma matriz adequada P, de modo
P x = (P
de modo que
P x(k+1) = (P
ou
em que B = P
e c = P 1 b.
A)x + b,
A)x(k) + b, k
x(k+1) = Bx(k) + c, k
1
(P
0
0,
A) é chamada de matriz de iteração do processo iterativo
Método de Jacobi
Se os elementos da diagonal de A são diferentes de zero, podemos tomar
2
3
a11
6
7
a22
6
7
6
7
.
..
7.
P =D=6
6
7
6
7
.
.
4
5
.
,
ann
1
Assim, podemos escrever,
Dx(k+1) = b + (D
A)x(k) , k
0.
Ou componente a componente, temos
0
1
n
X
1
(k+1)
(k)
@bi
xi
=
aij xj A , i = 1, .., n,
aii
j=1,j6=i
onde k
(0)
(0)
(0)
0 e x(0) = (x1 , x2 , ..., xn ) é o vetor inicial.
Método de Gauss-Seidel
Quando aplicamos o método de Jacobi, cada uma das componentes do novo
(k+1)
vetor xi
é calculada de forma independente das outras. Isto pode sugerir que
uma convergência mais rápida poderia ser alcançada se as novas componentes
(k+1)
(k)
já disponíveis xj
, j = 1, ..., i 1, juntamente com as antigas xj , j i, são
(k+1)
utilizadas para o cálculo de xi
. Neste caso, temos
0
1
i 1
n
X
X
1
(k+1)
(k)
(k+1)
@bi
aij xj
aij xj A , i = 1, .., n.
xi
=
aii
j=1
j=i+1
Note que a atualização das componenetes é feita de maneira sequencial, enquanto que no método de Jacobi ela é feita simultaneamente. Neste caso,
P = D E , onde E é uma matriz triangular inferior cujas entradas não nulas
são eij = aij , i = 2, ..., n, j = 1, ..., i 1.
Convergência
DEFINIÇÃO: A matriz A de dimensão n ⇥ n é dita diagonal dominante quando
| aii |
n
X
j=1,j6=i
| aij |, i = 1, .., n.
Uma matriz diagonal dominante é dita estritamente diagonal dominante quando
a desigualdade acima é estrita para cada i, isto é,
| aii | >
n
X
j=1,j6=i
| aij |, i = 1, .., n.
TEOREMA: Se A é estritamente diagonal dominante, então para qualquer
escolha de x(0), ambos os métodos iterativos de Jacobi e Gauss-Seidel produzem
sequências {x(k) , k 0} que convergem a uma única solução do sistema Ax = b.
2
DEFINIÇÃO: O raio espectral ⇢(M ) de uma matriz M é o maior valor
absoluto de todos os autovalores de M, isto é,
⇢(M ) = max |
em que
i
i
|,
é um autovalor de M .
TEOREMA: Para qualquer escolha de x(0) , ambos os métodos iterativos
de Jacobi e Gauss-Seidel produzem sequências {x(k) , k
0} que convergem
a uma única solução do sistema Ax = b se e somente se ⇢(B) < 1, em que
B = P 1 (P A) é a matriz de iteração do respectivo processo iterativo.
COROLÁRIO: Os processos iterativos de Jacobi e Gauss-Seidel convergem
se para qualquer norma de matrizes, k B k< 1.
Critério de Parada
Para aplicar qualquer ḿetodo iterativo escolhemos uma aproximação inicial x(0)
para a solução do sistema Ax = b. Utilizando os métodos iterativos descritos
acima, refinamos a solução até uma determinada precisão. Para verificarmos se
a solução aproximada atingiu uma determinada precisão e devemos, durante o
processo iterativo, efetuar o seguinte teste:
Se
k x(k) x(k 1) k1
< " (erro relativo) , onde " é uma
kx(k) k1
precisão pré-fixada; x(k 1) e x(k) são duas aproximações consecutivas para
x, então x(k) é a solução procurada, isto é, tomamos x = x(k) .
Códigos Matlab
function [x,sp]=jacobi(A,b,x0,nit)
% JACOBI: metodo de Jacobi de soluçao do sistema Ax=b.
%
% x=jacobi(A,b,x0,nit)
% Entradas
% -A: matriz nxn;
% -b: vetor nx1;
% -x0: vetor nx1, ponto de partida das iteraçoes
% -nit: numero de iteracoes do metodo
% Saida: -x: matriz nxnit,contendo a sequencia de aproximaçoes
% da soluçao
% -sp: norma de B. O metodo converge se sp<1.
n=length(b);
x=zeros(n,nit);
3
x(:,1)=x0;
xx=x0; %xx:ponto corrente das iteraçoes
P=diag(diag(A));
N=P-A;
B=P\N;
sp=norm(B);
c=P\b;
for j=2:nit
xx=B*xx+c;
x(:,j)=xx;
end
function [x,sp]=gauss_seidel(A,b,x0,nit)
% GAUSS: metodo de Gauss-Seidel de soluçao do sistema Ax=b.
%
% x=gauss(A,b,x0,nit)
% Entradas
% -A: matriz nxn;
% -b: vetor nx1;
% -x0: vetor nx1, ponto de partida das iteraçoes
% -nit:numero de iteracoes do metodo
% Saida: -x: matriz nxnit, contendo a sequencia de aproximaçoes
% da soluçao
% -sp: norma de B. O metodo converge se sp<1.
n=length(b);
x=zeros(n,nit);
x(:,1)=x0;
xx=x0; %xx:ponto corrente das iteracoes
P=tril(A);
N=P-A;
B=P\N;
sp=norm(B);
c=P\b;
for j=2:nit
xx=B*xx+c;
x(:,j)=xx;
end
4
Exercícios
1. Resolva o sistema
8
< 10x1
x1
:
2x1
+
+
+
2x2
5x2
3x2
+
+
+
x3 =
x3 =
10x3
7
8
=
6
pelos métodos de Jacobi e Gauss-Seidel, dados x(0) = (0.7, 1.6, 0.6) e
" < 10 2 .
2. Sejam n 2 N , não nulo e " 2
de ordem nno qual
0
1
"
"2
B
B "
1
"
B
B 2 ..
.
..
B "
.
A" = B
B
B 0 ... ...
B
B . .
.. ...
@ ..
0 ···
0
[0, 1]. Considere o sistema linear A" x = b"
0
..
.
..
.
..
.
..
.
"
2
···
..
.
..
.
..
.
1
"
1
0
.. C
. C
0
C
C
0 C
C , b " = A" B
@
C
"2 C
C
C
" A
1
1
1
.. C .
. A
1
a) Faça uma função MATLAB [A,b]=matriz(n,epsilon) que constroi as
matrizes A" e b" de acordo com n e " dados.
b) Fixados n = 5 e " = 0.3 , mostre que A" é estritamente diagonal dominante.
c) Implemente o método de Jacobi em uma função MATLAB
[x,it]=jacobi2(A,b,x0,tol) que retorna a solução aproximada x do sistema Ax=b pelo método de Jacobi e o número de iterações necessárias it para
calculá-la com aproximação inicial x0 e precisão tol.
d) Implemente o método de Gauss-Seidel em uma função MATLAB
[x,it]=gauss_seidel2(A,b,x0,tol) que retorna a solução aproximada x
do sistema Ax=b pelo método de Gauss-Seidel e o número de iterações necessárias
it para calculá-la com com aproximação inicial x0 e precisão tol.
e) Use as funções dos ítens c) e d) para calcular a solução do sistema
A" x = b" , com n = 5 e " = 0.3 e critério de parada tol = 10 10 , usando
x0 = (0, 0, 0, 0, 0) como aproximação inicial. Observe o número de iterações
necessárias para a convergência em cada método.
5
f) Fixado n = 5 e " = 0.5, mostre que A" não é estritamente diagonal
dominante. Repita o ítem e) e resolva o sistema A" x = b" . O que você pode
concluir em relação à convergência dos dois métodos neste caso ?
g) Fixado n = 5, trace o gráfico dos valores dos raios espectrais das matrizes
de iteração dos métodos de Jacobi e Gauss-Seidel associadas a A" , respectivamente, em função do parâmetro ", para " = 0, 0.1, 0.2, ..., 1. O que podemos
concluir em relação à convergência dos dois métodos em função do valor de "?
6
Download