Você está na página 1de 36

Sistemas lineares, mtodos iterativos e Scipy

Prof. Paulo R. G. Bordoni

UFRJ

A teoria sobre os mtodos iterativos bsicos est explicada no 3 do cap. 3 do livro texto Clculo Numrico, aspectos tericos e computacionais, de Ruggiero e Lopes.

O mtodo mais simples de todos o de Gauss-Jacobi. Ele uma extenso do mtodo do ponto-fixo para sistemas lineares.

Entretanto, tem apenas interesse didtico!

=
Um sistema linear pode ser escrito na forma matricial.

Ou ode ser escrito equao por equao.

Separando o termo x1 da 1 equao, o x2 da 2 (e assim por diante) e isolando x1 na 1, x2 na 2 (e assim por diante), obtemos:

=
e

11 0

# =

Se D e A# so as matrizes acima, ento as equaes indicadas pela Mestra ficam:

= 1 ( # )

A partir dessa identidade vetorial criamos um mtodo iterativo do tipo ponto-fixo para aproximar a soluo x do sistema linear Ax = b. o mtodo de Gauss-Jacobi.

+1 = 1 ( # ) 0 com dado

para = 0, 1, 2, ,

Na prtica, trabalhamos com cada equao separadamente.

+1

.
=1

, para

= 1,2, ,

Professor, faa um exemplo, por gentileza. Eu me atrapalho bastante com somatrios.

Ok Loirinha. Vamos resolver o sistema linear abaixo pelo mtodo de Gauss-Jacobi.

50 + 21 + 2 = 1 0 + 31 2 = 0 0 21 + 42 = 5

tudo muito simples, comeamos isolando x0 na 1 equao, x1 na 2 e x2 na 3.

50 = 1 21 2 31 = 0 0 + 2

42 = 5 0 + 2 1

1 0 = (1 21 2 ) 5 1 1 = (0 0 + 2 ) 3 1 2 = (5 0 + 21 ) 4

E as equaes de iterao ficam:

+1

1 = (1 21 2 ) 5
1 = (0 0 + 2 ) 3 1 = (5 0 + 21 ) 4

1 2

+1

+1

Computacionalmente, usamos um vetor y para guardar os novos valores do vetor x.

Fazemos isso usando uma funo vetorial que recebe o vetor x e devolve o vetor y.

1 0 (1 21 2 ) 5 1 1 (0 0 + 2 ) 3 1 2 (5 0 + 21 ) 4

Sendo muito prtico Professora mostre-nos como se programa tudo isso.

pr j, Surfista.
Eu mesmo vou fazer!

Eu e a Professora criamos o mdulo sis_lin_iter

para guardar os mtodos iterativos que usaremos.

Nos trs exemplos a seguir utilizamos um programa que define as equaes de iterao e chama um dos programas desse mdulo.

Este o programa do mdulo.

Este o programa chamador. Ele importa o gauss_jabobi e define as equaes de iterao.

As 4 primeiras e as 4 ltimas iteraes.

Muito lento, 54 iteraes para um sistema 3x3

Como eu disse, Surfista, o mtodo de Gauss-Jacobi tem apenas interesse didtico. Eis o resultado final.

O mtodo de Gauss-Seidel uma modificao esperta do mtodo de Gauss-Jacobi.

Sim Professor. Ao calcular o novo valor da varivel xk utilizamos todos os novos valores das variveis x0, x1, ..., xk-1.

Ele praticamente igual ao mtodo de Gauss-Jacobi.

S que, ao calcular o novo x10, por exemplo, usamos os valores de x0, x1, ... , x9, que acabamos de calcular!

No entendi!
Vocs podem explicar melhor?

Ok Loirinha. Vou mostrar como fica no mesmo sistema linear que usei para o Gauss-Jacobi

50 + 21 + 2 = 1
0 + 31 2 = 0

0 21 + 42 = 5

Veja s como a ideia simples:

1 0 (1 21 2 ) 5 1 1 (0 0 + 2 ) 3

1 2 (5 0 + 21 ) 4

Compare esta linha de cdigo com a mesma no mtodo de Gauss-Jacobi.

Compare esta iterEqs com a do mtodo de Gauss-Jacobi.

Novamente, as 4 primeiras e as 4 ltimas iteraes.

Melhorou bastante. Agora so 30 iteraes.

Reduzimos em 44% ( 1-30/54) o nmero de iteraes, apenas com a modificao esperta

O mtodo de Gauss-Seidel com fator de relaxao uma modificao do prprio mtodo de Gauss-Seidel.

Sim Professor. Vou mostrar a ideia na prxima transparncia.

Para calcular o novo xi usamos uma mdia ponderada entre os antigos.

Na expresso acima, fator de ponderao o (a letra grega mega minscula)

A ideia da ponderao.

u + (1-) v u v

Quando = 1 temos o prprio mtodo de Gauss-Seidel. Quando 0 < < 1 falamos em sub-relaxao e quando > 1 falamos em sobre-relaxao.

O fator de ponderao timo calculado da forma abaixo.

O mtodo implementado.

Continuao.

Chamando o mtodo.

Novamente, as 4 primeiras e as 4 ltimas iteraes.

Reduzimos ainda mais o nmero de iteraes.

Tchau, at a prxima aula!