Buscar

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

Mais conteúdos dessa disciplina