Buscar

Prévia do material em texto

124 Cálculo Numérico
Aplicando esse raciocínio, podemos construir o método de Gauss-Seidel como
x
(k+1)
1 =
y1 −
(
a12x
(k)
2 + · · ·+ a1nx
(k)
n
)
a11
(4.199)
x
(k+1)
2 =
y2 −
(
a21x
(k+1)
1 + a23x
(k)
3 + · · ·+ a2nx
(k)
n
)
a22
(4.200)
... (4.201)
x(k+1)
n =
y2 −
(
an1x
(k+1)
1 + · · ·+ an(n−1)x
(k+1)
n−1
)
ann
(4.202)
Em notação mais compacta, o método de Gauss-Seidel consiste na iteração:
x(1) = aproximação inicial (4.203)
x
(k+1)
i =
yi −
∑i−1
j=1 aijx
(k+1)
j −∑n
j=i+1 aijx
(k)
j
aii
(4.204)
Exemplo 4.7.3. Resolva o sistema
10x+ y = 23 (4.205)
x+ 8y = 26 (4.206)
usando o método de Gauss-Seidel com condições iniciais x(1) = y(1) = 0.
x(k+1) = 23− y(k)
10 (4.207)
y(k+1) = 26− x(k+1)
8 (4.208)
x(2) = 23− y(1)
10 = 2,3 (4.209)
y(2) = 26− x(2)
8 = 2,9625 (4.210)
x(3) = 23− y(2)
10 = 2,00375 (4.211)
y(3) = 26− x(3)
8 = 2,9995312 (4.212)
Código Python: Método de Gauss-Seidel
from __future__ import division
import numpy as np
Licença CC-BY-SA-3.0. Contato: reamat@ufrgs.br
https://creativecommons.org/licenses/by-sa/3.0/
reamat@ufrgs.br
4.7. MÉTODOS ITERATIVOS PARA SISTEMAS LINEARES 125
from numpy import linalg
def gauss_seidel(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.copy(x0)
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]*x[j]
x[i] /= A[i,i]
print(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.3 Análise de convergência
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]n,ni,j=1 é a matriz (real) dos coeficientes, b = (aj)nj=1 é um vetor dos termos
constantes e x = (xj)nj=1 é 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 pro-
blema de ponto fixo equivalente, isto é:
Ax = b⇔ x = Tx+ c, (4.213)
onde T = [ti,j]n,ni,j=1 é chamada de matriz da iteração e c = (cj)nj=1 de vetor
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
	Análise de convergência

Mais conteúdos dessa disciplina