Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Da eliminação de Gauss à fatoração LU

Paulo Bordoni
October 10, 2013
200

Da eliminação de Gauss à fatoração LU

Análise detalhada do processo de eliminação de Gauss e das razões IEEE 754 para pivotamento. Depois de explicar fatiamento, construímos programas vetorizados para resolver sistemas lineares, sem e com pivotamento. Em seguida mostramos como obter a fatoração LU a partir do processo de eliminação.

Paulo Bordoni

October 10, 2013
Tweet

Transcript

  1. Agora vamos usar os superpoderes das NumPy e SciPy, para

    dirigir o magnífico calhambeque da capa pelo caminho das pedras.
  2. Antes, precisaremos aprender a obter fatias de ndarrays e a

    operar com elas. Na NumPy, a faca para fatiar arrays é o operador : . É a ferramenta que ela oferece para cortar o pão!
  3. Representarei uma matriz por uma grade, como abaixo. Por que

    só estou interessada nos índices. Isto basta para explicar o conceito de fatiamento. 0 1 2 3 0 1 2 3 5 Lembrem-se, em NumPy, a indexação de arrays começa por zero e não por um.
  4. 0 1 2 3 0 1 2 3 5 Se

    A é uma matriz m x n, então: • [ , : ] fornece a linha i de A; • [ ∶ , ] fornece a coluna j de A. [1, : ] 0 1 2 3 0 1 2 3 [ ∶, 2]
  5. Nossa 1ª fatiada será a linha 1 de uma matriz

    4x5: 0 1 2 3 0 1 2 3 5 [1, : ]
  6. 0 1 2 3 0 1 2 Se A é

    uma matriz m x n, então: • [ , : ] fornece a linha i de A, de j em diante; • [ : , ] fornece a coluna j de A, de i para baixo. [1,2: ] 0 1 2 3 0 1 2 3 [ 1: , 0]
  7. Agora a fatia é uma parte da linha 1 de

    A: da posição 2 até o final. Faça o código para a outra figura Surfista. 0 1 2 3 0 1 2 [1,2: ]
  8. No fatiamento devemos pensar em intervalos fechados à esquerda, mas

    abertos à direita: [ , : ] fornece a linha i de A, iniciando na coluna j e acabando na coluna k-1. Pense em j:k como o intervalo [j, k). 0 1 2 3 0 1 2 3 4 5 [1,1: 4]
  9. 0 1 2 3 0 1 2 3 4 5

    [1,1: 4] Uma parte da linha 1, aquela correspondente aos índices [1,4) das colunas.
  10. O produto direto de entre duas matrizes compatíveis é realizado

    em NumPy/SciPy através do produto delas como ndarrays. Portanto elas precisam ser convertidas antes, usando o modificador . A (esse A é de array): nome_da_matriz . A
  11. Carl Friedrich Gauss 30/04/1777 – 23/02/1855 Passaremos a analisar o

    famoso Método de Eliminação, de Gauss. Na verdade ele não foi criado por Gauss. Ele já aparece no cap. 8 do livro chinês “Os nove capítulos sobre a arte matemática”, composto por gerações de mestres ao longo dos séculos X a II A.C.
  12. As honras da Alemanha à K. F. Gauss, por muitas

    outras contribuições à Matemática. E as nossas também, Mestre!
  13. 11 1 + 12 2 + ⋯ + 1 =

    1 21 1 + 22 2 + ⋯ + 2 = 2 ⋯ 1 1 + 2 2 + ⋯ + = Vamos agora descrever como resolver um sistema linear como o abaixo, pelo método de eliminação. Descreveremos o processo, primeiramente, em linhas gerais, usando as equações.
  14. Em cada etapa utilizaremos operações elementares sobre as linhas. Elas

    são três: Somar ou subtrair linhas Multiplicar uma linha por um número real Trocar duas linhas de posição Nosso objetivo será atingido após várias etapas consecutivas.
  15. 11 1 + 12 2 + ⋯ + 1 =

    1 21 1 + 22 2 + ⋯ + 2 = 2 ⋯ 1 1 + 2 2 + ⋯ + = Na 1ª etapa, eliminaremos os termos envolvendo 1 nas equações após a 1ª, efetuando operações elementares nas linhas. 11 1 + 12 2 + ⋯ + 1 = 1 22 2 + ⋯ + 2 = 2 ⋯ 2 2 + ⋯ + = Os coeficientes e os termos independentes mudam após essas operações – por isto o ~ .
  16. 11 1 + 12 2 + ⋯ + 1 =

    1 22 2 + ⋯ + 2 = 2 ⋯ 2 2 + ⋯ + = Repetimos o processo para o subsistema sem a 1ª linha: Um sistema com n-1 equações a n-1 incógnitas.
  17. Repetindo n-1 vezes o processo chegamos a um sistema triangular

    superior. 11 1 + 12 2 + ⋯ + 1 = 1 = 22 2 + ⋯ + 2 = 2 ⋯ Todos os coeficientes e termos independentes são diferentes dos originais, exceto na 1ª linha.
  18. O último passo consiste em resolver o sistema triangular. Algo

    extremamente simples. A parte trabalhosa do processo consiste, portanto, em eliminarmos incógnitas nas equações. Daí o nome: processo de eliminação. Alguns textos falam em escalonamento.
  19. Sim! Como é feita, de fato, a eliminação? Mestres, vocês

    descreveram o processo em linhas gerais! Só papo...
  20. 11 12 ⋯ 1 21 22 ⋯ 2 ⋮ 1

    ⋮ 2 ⋱ ⋮ ⋯ 1 2 ⋮ = 1 2 ⋮ = Pois é... Agora vamos refazer tudo usando a forma matricial do sistema linear e a NumPy:
  21. Acrescentando o vetor b à última coluna da matriz A,

    obtemos uma matriz referida na literatura como “matriz aumentada”. | = 11 12 ⋯ 1 1 21 22 ⋯ 2 2 ⋮ 1 ⋮ 2 ⋱ ⋮ ⋮ ⋯ A matriz aumentada contém todos os dados do problema.
  22. | = 11 12 ⋯ 1 1 21 22 ⋯

    2 2 ⋮ 1 ⋮ 2 ⋱ ⋮ ⋮ ⋯ Como veremos, o processo de eliminação consiste em efetuar operações elementares sobre as linhas da matriz aumentada. Linha 1 Linha 1 Linha n
  23. Se 11 ≠ 0, as operações elementares são descritas por:

    Linha 1 Linha 1 Linha 2 Linha 2 Linha 1 21 /11 × − Linha 3 Linha 3 Linha 1 31 /11 × − Linha n Linha n Linha 1 1 /11 × − Multiplicadores
  24. 1 1 + 2 2 … = {1 1 +

    2 2 … } − (1 /11 ){ 11 1 + 21 2 + ⋯ } 1 = 0 Nova linha k Linha 1 Antiga linha k Multiplic. Observem que os multiplicadores foram escolhidos de forma a anular todos os novos 1 abaixo do 11 . 1 /11 31 /11 Multiplicadores 21 /11 11 ≠ 0
  25. As operações elementares são operações vetoriais: a multiplicação por fator

    de escala e a adição de vetores! Linha k Linha k Linha 1 −1 /11 × + Número real Vetor Vetor Vetor 11 ≠ 0
  26. Mestre, com a NumPy essa operação com linhas é feita

    num golpe só, como um Samurai! [, : ] = , : − (1 /11 ) [1, : ] Multiplic. Linha 1 Antiga linha k Nova linha k 11 ≠ 0
  27. Linha 1 Linha 1 A NumPy é mais poderosa ainda!

    Vejam: [1: , : ] = 1, : − ([1,1: ]/11 ) × [1, : ] Linha 2 Linha 3 Linha n − × Linha 2 Linha 3 Linha n 21 /11 31 /11 1 /11 Linha 1 Linha 1 Linha 1 11 ≠ 0
  28. O 11 é intitulado “pivot”. Veremos adiante que, como os

    pivots de basquete, ele será o maior da coluna. Essas operações exigem que o pivot seja não-nulo: 11 ≠ 0. Caso 11 = 0 interrompemos o processo. 1 /11 31 /11 Multiplicadores 21 /11 11 ≠ 0
  29. O final do processo é o mesmo: uma matriz triangular

    superior. Repetimos apenas para evidenciar que não precisamos envolver as incógnitas no processo – só os vetores linha da matriz aumentada. | = 11 12 ⋯ 1 1 22 ⋯ 2 2 ⋱ ⋮ ⋮ Observem que todos os elementos da matriz triangular aumentada são, eventualmente, diferentes dos iniciais.
  30. Um outro motivo é oriundo da maneira como números reais

    são tratados no computador. A representação IEEE 754 de ponto flutuante, no padrão single, será ilustrada na próxima transparência. Evitar divisão por zero não é a única razão para efetuar trocas de linhas!
  31. 1 bit para o sinal 4 bytes = 32 bits

    8 bits para o expoente 23 bits para a fração O padrão single na representação IEEE 754 possui 32 bits, distribuídos da seguinte forma:
  32. No single, a fração é constituída por 23 bits: 1

    2 ⋯ 23 com = 0 1 . 23 bits para a fração E o valor da fração é dado por: = 1 2−1 + 2 2−2 + ⋯ + 23 2−23, sendo o restante dos bits desprezado!
  33. Acreditem: A maioria esmagadora dos números reais na representação IEEE

    754 de ponto flutuante, no padrão single, possui um erro na 24 casa binária: 2−24. O Mestre acabou de afirmar que a precisão de um single é de 23 bits.
  34. Multiplicar por 2 desloca esse erro p casas binárias para

    a esquerda. Perdem-se p bits na precisão! Impressionante Sherlock, nunca tinha ouvido falar disto!
  35. Agora posso fechar os parênteses. Vou retornar ao método da

    eliminação de Gauss e focar os holofotes no pivot.
  36. 1 /11 31 /11 Multiplicadores 21 /11 Assumam que o

    valor do pivot 11 é 1/1000. 11 ≅ 2−10 Então ao dividirmos por 11 estaremos multiplicando por 1.000 (≅ 1024 = 210) os elementos 21 , 31 , … , 1 .
  37. Multiplicadores 210 × 21 210 × 31 210 × 1

    Isto significa que os multiplicadores perderão 10 dos seus 23 preciosos bits de precisão.
  38. Que horror Mestra. É por isso que os pivots tem

    que ser (jogadores) grandes! Sim minha Loirinha querida! Faça como eu, despreze pivots pequenos, eles estragam o jogo, no final. Sempre vá em busca dos maiores possíveis.
  39. Uma forma de minimizar a propagação de erro consiste em

    localizar o 1 de maior valor absoluto e trocar a linha k onde ele está com a linha 1. Esta é a estratégia conhecida na literatura como pivoteamento parcial por coluna. Na realidade esta é apenas “a ponta do iceberg”. Analisaremos tudo isto em detalhes, mais adiante!
  40. Acabamos de ver a programação do método da eliminação, de

    Gauss, para obtenção da solução = 1 2 ⋯ de um sistema de equações lineares: 11 1 + 12 2 + ⋯ + 1 = 1 21 1 + 22 2 + ⋯ + 2 = 2 ⋯ 1 1 + 2 2 + ⋯ + =
  41. | = 11 12 ⋯ 1 ⋮ 1 22 ⋯

    2 ⋮ 2 ⋱ ⋮ ⋮ ⋮ ⋮ | = 11 12 ⋯ 1 ⋮ 1 21 22 ⋯ 2 ⋮ 2 ⋮ 1 ⋮ 2 ⋱ ⋯ ⋮ ⋮ ⋮ ⋮ Efetuamos operações elementares sobre as linhas da matriz aumentada | até transformar A numa matriz triangular superior U.
  42. As operações elementares usadas foram: Somar ou subtrair linhas Multiplicar

    uma linha por um número real Trocar duas linhas de posição E elas permitiram transformar o sistema original A x = b num sistema triangular superior U x = β, com a mesma solução x.
  43. • P é uma matriz de permutações (p/. trocas de

    linhas) • L é uma matriz triangular inferior (L de lower) • U é uma matriz triangular superior (U de upper) A fatoração PLU é o resultado final dessas multiplicações. Todas essas três operações elementares podem ser descritas através de multiplicações matriciais!
  44. Indicaremos por ↔ a matriz obtida permutando as linhas i

    e j da identidade I Observem que ↔ é uma matriz simétrica, isto é ↔ = ⟷ . É fácil observar que o produto ↔ é a matriz A com suas linhas i e j trocadas. O programa a seguir mostrar isto.
  45. Neste programa você entra com uma matriz A pelo teclado

    e com os índices i e j das linhas de A a serem trocadas. Ele retorna a matriz ⟷ e o produto ⟷ .
  46. = 0 1 0 0 0 1 0 0 0

    0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 Neste exemplo, mostro a identidade I com as linhas 1 e 2 e as 3 e 5 trocadas. Aliás, se P é uma matriz obtida da identidade I através de permutações de linhas, então o produto P A é a matriz A com as mesmas linhas trocadas.
  47. Este programa faz o que está descrito no seu início.

    Ele também mostra que o produto de permutações também é uma permutação.
  48. Mestre, corrija o erro que assinalei, não é QPA, mas

    sim PQA ! He, he, he! Eu fiz como pegadinha, só para lembrar que = , uma consequência de serem matrizes de permutação.
  49. Surfista, você já reparou que as matrizes de permutação são

    matrizes ortogonais? É verdade, Mestre! No seu exemplo, as colunas de PQ são a base canônica de ℝ5 fora de ordem. = 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0
  50. Sim coleguinha. E da ortogonalidade segue que, se P é

    uma matriz de permutações então = −1. E como elas são simétricas temos −1 = = . Aliás isto é totalmente intuitivo: a inversa −1 destroca as linhas da identidade I que foram trocadas por P.
  51. A multiplicação da linha k de uma matriz A por

    um número α também é descrita por um produto matricial. A matriz M obtida a partir da identidade I substituindo o 1 da posição (i, i) por α faz isto.
  52. As operações elementares foram realizadas da seguinte forma: Linha 1

    Linha 1 Linha 2 Linha 2 Linha 1 21 /11 × − Linha 3 Linha 3 Linha 1 31 /11 × − Linha n Linha n Linha 1 1 /11 × − Multiplicadores
  53. 1 = − 1 = 1 0 ⋯ 0 0

    1 ⋮ ⋮ 0 ⋯ ⋱ 0 0 1 − 0 0 ⋯ 0 21 0 ⋮ ⋮ 1 ⋮ 0 ⋱ 0 ⋯ 0 = 1 0 ⋯ 0 −21 1 ⋯ 0 ⋮ −1 0 ⋱ ⋮ ⋯ 1 Pois é, isto corresponde a efetuar o produto 1 ∙ , Onde 1 = − 1 é a matriz de eliminação:
  54. E, o mais surpreendente, é que a inversa dessa matriz

    de eliminação 1 = − 1 é a matriz + 1 , obtida simplesmente trocando o sinal da 1 : 1 −1 = ( − 1 )−1 = 1 0 ⋯ 0 21 1 ⋯ 0 ⋮ 1 ⋮ 0 ⋱ ⋮ ⋯ 1 = + 1 Essa eu tenho que conferir!
  55. = 3 2 1 = 1 0 0 0 0

    1 0 0 0 0 0 0 1 0 9 1 1 0 0 0 0 1 0 ⋮ 0 0 7 4 1 0 0 1 1 0 0 0 3 1 0 ⋮ −2 5 0 0 1 0 0 1 = = 1 0 0 0 3 1 1 0 19 188 7 67 1 0 9 1 No método de eliminação usamos um produto, de matrizes eliminadoras = 3 2 1 Como no exemplo abaixo.
  56. −1 = 1 0 0 0 −3 1 0 ⋮

    2 −5 0 0 1 0 0 1 1 0 0 0 0 1 0 ⋮ 0 0 −7 −4 1 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 1 0 9 1 = = 1 0 0 0 −3 1 1 0 2 −5 −7 −4 1 0 −9 1 O mais surpreendente é a inversa −1 = (3 2 1 )−1= 1 −12 −1 3 −1 desse produto E. Simplesmente é a superposição das com sinal trocado