Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
UFRJ
Surfista, descubra pela Internet o caminho das pedras sobre Computao Cientfica e lgebra Linear Computacional.
Python e SciPy!
http://history.siam.org/
Repetindo: BLAS e LAPACK, bibliotecas altamente otimizadas que implementam os algoritmos bsicos de lgebra Linear Computacional.
O que a Netlib:
A BLAS na www.netlib.org
Perguntas bsicas:
O que a BLAS:
A LAPACK na Wikipedia:
Basic routines
Nesse script criamos uma matriz A e um vetor-coluna b. Em seguida, chamamos o solve() para resolver o sistema linear A*x = b.
Detalhes do parmetros.
Exemplo.
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.
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.
Vamos encerrar este conjunto de transparncias detalhando o famoso Mtodo de Eliminao, de Gauss.
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.
Vamos agora explicar como resolver um sistema linear como o abaixo, pelo mtodo de eliminao.
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.
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.
Quando pensamos nas equaes, fica bvio que as operaes elementares no alteram a soluo.
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.
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.
Para facilitar o entendimento, vamos mostrar 1 a execuo do programa. Depois discutiremos seu cdigo.
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.
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.
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.
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
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.
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.
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
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.
Executem a verso vetorizada com os mesmos dados e verifiquem que os resultados so idnticos.
Descendo um pouco em Standard array subclasses encontraremos o que nos interessa: Matrix objects:
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.