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