Na seção anterior, tratamos de métodos diretos para a resolução de sistemas lineares. Em um método direto (por exemplo, solução via fatoração LU) obtemos uma aproximação da solução depois de realizarmos um número finito de operações (só teremos a solução ao final do processo). Veremos nessa seção dois métodos iterativos básicos para obter uma aproximação para a solução de um sistema linear. Geralmente em um método iterativo, iniciamos com uma aproximação para a solução (que pode ser ruim) e vamos melhorando essa aproximação através de sucessivas iterações. O método de Jacobi pode ser obtido a partir do sistema linear a11x1 + a12x2 + ⋯ + a1nxn = y1 (4.181) a21x1 + a22x2 + ⋯ + a2nxn = y2 (4.182) ⋮ (4.183) an1x1 + an2x2 + ⋯ + annxn = yn (4.184) Isolando o elemento x1 da primeira equação temos
Note que utilizaremos os elementos xi(k) da iteração k (a direita da equação) para estimar o elemento x1 da próxima iteração. Da mesma forma, isolando o elemento xi de cada equação i, para todo i = 2,...,n podemos construir a iteração x1(k+1) = y1 − a12x2(k) + ⋯ + a 1nxn(k) a11 (4.186) x2(k+1) = y2 − a21x1(k) + a 23x3(k) + ⋯ + a 2nxn(k) a22 (4.187) ⋮ (4.188) xn(k+1) = y2 − an1x1(k) + ⋯ + a n,n−2xn−2(k) + a n,n−1xn−1(k) ann (4.189) Em notação mais compacta, o método de Jacobi consiste na iteração x(1) = aproximação inicial (4.190) xi(k+1) = y i −∑ j=1 j≠i na ijxj(k) ∕a ii (4.191)
Exemplo 4.7.1. Resolva o sistema 10x + y = 23 (4.192) x + 8y = 26 (4.193) usando o método de Jacobi iniciando com x(1) = y(1) = 0. x(k+1) = 23 − y(k) 10 (4.194) y(k+1) = 26 − x(k) 8 (4.195) x(2) = 23 − y(1) 10 = 2,3 (4.196) y(2) = 26 − x(1) 8 = 3,25 (4.197) x(3) = 23 − y(2) 10 = 1,975 (4.198) y(3) = 26 − x(2) 8 = 2,9625 (4.199)
Exemplo 4.7.2. Considere o seguinte sistema
Usando o método de Jacobi com aproximação inicial x(1) = (1, 1,−1), obtemos os seguintes resultados:
Verifique a resposta. No GNU Octave, podemos fazer as contas com o seguinte script: A = [-3 1 1;2 5 1;2 3 7]; b = [2,5,-17]’; x=[1 1 -1]’; for iter=1:9 x0 = x; for i=1:3 x(i) = (b(i)-A(i,[1:i-1,i+1:3])*x0([1:i-1,i+1:3]))/A(i,i); endfor x’ norm(x-x0,’inf’) endfor
function [x]=jacobi(A,b,x,tol,N)
Assim, como no método de Jacobi, no método de Gauss-Seidel também isolamos o elemento xi da equação i. Porém perceba que a equação para x2(k+1) depende de x1(k) na iteração k. Intuitivamente podemos pensar em usar x1(k+1) que acabou de ser calculado e temos
Aplicando esse raciocínio, podemos construir o método de Gauss-Seidel como x1(k+1) = y1 − a12x2(k) + ⋯ + a 1nxn(k) a11 (4.202) x2(k+1) = y2 − a21x1(k+1) + a 23x3(k) + ⋯ + a 2nxn(k) a22 (4.203) ⋮ (4.204) xn(k+1) = y2 − an1x1(k+1) + ⋯ + a n(n−1)xn−1(k+1) ann (4.205) Em notação mais compacta, o método de Gauss-Seidel consiste na iteração: x(1) = aproximação inicial (4.206) xi(k+1) = yi −∑ j=1i−1a ijxj(k+1) −∑ j=i+1na ijxj(k) aii (4.207)
Exemplo 4.7.3. Resolva o sistema 10x + y = 23 (4.208) x + 8y = 26 (4.209) usando o método de Gauss-Seidel com condições iniciais x(1) = y(1) = 0. x(k+1) = 23 − y(k) 10 (4.210) y(k+1) = 26 − x(k+1) 8 (4.211) x(2) = 23 − y(1) 10 = 2,3 (4.212) y(2) = 26 − x(2) 8 = 2,9625 (4.213) x(3) = 23 − y(2) 10 = 2,00375 (4.214) y(3) = 26 − x(3) 8 = 2,9995312 (4.215)
function [x]=gauss_seidel(A,b,x,tol,N)
Nesta seção, analisamos a convergência de métodos iterativos para solução de sistema lineares. Para tanto, consideramos um sistema linear Ax = b, onde A = [ai,j]i,j=1n,n é a matriz (real) dos coeficientes, b = (aj)j=1n é um vetor dos termos constantes e x = (xj)j=1n é o vetor incógnita. No decorrer, assumimos que A é uma matriz não singular. Geralmente, métodos iterativos são construídos como uma iteração de ponto fixo. No caso de um sistema linear, reescreve-se a equação matricial em um problema de ponto fixo equivalente, isto é:
onde T = [ti,j]i,j=1n,n é chamada de matriz da iteração e c = (cj)j=1n de vetor da iteração. Construídos a matriz T e o vetor c, o método iterativo consiste em computar a iteração:
onde x(1) é uma aproximação inicial dada. A fim de construirmos as matrizes e os vetores de iteração do método de Jacobi e de Gauss-Seidel, decompomos a matriz A da seguinte forma: onde D é a matriz diagonal D = diag (a11,a22,…,ann), isto é:
e, respectivamente, L e U são as seguintes matrizes triangular inferior e superior:
Exemplo 4.7.4. Considere o seguinte sistema linear: 3x1 + x2 − x3 = 2 (4.221) −x1 − 4x2 + x3 = −10 (4.222) x1 − 2x2 − 5x3 = 10 (4.223) Escreva o sistema na sua forma matricial Ax = b identificando a matriz dos coeficientes A, o vetor incógnita x e o vetor dos termos constantes b. Em seguida, faça a decomposição A = L + D + U. Solução. A forma matricial deste sistema é Ax = b, onde:
A decomposição da matriz A nas matrizes L triangular inferior, D diagonal e U triangular superior é:
Vamos, agora, usar a decomposição discutida acima para construir a matriz de iteração TJ e o vetor de iteração cJ associado ao método de Jacobi. Neste caso, temos: Ax = b ⇔ (L + D + U)x = b (4.226) ⇔ Dx = −(L + U)x + b (4.227) ⇔ x = −D−1(L + U)︸ =:TJx + D−1b︸ =:cJ. (4.228) Ou seja, a iteração do método de Jacobi escrita na forma matricial é:
com x(1) uma aproximação inicial dada, sendo TJ := −D−1(L + U) a matriz de iteração e cJ = D−1b o vetor da iteração.
Exemplo 4.7.5. Construa a matriz de iteração TJ e o vetor de iteração cJ do método de Jacobi para o sistema dado no Exemplo 4.7.4. Solução. A matriz de iteração é dada por:
O vetor da iteração de Jacobi é:
A forma matricial da iteração do método de Gauss-Seidel também pode ser construída com base na decomposição A = L + D + U. Para tando, fazemos: Ax = b ⇔ (L + D + U)x = b (4.232) ⇔ (L + D)x = −Ux + b (4.233) ⇔ x = −(L + D)−1U︸ =:TGx + (L + D)−1b︸ =:cG (4.234) Ou seja, a iteração do método de Gauss-Seidel escrita na forma matricial é:
com x(1) uma aproximação inicial dada, sendo TG := −(L + D)−1U a matriz de iteração e cJ = (L + D)−1b o vetor da iteração.
Exemplo 4.7.6. Construa a matriz de iteração TG e o vetor de iteração cG do método de Gauss-Seidel para o sistema dado no Exemplo 4.7.4. Solução. A matriz de iteração é dada por:
O vetor da iteração de Gauss-Seidel é:
Aqui, vamos discutir condições necessárias e suficientes para a convergência de métodos iterativos. Isto é, dado um sistema Ax = b e uma iteração:
x(1) dado, estabelecemos condições nas quais x(k) → x∗, onde x∗ é a solução do sistema dado, isto é, x∗ = Tx∗ + c ou, equivalentemente, Ax∗ = b.
Lema 4.7.1. Seja T uma matriz real n × n. O limite lim k→∞ Tk p = 0, 1 ≤ p ≤∞, se, e somente se, ρ(T) < 1.
Demonstração. Aqui, fazemos apenas um esboço da demonstração. Para mais detalhes, veja [8], Teorema 4, pág. 14. Primeiramente, suponhamos que Tp < 1, 1 ≤ p ≤∞. Como (veja [8], lema 2, pág. 12): temos ρ(T) < 1, o que mostra a implicação. Agora, suponhamos que ρ(T) < 1 e seja 0 < ϵ < 1 − ρ(T). Então, existe 1 ≤ p ≤∞ tal que (veja [8], Teorema 3, página 12):
Assim, temos:
Da equivalência entre as normas segue a recíproca.
Observação 4.7.1. Observamos que:
Lema 4.7.2. Se ρ(T) < 1, então existe (I − T)−1 e:
Demonstração. Primeiramente, provamos a existência de (I − T)−1. Seja λ um autovalor de T e x um autovetor associado, isto é, Tx = λx. Então, (I − T)x = (1 − λ)x. Além disso, temos |λ| < ρ(T) < 1, logo (1 − λ)≠0, o que garante que (I − T) é não singular. Agora, mostramos que (I − T)−1 admite a expansão acima. Do Lema 4.7.1 e da Observação 4.7.1 temos:
o que mostra que (I − T)−1 = ∑ k=0∞Tk.
Teorema 4.7.1. A sequência recursiva {x(k)} k∈ℕ dada por:
converge para solução de x = Tx + c para qualquer escolha de x(1) se, e somente se, ρ(T) < 1.
Demonstração. Primeiramente, assumimos que ρ(T) < 1. Observamos que: x(k+1) = Tx(k) + c = T(Tx(k−1) + c) + c (4.246) = T2x(k−1) + (I + T)c (4.247) ⋮ (4.248) = T(k)x(1) + ∑ k=0k−1Tk c. (4.249) Daí, do Lema 4.7.1 e do Lema 4.7.2 temos:
Ora, se x∗ é a solução de x = Tx + c, então (I − T)x∗ = c, isto é, x∗ = (I − T)−1c. Logo, temos demonstrado que x(k) converge para a solução de x = Tx + c, para qualquer escolha de x(1). Agora, suponhamos que x(k) converge para x∗ solução de x = Tx + c, para qualquer escolha de x(1). Seja, então, y um vetor arbitrário e x(1) = x∗ − y. Observamos que: x∗ − x(k+1) = (Tx∗ + c) − (Tx(k) + c) (4.251) = T(x∗ − x(k)) (4.252) ⋮ (4.253) = T(k)(x∗ − x(1)) = T(k)y. (4.254) Logo, para qualquer 1 ≤ p ≤∞, temos, :
Como y é arbitrário, da Observação 4.7.1 temos lim k→∞∥T(k)∥ p = 0, 1 ≤ p ≤∞. Então, o Lema 4.7.1 garante que ρ(T) < 1.
Observação 4.7.2. Pode-se mostrar que tais métodos iterativos tem taxa de convergência super linear com:
Para mais detalhes, veja [8], pág. 61-64.
Exemplo 4.7.7. Mostre que, para qualquer escolha da aproximação inicial, ambos os métodos de Jacobi e Gauss-Seidel são convergentes quando aplicados ao sistema linear dado no Exemplo 4.7.4. Solução. Do Teorema 4.7.1, vemos que é necessário e suficiente que ρ(TJ) < 1 e ρ(TG) < 1. Computando estes raios espectrais, obtemos ρ(TJ) ≈ 0,32 e ρ(TG) ≈ 0,13. Isto mostra que ambos os métodos serão convergentes. Uma condição suficiente porém não necessária para que os métodos de Gauss-Seidel e Jacobi convirjam é a que a matriz seja estritamente diagonal dominante.
Definição 4.7.1. Uma matriz A é estritamente diagonal dominante quando:
Definição 4.7.2. Uma matriz A é diagonal dominante quando
e para ao menos um i, aii é estritamente maior que a soma dos elementos fora da diagonal.
Teorema 4.7.2. Se a matriz A for diagonal dominante , então os métodos de Jacobi e Gauss-Seidel serão convergentes independente da escolha inicial x(1). Se conhecermos a solução exata x do problema, podemos calcular o erro relativo em cada iteração como: Em geral não temos x, entretanto podemos estimar o vetor resíduo r(k) = b − Ax(k) ̃. Note que quando o erro tende a zero, o resíduo também tende a zero.
Teorema 4.7.3. O erro relativo e o resíduo estão relacionados como (veja [3])
onde k(A) é o número de condicionamento.
Exemplo 4.7.8. Ambos os métodos de Jacobi e Gauss-Seidel são convergentes para o sistema dado no Exemplo 4.7.4, pois a matriz dos coeficientes deste é uma matriz estritamente diagonal dominante.
E 4.7.1. Considere o problema de 5 incógnitas e cinco equações dado por x1 − x2 = 1 (4.261) −x1 + 2x2 − x3 = 1 (4.262) −x2 + (2 + ε)x3 − x4 = 1 (4.263) −x3 + 2x4 − x5 = 1 (4.264) x4 − x5 = 1 (4.265)
E 4.7.2. Resolva o seguinte sistema pelo método de Jacobi e Gauss-Seidel:
Use como critério de paragem tolerância inferior a 10−3 e inicialize com x0 = y0 = z0 = 0.
E 4.7.3. Refaça o Exercício ?? construindo um algoritmo que implemente os métodos de Jacobi e Gauss-Seidel.
E 4.7.4. Considere o seguinte sistema de equações lineares: x1 − x2 = 0 −xj−1 + 5xj − xj+1 = cos(j∕10),2 ≤ j ≤ 10 x11 = x10∕2 (4.267) Construa a iteração para encontrar a solução deste problema pelos métodos de Gauss-Seidel e Jacobi. Usando esses métodos, encontre uma solução aproximada com erro absoluto inferior a 10−5. Veja também Exercício 4.5.2
Resposta. 0,324295, 0,324295, 0,317115, 0,305943, 0,291539, 0,274169, 0,253971, 0,230846, 0,203551, 0,165301, 0,082650
E 4.7.5. Faça uma permutação de linhas no sistema abaixo e resolva pelos métodos de Jacobi e Gauss-Seidel: x1 + 10x2 + 3x3 = 27 (4.268) 4x1 + x3 = 6 (4.269) 2x1 + x2 + 4x3 = 12 (4.270)
Resposta. Permute as linhas 1 e 2. |