Prévia do material em texto
122 Cálculo Numérico usando o método de Jacobi iniciando com x(1) = y(1) = 0. x(k+1) = 23− y(k) 10 (4.191) y(k+1) = 26− x(k) 8 (4.192) x(2) = 23− y(1) 10 = 2,3 (4.193) y(2) = 26− x(1) 8 = 3,25 (4.194) x(3) = 23− y(2) 10 = 1,975 (4.195) y(3) = 26− x(2) 8 = 2,9625 (4.196) Exemplo 4.7.2. Considere o seguinte sistema −3x1 + x2 + x3 = 2 2x1 + 5x2 + x3 = 5 2x1 + 3x2 + 7x3 = −17 (4.197) Usando o método de Jacobi com aproximação inicial x(1) = (1, 1,−1), obtemos os seguintes resultados: k x(k) ‖x(k) − x(k−1)‖∞ 1 (1, 1, 1) -x- 2 (−0,67, 0,80, − 3,14) 2,1 3 (−1,45, 1,90, − 2,58) 1,1 4 (−0,90, 2,10, − 2,83) 5,5E−1 5 (−0,91, 1,92, − 3,07) 2,4E−1 ... ... ... 10 (−1,00, 2,00, − 3,00) 6,0E−3 Verifique a resposta. Aqui, cabe um código Python explicativo. Escreva você mesmo o código. Veja como participar da escrita do livro em: https://github.com/livroscolaborativos/CalculoNumerico Licença CC-BY-SA-3.0. Contato: reamat@ufrgs.br https://github.com/livroscolaborativos/CalculoNumerico https://creativecommons.org/licenses/by-sa/3.0/ reamat@ufrgs.br 4.7. MÉTODOS ITERATIVOS PARA SISTEMAS LINEARES 123 Código Python: Método de Jacobi from __future__ import division import numpy as np from numpy import linalg def jacobi(A,b,x0,tol,N): #preliminares A = A.astype('double') b = b.astype('double') x0 = x0.astype('double') n=np.shape(A)[0] x = np.zeros(n) it = 0 #iteracoes while (it < N): it = it+1 #iteracao de Jacobi for i in np.arange(n): x[i] = b[i] for j in np.concatenate((np.arange(0,i),np.arange(i+1,n))): x[i] -= A[i,j]*x0[j] x[i] /= A[i,i] #tolerancia if (np.linalg.norm(x-x0,np.inf) < tol): return x #prepara nova iteracao x0 = np.copy(x) raise NameError('num. max. de iteracoes excedido.') 4.7.2 Método de Gauss-Seidel Assim, como no método de Jacobi, no método de Gauss-Seidel também isola- mos o elemento xi da equação i. Porém perceba que a equação para x(k+1) 2 depende de x(k) 1 na iteração k. Intuitivamente podemos pensar em usar x(k+1) 1 que acabou de ser calculado e temos x (k+1) 2 = y2 − ( a21x (k+1) 1 + a23x (k) 3 + · · ·+ a2nx (k) n ) a22 (4.198) Licença CC-BY-SA-3.0. Contato: reamat@ufrgs.br https://creativecommons.org/licenses/by-sa/3.0/ reamat@ufrgs.br Solução de sistemas lineares Métodos iterativos para sistemas lineares Método de Gauss-Seidel