Sei sulla pagina 1di 101

Sistemas lineares, mtodos diretos e SciPy

Prof. Paulo R. G. Bordoni

UFRJ

Surfista, descubra pela Internet o caminho das pedras sobre Computao Cientfica e lgebra Linear Computacional.

Vou buscar no Google, Mestre!

Com a palavra-chave scientific computation, achei:

Python e SciPy!

http://history.siam.org/

E com history of scientific computation, achei:

Quando busquei por Numerical Linear Algebra, o 1 resultado foi da Wikipedia:

Repetindo: BLAS e LAPACK, bibliotecas altamente otimizadas que implementam os algoritmos bsicos de lgebra Linear Computacional.

BLAS: Basic Linear Algebra Subprograms, LAPACK: Linear Algebra Package.

No deixem de olhar as listas indicadas de software de anlise numrica e de bibliotecas numricas.

Fui buscar a BLAS no Google!

Um repositrio de software importantssimo!

O que a Netlib:

A BLAS na www.netlib.org

Perguntas bsicas:

O que a BLAS:

A LAPACK na Wikipedia:

A continuao de LAPACK na Wikipedia:

O site oficial do LAPACK, claro: www.netlib.org

aqui que comeam as informaes sobre lgebra Linear no SciPy.

Vamos mergulhar nas Basic routines

Basic routines

O que h na parte de rotinas bsicas do Scipy sobre soluo de sistemas lineares:

Examinando as informaes sobre o solve()

Nesse script criamos uma matriz A e um vetor-coluna b. Em seguida, chamamos o solve() para resolver o sistema linear A*x = b.

Outra forma de obter informaes do solve()

Especfica para sistemas triangulares.

Detalhes do parmetros.

Para resolver sistemas lineares cuja matriz de banda.

Detalhes dos parmetros

Apropriada para matrizes hermitianas e positivo-definidas.

Detalhamento dos parmetos.

Exemplo.

Agora vamos explorar as fatoraes (Decompositions) existentes no Linear Algebra.

Basic routines Decompositions

A famosa fatorao LU.

A famosa fatorao LU continuao.

Rotinas existentes no Reference Guide para a fatorao LU.

Esta uma das rotinas do linalg para realizar a fatorao PLU. Ela s realiza a fatorao; no apresenta a soluo.

A rotina pode efetuar o pivoteamento por linha (ou no). Ela retorna: as trs matrizes P, L e U ou apenas duas, a PL que a triangular inferior permutada e a U.

Esta uma rotina alternativa anterior.

Ela recebe a matriz A e retorna uma matriz contendo a fatorao LU e um vetor contendo os ndices de pivoteamento.

Os parmetros retornados.

Esta rotina recebe a fatorada LU e o vetor piv fornecidos pela LU_factor( ). Recebe tambm o termo independente b e retorna a soluo x.

Uma brevssima explicao do que a fatorao de Cholesky.

As rotinas do SciPy para a fatorao de Cholesky.

A explicao para passagem de parmetros.

Esta rotina s efetua a fatorao. Deve ser usa com a prxima.

Esta rotina resolve o sistema aps fatorado pela rotina cho_factor( ).

Esta especfica para matrizes de banda. S fatora.

Esta resolve o sistema linear, aps a fatorao pela cholesky_banded( ).

Vamos encerrar este conjunto de transparncias detalhando o famoso Mtodo de Eliminao, de Gauss.

Carl Friedrich Gauss


30/04/1777 23/02/1855

Na verdade ele no foi criado por Gauss. Ele j aparece no cap. 8 do livro chins Os nove captulos sobre a arte matemtica, composto por geraes de mestres ao longo dos sculos X a II A.C.

Fui buscar estas informaes na Wikipedia!

Vamos agora explicar como resolver um sistema linear como o abaixo, pelo mtodo de eliminao.

Primeiro descreveremos o mtodo usando as equaes.

Nosso objetivo ser atingido em vrias etapas consecutivas.

Em cada etapa utilizaremos operaes elementares sobre as linhas.


Elas so trs:

Somar ou subtrair linhas Multiplicar uma linha por um nmero real Trocar duas linhas de posio

Na 1 etapa, eliminaremos os termos envolvendo 1 nas equaes aps a 1, efetuando operaes elementares nas linhas.

Naturalmente os coeficientes e termos independentes mudaro aps essas operaes.

Repetimos o processo para o subsistema sem a 1 linha.

Tornamos a repetir at ficarmos com um sistema triangular.

O processo consiste, portanto, em eliminarmos incgnitas nas equaes. Da o nome.

O ltimo passo consiste em resolver o sistema triangular. Algo extremamente simples.

J vimos que esse sistema pode ser reescrito na forma matricial como abaixo:

Ax = b

Acrescentando o vetor b ltima coluna da matriz A, obtemos uma matriz referida na literatura como matriz aumentada.

O processo de eliminao envolve efetuar as operaes elementares, sobre as linhas da matriz aumentada.

Linha 1 Linha 2

Linha n

As operaes elementares so: Linha 1 Linha 2 Linha 3 Linha 1 Linha 2 Linha 3 21 /11 31 /11 Linha 1 Linha 1

Linha n

Linha n

1 /11

Linha 1

Multiplicadores

Observe que os multiplicadores foram escolhidos de forma a anular todos os 1 abaixo do 11 . O 11 intitulado pivot.

Essas operaes exigem que o pivot seja no-nulo: 11 0. Caso 11 = 0 trocamos a linha 1 com outra onde 1 0.

O final do processo o mesmo: uma matriz triangular superior. Repetimos apenas para evidenciar que no precisamos envolver as incgnitas no processo s os vetores linha da matriz aumentada.

De novo, os e os so modificadas a cada passo do processo.

Quando pensamos nas equaes, fica bvio que as operaes elementares no alteram a soluo.

Isto no to bvio quando olhamos para a matriz aumentada.

Quando o 11 muito pequeno, por exemplo, 11 = 102 , estamos ampliando 100 vezes o erro envolvido na representao IEEE 754 dos multiplicadores, que ento se propaga. Esse processo, repetido ao longo da eliminao, acaba por arruinar a soluo do sistema.

Uma forma de contornar a propagao de erro consiste em localizar o 1 de maior valor absoluto e trocar a linha onde ele est com a linha 1. Esta a estratgia conhecida na literatura como pivoteamento parcial por coluna.

Antes que os Surfista reclame, vamos implementar um programa para o mtodo de eliminao.

Eu vivo errando na digitao!

Antes, vou mostrar um programa que facilita muito a entrada de dados, via teclado, para sistemas lineares Ax = b.

Experimentei o programa do Mestre para um sisteminha 3x3. Na pressa, cometi um erro, mas o programa me salvou (de digitar tudo novamente) !

Este o programa.

A continuao do cdigo.

Agora o famoso Mtodo de Eliminao de Gauss.

Porque eliminaram o Gauss, Mestre?


Coitado!

Primeiro veremos a programao no estilo clssico para o Mtodo de Eliminao, de Gauss.

Para facilitar o entendimento, vamos mostrar 1 a execuo do programa. Depois discutiremos seu cdigo.

Estes so a matriz A e o vetor b de nosso exemplo.

Eis a 1 etapa do processo de eliminao.


As operaes elementares visam colocar zeros na 1 coluna, abaixo do pivot. a mesma coisa que eliminar a varivel x1 na 2, na 3 e na 4 equao.

pivot

Mestre, seu programa est errado! A matriz A atualizada deveria ter sido esta aqui, com zeros abaixo do pivot.

Mil perdes Loirinha! Esqueci de dizer que usei o espao dos zeros para guardar os multiplicadores.

A 2 etapa do processo de eliminao. As operaes elementares visam colocar zeros na 2 coluna, abaixo do pivot.

Novamente, guardei os multiplicadores no lugar dos zeros.

a mesma coisa que eliminar a varivel x2 nas 3 e 4 equaes.

A etapa final do processo de eliminao. A soluo x foi obtida por retro-substituio.

Aps completarmos o processo de eliminao:


a matriz A a matriz triangular superior que eu marquei em rosa,

e os multiplicadores esto em verde, abaixo da diagonal.

O mtodo da fatorao LU decorre dessa ideia. U de upper e L de lower.

1 passo

O processo de eliminao pode ser resumido, recursivamente, em dois passos: 1 passo Zerar os elementos da matriz A abaixo do pivot via operaes elementares, 2 passo Enquanto possvel, repetir o processo para a matriz que resta aps retirarmos a linha e a coluna do pivot. 2 passo

Esse o incio do cdigo. Nada excepcional. Apenas definies bsicas para iniciar.

Aqui so definidas duas funes que vo mostrar o que est acontecendo.

Esta a fase da eliminao.

O loop em k define as etapas do processo de eliminao.

definido o pivot e, se ele no-nulo, criamos uma matriz-coluna, Mult, para guardar os multiplicadores.

O loop em i percorre as linhas abaixo do pivot e define um multiplicador para cada linha.

No loop em j atualizamos cada elemento da linha i efetuando a operao elementar sobre ele.

Ainda dentro do loop em i efetuamos a operao elementar sobre o elemento da linha i do termo independente b.

E guardamos esse multiplicador na linha i da coluna do pivot da matriz A e tambm na linha i do vetor Mult.

Agora a fase da retro-substituio. Da ltima equao achamos diretamente o valor de xn . Substitumos esse valor na penltima equao e achamos o valor de xn-1 .

Assim por diante, de trs para frente, at chegar 1 equao, de onde achamos x1 .

Representarei uma matriz 4x4 por uma grade, como abaixo, porque no estou interessada nos nmeros. Quero mostrar claramente o conceito de fatiamento.

0 Antes, vou mostrar 3 formas distintas de criar matrizes. 0 1 2 3

A 3 forma de criar matrizes mais simples; como no Matlab.

Fatiando para obter as trs ltimas linhas e depois para obter as trs 1s colunas.
0 0 1 2 3 0 1 2 3 0 1 2 3 1 2 3

Fatiando para obter as trs ltimas linhas da 3 e 4 colunas e depois para obter a 3 coluna.
0 0 1 2 3 0 1 2 3 0 1 2 3 1 2 3

Fatiando para obter a 3 linha e depois para obter o bloco constitudo pelas 1 e 2 linhas e 2 e 3 colunas.
0 0 1 2 3 0 1 2 3 0 1 2 3 1 2 3

Agora veremos a programao com vetorizao para o Mtodo de Eliminao, de Gauss.

O processo exatamente o mesmo e, quando executado para a mesma matriz A e vetor b, reproduz fotograficamnte o resultado do clssico. A nica diferena esta na vetorizao das operaes.

As duas funes mostrar_op_elem( ) mostrar_result( ) so as mesmas do cdigo tradicional. Insira suas definies na parte rasgada deste cdigo. O incio dele igual ao da programao tradicional.

O loop em k o nico. Como antes, ele descreve as etapas do processo de eliminao. Definimos o pivot e, se ele no zero, criamos o vetor coluna Mult que guardar os multiplicadores.

Ver nos slides finais.

Esta linha de cdigo est vetorizada!

Nela, calculamos todos os multiplicadores da coluna k, abaixo do pivot. Num golpe s, como um samurai! Veja o exemplo do Prof. na prxima transparncia.

Em 1 temos vetorizao, em 2 um loop.

Esta outra linha de cdigo tambm est vetorizada. Ela atualiza, de uma vez s, toda a sub matriz que pintei de azul. A Professora explica uma parte desse cdigo na prxima transparncia.

Observem que:

-1. 3. 5.

0.5

-0.5 1.5 2.5

e isso se repete para as outras duas linhas

A 1 das linhas acima coloca os multiplicadores na coluna k da matriz A, abaixo do pivot. Num ato s.

A 2 aplica as operaes elementares em todos os elementos do vetor b, aps a posio correspondente ao pivot. Tambm num ato s.

Na substituio retroativa, tambm temos uma vetorizao.

Executem a verso vetorizada com os mesmos dados e verifiquem que os resultados so idnticos.

No Guia de Referncia do NumPy temos

Descendo um pouco em Standard array subclasses encontraremos o que nos interessa: Matrix objects:

Pois Manuel, os detalhes sobre matrizes comeam aqui:

A continuao:

Professor, criei uma matriz M, 3x3. Em seguida, mostrei o array M.A associado a ela, a sua transposta M.T, a hermitiana associada, M.H, e a inversa M.I.

Muito simples mesmo, Mestra.

Tchau, at a prxima aula!

Potrebbero piacerti anche