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