Você está na página 1de 9

UFSC - CTC - INE - INE5232 - Computação Cientı́fica II

Prof. Daniel S. Freitas (santana@inf.ufsc.br)

3 - SOLUÇÃO DE SISTEMAS LINEARES

3.9 - Inversão de Matrizes

• Raramente utilizado na resolução de Ax = b por x = A−1b


– muitos cálculos desnecessários, comparado a resolver diretamente
– mas: em algumas aplicações pode ser necessário explicitar A−1

• A matriz A−1 pode ser obtida aplicando-se a decomposição L-U:

1. Se uma matriz An×n possui uma inversa, é uma matriz Xn×n tal que:

AX = I

2. O que pode ser re-escrito como:

A[x(1), x(2), . . . , x(n)] = [I (1), I (2), . . . , I (n)]

onde: x(j) = j-ésima coluna de X

3. O que pode ser visto como n sistemas lineares da forma:

Ax(j) = I (j) (1 ≤ j ≤ n)

4. Usar EG para produzir uma fatoração de A em L e U

5. Com a L e a U , resolver n vezes, com os vetores I (j) como lados direitos


– Equivalente a resolver para as colunas de A−1, uma por vez
– As n soluções são justamente os x(i) de:

A−1 = [x(1), x(2), . . . , x(n)]


3.10 - Métodos Iterativos

Algoritmos Iterativos

• Voltemos ao sistema Ax = b :
n
aij xj = bi (1 ≤ i ≤ n)
X

j=1

• Método de Jacobi: resolver a i-ésima equação para a i-ésima incógnita


 

(k) 1  n (k−1) 

xi = bi − aij xj (1 ≤ i ≤ n)
 X
 
aii

 j=1 
j6=i

– Nota: estamos assumindo que toda a diagonal é não nula


– Se não for assim, deve ser possı́vel rearranjar as equações para isto

• Método de Gauss-Seidel:
– Jacobi em que as equações são computadas em ordem
(k)
– Os novos valores de xj são usados assim que ficam disponı́veis
 

(k) 1  n (k) n (k−1) 



xi = bi − a x − a x (1 ≤ i ≤ n)
 X X
ij j ij j
 
aii 

j=1 j=1 
j<i j>i
(k−1)
– Na verdade, nem é preciso guardar xj e o algoritmo para o G-S
pode ser escrito como:

for k=1:kmax
for i=1:n
Pn
xi ← [bi − j=1 aij xj ]/aii
j6=i
end
end

– Critério de parada: a norma (ver livro-texto) da diferença entre dois


vetores consecutivos da iteração deve ficar abaixo de uma tolerância
especificada.

• Método de Relaxações:
– Pode-se modificar (acelerar ou retardar) a convergência do G-S
– Para isto, usa-se um parâmetro de controle ω (= fator de “relaxação”)
 

(k) 1  n (k) n (k−1) 


 + (1 − ω)x(k−1)

xi = (ω)  b − a x − a x
 X X
i ij j ij j i

aii 

j=1 j=1 
j<i j>i

– Nota: com ω = 1, o método das Relaxações se reduz ao G-S

• Exemplo: Sejam

   
2 −1 0 


1 


A = −1 3 −1 


 e b= 8 



0 −1 2 −5
   
.

– Usando Jacobi:

(k) 1 (k−1) 1
x1 = x +
2 2 2
(k) 1 (k−1) 1 (k−1) 8
x2 = x + x3 +
3 1 3 3
(k) 1 (k−1) 5
x3 = x −
2 2 2

– Usando Gauss-Seidel:

(k) 1 (k−1) 1
x1 = x +
2 2 2
(k) 1 (k) 1 (k−1) 8
x2 = x + x3 +
3 1 3 3
(k) 1 (k) 5
x3 = x −
2 2 2

– Usando Relaxações:

1 (k−1) 1 
 
(k) (k−1)
x1 = ω  x2 + + (1 − ω)x1
2 2
1 (k) 1 (k−1) 8 
 
(k) (k−1)
x2 = ω  x1 + x3 + + (1 − ω)x2
3 3 3
1 (k) 5
 
(k) (k−1)
x3 = ω  x2 −  + (1 − ω)x3
2 2
.

• Jacobi em linguagem octave (∼ pseudocódigo):

function x=jacobif(A,b,tol,kmax)
n = size(A,1)
for k = 1:kmax
y = x
for i = 1:n
soma = b(i)
diag = A(i,i)
for j = 1:n
if j != i
soma = soma - A(i,j)*y(j)
end
end
x(i) = soma/diag
end
if norm(x-y,1) < tol
break
end
end

• Exercı́cio 1: converter esta rotina para Gauss-Seidel.

• Exercı́cio 2: converter a rotina Gauss-Seidel do exercı́cio 1 para Relaxações.


.

• Questão importante: convergência dos métodos iterativos.


– Para definir um critério para Jacobi e G-S, precisamos do conceito a
seguir.

• Dizemos que uma matriz A é diagonal dominante se:

n
|aii| > |aij |
X

j=1
j6=i

• Um sistema é diagonal dominante se as equações podem ser ordenadas de


tal forma que cada elemento da diagonal principal fique maior (em módulo)
do que a soma dos módulos dos outros coeficientes na mesma linha.

x1 + x2 = 4
– Exemplo: −4x2 − 3x3 = 0
x1 + 2x3 = 0

• Teorema: Se A é diagonal dominante, então os métodos de Jacobi e de


Gauss-Seidel convergem com qualquer vetor inicial x(0).

– Note que esta é uma condição necessária mas não suficiente.


– De fato, é comum estes métodos convergirem com matrizes que não são
diagonal dominantes.
.

• A convergência do método das Relaxações depende de outra propriedade:

• Uma matriz A é simétrica e positivo-definida (SPD) se A = AT e :

xT Ax > 0, para todo vetor real não nulo x


– Nota1: A é SPD sse A = AT e A possui autovalores positivos.
– Nota2: em octave, o comando isdefinite(A,tol) retorna 1 se A for
SPD, a menos da tolerância especificada por tol

• Teorema: Suponha que a matriz A tenha elementos positivos na diagonal.


Para 0 < ω < 2, o método das Relaxações converge com qualquer x(0)
se e somente se A for SPD.

Formulação Matricial do Procedimento Iterativo

• Método Iterativo:

1. Produzir uma sequência de vetores solução aproximados:


x(0), x(1), x(2) . . .

2. O procedimento numérico é projetado de forma que, em princı́pio, esta


sequência converge para a solução real

3. O processo termina quando uma precisão suficiente já foi atingida


.

• Tudo isto pode ser generalizado da seguinte forma:

1. Selecione uma matriz não-singuklar Q


2. Escolha um vetor inicial arbitrário x(0)
3. gere vetores x(1), x(2), . . . recursivamente a partir da equação:

Qx(k) = (Q − A)x(k−1) + b

• Consistência:
– Suponha que a sequência x(k) realmente converge para um x∗
– Tomando o limite k → ∞, temos:

Qx∗ = (Q − A)x∗ + b

o que leva a: Ax∗ = b


– Logo: se a sequência converge, o seu limite é uma solução para Ax = b

• Em pseudocódigo (octave):

function x=metoditer(A,b,x0,tol,kmax)
x = x0
for k = 1:kmax
y = x
c = (Q - A)x + b
Resolva Qx = c
if norm(x-y,1) < tol
break
end
end
• É a escolha da matriz Q que leva aos 3 métodos vistos:

1. Método de Jacobi:
– Q é tomada como a diagonal principal de A

2. Método de Gauss-Seidel:
– Q vem da parte triangular inferior de A, incluindo a diagonal

3. Método das Relaxações:


– Q vem da parte triangular inferior de A, incluindo a diagonal
– mas com cada elemento aij da diagonal substituı́do por aij /ω
   


2 −1 0  

1 
• Exemplo: Método de Jacobi aonde: A = −1 3 −1 


 b= 

8 
0 −1 2 −5
   

 
2 0 0 

1. Escolhendo Q: Q = 0 3 0 



0 0 2

2. Resolvendo Qx(k) = (Q − A)x(k−1) + b (modo não-eficiente)

x(k) = Bx(k−1) + c, aonde:


   
0 1/2  0  1/2 

B = I − Q−1A = 1/3 c = Q−1b =
 
0 1/3 


 8/3 



0 1/2 0 −5/2
   

3. Iniciando com x(0) = (0, 0, . . . , 0)T , obtemos:


x(0) = (0, 0, 0)T
x(1) = (0.5000, 2.6667, −2.5000)T
x(2) = (1.8333, 2.0000, −1.1667)T
... = ...
x(21) = (2.0000, 3.0000, −1.0000)T

Você também pode gostar