Sunteți pe pagina 1din 108

lgebra linear computacional

Prof. Paulo R. G. Bordoni

UFRJ

Na aula passada comeamos a olhar para matrizes. Vimos tambm como criar matrizes e efetuar operaes matriciais bsicas com NumPy.

Vamos adiante!

Cramer apresentou sua frmula para resolver sistemas lineares em 1750.

Antes disso, Cardano, no final do sculo XVI, trabalhou com determinantes 2x2. Leibniz usou determinantes em 1693 para resolver sistemas lineares.

Um determinante de 2 ordem, denotado e definido por:

Notem que o clculo exige 2 multiplicaes e 1 subtrao. No computador sero 3 flops.

A regra de Cramer para resolver um sistema 2x2 como este (prove, Surfista):


O clculo exige 3x2 multiplicaes, 3 adies e 2 divises. Ao todo 11 flops.

Aplicando a regra de Cramer para resolver o sistema 2x2 + = + = obtemos:

3 1 10 = 1 3 = =2 2 1 5 1 3

2 = 1 2 1

3 1 = 5 = 1 1 5 3

Um determinante de 3 ordem, definido por:

Desenvolvendo os determinantes de 2 ordem, obtemos:

A regra de Cramer para resolver um sistema 3x3 como o acima dada por:

Foram necessrias (3/2)3! multiplicaes e 3!-1 adies/subtraes para cada determinante 3x3.

Portanto para resolver um sistema 3x3 pela regra de Cramer so necessrias: (3/2)4! multiplicaes, 4!-4 adies e 3 divises. Notem o fatorial no nmero de flops.

Este um sistema linear constitudo por n equaes lineares n incgnitas. Sendo breve: um sistema n x n

Na forma matricial esse sistema se reescreve:

Alis, Lewis Carrol conta num livro, que a notao para matrizes que usamos hoje foi proposta por Leibniz.

Ax = b

O determinante det A de uma matriz A de ordem n definido recursivamente, como na prxima transparncia.

Para n = 1, det A = a11 .

Para n > 1, o desenvolvimento pela linha do det dado por det = 1 1 + 2 2 + + onde = (1)+ e o determinante de ordem n-1 obtido a partir da matriz A excluindo-se sua linha e coluna. H um desenvolvimento semelhante a partir da coluna.

O clculo de um determinante de ordem 4 envolve:

4 mult. 3 adi.

det( 3 )
+

det( 3 )

det( 4 )

det( 3 )
+

3 mult. 2 adi. det( 3 ) 2 mult. 1 adi. det( 1 ) det( 2 )


+

det( 3 ) det( 2 )
+

det( 2 )
+

det( 2 )

det( 1 )

4! multiplicaes 3! adies/subtraes

A regra de Cramer para resolver um sistema linear n x n como este :

Se = det 0 a soluo dada por 1 2 1 = , = , , = 2 onde o determinante da matriz A com a coluna k subtituda pelo termo independente b.

Portanto, para resolver um sistema linear n x n precisaremos efetuar o clculo de n+1 determinantes de ordem n e n divises.

O total de operaes envolvidas ento: + 1 ! multiplicaes + 1 ( 1)! adies n divises

O tempo gasto, por qualquer computador, para resolver sistemas 30 x 30 inimaginvel !

Bobagem! Para o Titan mole!

A tabela a abaixo mostra o tempo gasto por um computador, que faz uma multiplicao em 10-9 segundos, para resolver um sistema n x n:

Para um sistema 25x25 o tempo de 500 milhes de anos. Comparem com a idade do universo!

n 10 15 20 25

tempo 0.004 seg. 22 min. 77 anos 0,5x109 anos

Definitivamente, invivel resolver sistemas lineares pela regra de Crammer!

Jamais esquea de contar o nmero de operaes envolvidas num algoritmo!

Nesta e nas prximas aulas mergulharemos de cabea na lgebra linear computacional. Utilizaremos a SciPy.

SciPy.org o site da SciPy que um codinome para Scientific Python.

SciPy uma biblioteca construda a partir de NumPy.

J vem instalada com Python(x,y).

Na pgina de abertura da SciPy.org uma homenagem merecida ao criador da MatPlotLib.

Palestras no congresso, agora em 2013.

Mais palestras do congresso.

Um dos tutoriais do Congresso.

O Guia de referncia da SciPy.

Todos os tpicos tratados na ltima verso da SciPy:

Clicando em Tutorial somos conduzidos a uma repetio do seu ndice.

De imediato vamos olhar para Introduction

Uma breve descrio de SciPy.

Convenes de importao.

Em nosso curso trabalharemos com os sub pacotes que marquei.

hora de embarcar no pacote scipy.linalg. Ele possui a lgebra linear computacional to anunciada.

Tudo comea aqui.

J, j entrarei em mais detalhes sobre as BLAS e LAPACK.

Mas j tem linalg na NumPy. Por qu repetir?

Eis o motivo para usar a linalg da SciPy.

Antes que voc pergunte, Surfista, v ler o resto desta discusso l no Tutorial!

A estrutura do tutorial Linear Algebra, (scipy.linalg), a seguinte:

lgebra linear
Apresentao Rotinas bsicas Decomposies Funes matriciais Matrizes especiais

Os tpicos em rotinas bsicas so :

Rotinas bsicas
Achando a inversa

Resolvendo sistemas lineares


Vamos comear pelos determinantes.

Achando o determinante Calculando normas Resolvendo problemas lineares de mnimos quadrados e pseudo-inversas Inversa generalizada

O texto um resumo do que j vimos no incio da aula.

Ento, indo ao Reference Guide do pacote Linear Algebra, em Basics, vamos encontrar os detalhes para usar a funo.

Mas se o clculo de determinantes invivel, na prtica, como o pacote scipy faz isto?

A utilizao da funo det( ) trivial e a resposta sua pergunta est marcada no p da pgina, Loirinha.

E o que fatorao LU?

algo to importante e fundamental em lgebra linear computacional como respirar para a vida! O Mestre informou que ser o assunto da prxima aula.

Neste programa entramos com uma matriz A, via teclado, e em seguida chamamos a funo det(A).

Voltando s rotinas bsicas do Scipy, vejamos o que h no tpico Calculando normas.

Rotinas bsicas
Achando a inversa

Resolvendo sistemas lineares


Achando o determinante Calculando normas Resolvendo problemas lineares de mnimos quadrados e pseudo-inversas Inversa generalizada

O SciPy possibilita calcular diversas normas. Tanto normas de vetores como de matrizes.

Por enquanto, vamos examinar apenas as normas vetoriais. Veremos as normas matriciais mais adiante. Para elas precisaremos de um pouco mais de teoria.

importantssimo observar que todas aquelas cujo parmetro ord negativo no so normas.

Surfista, apresente alguns contra-exemplos que justifiquem ltima afirmao do Mestre!

Quando ord = inf temos a norma do mximo. Para ord = 1 temos a norma da soma e para ord = 2 temos norma euclidiana. Elas so anotadas , respectivamente. As outras so anotadas
1

, ( = ).

J provamos que

1 2 + 2 2 + + 2

define uma norma. A verificao que = 1 + 2 + + uma norma bvia.

Da mesma forma, a comprovar que

= max{ 1 , 2 , , } define uma norma tambm fcil.

A dificuldade para provar que

|1 | + |2 | + + | |

uma norma est na desigualdade triangular: +

Ela conhecida na literatura como desigualdade de Minkowski.

Para prov-la precisamos da desigualdade de Hlder:

com = 1 .

No vamos provar nenhuma das duas. Porm, se voc estiver interessado, Surfista, j sabe as palavras-chave para buscar as demonstraes.

Observem que a desigualdade de Hlder desempenha um papel anlogo ao da desigualdade de Cauchy-Schwarz.

Na referncia do SciPy encontramos os detalhes dos parmetros para usar a funo norma:

Por enquanto s veremos normas de vetores. Ateno para a referncia!

Um exemplo de utilizao da funo norm( ) para vetores.

Mestre, parece que os valores numricos das normas esto tendendo ao valor da !

verdade minha filha. Prove que para temos

lim

A bola unitria no espao euclidiano o conjunto 2 = |


2

1 .

Ela descreve o conjunto 2 + 2 + 2 1, que nossa intuio entende por uma bola (de futebol) no espao euclidiano 3 . No plano seria como um CD (dos Beatles).

A bola unitria no espao com a norma da soma o conjunto 1 = |


1

1 .
1 -1 -1

No 2 ela corresponde ao conjunto definido pela desigualdade + 1, mostrado na figura.

A bola unitria no espao com a norma do mximo o conjunto = |

1 .
1 -1 -1

No 2 ela corresponde ao conjunto definido pela desigualdade max{ , } 1, mostrado na figura.

Surfista, no v jogar bola com 1 ou . Voc pode se machucar!

, so bolas que escapam da nossa intuio euclidiana.

Este livro o clssico dos clssicos sobre lgebra linear computacional. Vamos at reproduzir seu Sumrio.

Este outro clssico peso-pesado em lgebra linear computacional. Tambm vamos reproduzir seu Sumrio.

So livros de cabeceira para quem for fazer ps-graduao em computao cientfica, matemtica aplicada ou anlise numrica.

O contedo desses dois livros a definio mais apropriada de lgebra linear computacional.

Invista em voc.

Adquira os dois livros!

Um pouco mais de teoria. Vamos recordar conceito de transformao linear.

O conceito de funo , com certeza, o mais importante da matemtica.


Elas so o objeto do Clculo diferencial e integral.

Em particular, vamos considerar funes de um espao vetorial U em um outro espao vetorial V :


: , = () .

Particularizando ainda mais:


funes : de um espao vetorial U para outro V que preservam as operaes nativas de U e V.

Em outras palavras, funes : tais que:

+ ( + ) = + ,
= (). Tais funes recebem o nome especial de transformaes lineares.

Matrizes definem transformaes lineares de em atravs da multiplicao matriz x vetor. A = Uma matriz 3 x 4 define uma transformao linear 4 3 , atravs da multiplicao: 1 1 11 12 13 14 2 2 = 21 22 23 24 3 3 31 32 33 34 4

Lembrem-se que:

Se A uma matriz m x n ento: + = + , , = , ,

Que so as condies de linearidade.

Um exemplo simples de 2 em 2 1 1 2 1 = 2 2 3 2 que corresponde ao par de igualdades 1 = 1 + 22 2 = 21 32

Em 2 e em 3 podemos visualizar o efeito de uma matriz como transformao linear.

y
x Por exemplo, a matriz 1 0 = faz uma 0 1 reflexo no eixo-x, pois 1 0 = 0 1

O programa da prxima transparncia permitir a visualizao da ao de uma matriz M sobre um tringulo ABC.

Mostraremos alguns exemplos com diferentes matrizes M. Surfista, faa outros exemplos exploratrios.

O programa a seguir mostra a ao de uma matriz M de ordem 2 sobre um tringulo ABC, retngulo em B.

A matriz M escolhida faz uma reflexo no eixo-y.

Em todos os exemplos estaremos usando a mesma escala nos dois eixos.

A matriz M escolhida faz uma contrao no eixo-x e uma dilatao no eixo-y.

J a ao desta matriz M complicada de descrever.

Nas prximas trs transparncias comentaremos alguns detalhes do programa feito pelo Mestre.

So detalhes tcnicos...

A funo plot( ) s funciona com arrays; no produz grficos com matrizes. Vejam:

Face ao exposto na transparncia anterior, precisamos transformar M_Triang[0] e M_Triang[1] em arrays, usando ravel( ).

A funo fill( ) da MatPlotLib preenche uma poligonal fechada com a cor definida em rgb pela string hexadecimal #rrggbb.
Assinalei um truque sujo do Mestre para centralizar o grfico. Troque .w por +r e execute novamente para entender!

A matriz identidade I uma matriz quadrada de ordem n com 1s na diagonal e 0s fora dela.

A identidade, como transformao linear no faz nada!

I x x

Ix=x

Uma matriz M muito prxima da identidade 1 0 = . 0 1

Se M fosse a identidade I veramos apenas o tringulo rosa, cobrindo o azul.

O produto BA de uma matriz B por uma matriz A corresponde aplicao linear composta de A seguida por B:

A x y

B z

BA

Lembrem-se que a multiplicao de matrizes no comutativa. Na aula passada exibimos um programa que mostra que, usualmente, .

Por exemplo, para 1 2 1 1 = e = 1 2 1 1 temos 0 0 1 1 = e = . 0 0 1 1

A inversa de uma matriz quadrada A de ordem n uma matriz quadrada B de ordem n tal que = =

Existem matrizes que no possuem inversa so no-inversveis. Uma matriz no possui mais que uma inversa. Alm disso, a inversa da inversa a prpria!

Prova-se que A inversvel quando, e apenas quando, no-singular, i., det() 0

Entretanto, verificar se det() 0 para saber se A inversvel uma tcnica nunca utilizada em lgebra linear computacional.

Pela prpria definio, a inversa A-1 de uma matriz A , quando considerada como aplicao linear, desfaz a ao de A.

A A A-1 y

A-1

Voltando s rotinas bsicas do foquemos nossa ateno no tpico Achando a inversa.

Rotinas bsicas
Achando a inversa

Resolvendo sistemas lineares


Achando o determinante Calculando normas Resolvendo problemas lineares de mnimos quadrados e pseudo-inversas Inversa generalizada

Vejam o que Tutorial do scipy.linalg informa sobre a inversa de uma matriz:

Indo Referncia e clicando em inv( ) obtive as informaes abaixo:

Obtendo a inversa de uma matriz A e conferindo.

Pedi ao Mestre para fazer um programa parecido quele que mostra o efeito visual da ao de uma matriz num tringulo. Mas para a matriz inversa!

Ele far Loirinha, voc a queridinha dele!

O seu pedido satisfeito, Loirinha!

Verificando as aes de uma matriz e sua inversa, como transformaes lineares.

O deslocamento um artifcio para enxergarmos o efeito da inversa (em verde).

Surfista, descubra pela Internet o caminho das pedras para 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

Tchau, at a prxima aula!

S-ar putea să vă placă și