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

Métodos diretos para problemas inversos

Métodos diretos para problemas inversos

...

Paulo Bordoni

May 08, 2017
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Já vimos que a obtenção de raízes de equações do

    tipo = 0, sendo : [, ] → ℝ uma função contínua é um problema inverso típico. Vamos começar analisando as equações mais simples, as do 1º grau : + = 0, , ∈ ℝ, ≠ 0.
  2. Mestra, para equações lineares + = 0, , ∈ ℝ,

    ≠ 0, a resposta é imediata: = −/. Sim, aprendemos lá no 2º grau!
  3. Sim, mas para calcular a solução = −/ você precisa

    testar antes se ≠ 0. Sim, porque se = 0 a equação fica = . Então a reta será paralela ao eixo- ou o próprio ( = 0). Se for paralela não haverá solução, senão uma infinidade.
  4. Ora Mestre é só usar uma condicional no programa para

    testar se ≠ 0. Vou mostrar já! E quando é bem pequenininho, tipo = 10−7, teremos algum problema Mestres? A reta será quase paralela ao eixo-.
  5. Lembre-se, coleguinha estamos trabalhando com a aritmética finita do IEEE

    754/2008. Fui buscar os limites para você testar!
  6. Acrescentei as 3 primeiras linhas para lidar com os valores

    extremos. Continuei limitando as entradas à float32:
  7. Será que seu programa é confiável Surfista? Peça ajuda aos

    Mestres! Como já falou meu conterrâneo Shakespeare: “To be or not to be, that’s the question”.
  8. Este é um programa um pouco mais elaborado que o

    seu, Surfista: Sim, a Mestra inclui uma rotina para tratamento de erro.
  9. Ora Mestre, é só fazer como no meu programa, usar

    um if com == ! Pois é Surfista, a função equal() da NumPy permite fazer isto com vetorização (sem loops). Mostre lá Manuel!
  10. Entretanto, comparar números de ponto flutuante com igualdade frequentemente conduz

    a erros! Os nossos dois programas funcionaram; o seu até para valores extremos. Mestre, você está procurando cabelos na testa de um ovo!
  11. Surfista, o Mestre está advertindo sobre a utilização de comparações

    com igualdade devido a aritmética finita da IEEE 754/2008. Ela trabalha contra! Vou fazer um programinha que resolve um sistema linear = para confirmar o que a Mestra disse.
  12. Meu programa: 1 2 1. Recebe uma matriz e um

    termo independente e ecoa o recebimento, 2. Calcula e mostra o determinante de e a solução do sistema linear = , 3. Calcula e mostra = , 4. Confere se é, de fato igual a . 4 3
  13. Mestre, a culpa não é de Escher! Note que o

    determinante de A é quase zero.
  14. Testei para alguns sistemas 3x3. Vejam o tribar de Penrose

    nos enganando para este sistema e a verdade em seguida!
  15. Jamais esqueçam a fala do Mestre: Nunca comparem números de

    ponto flutuante IEEE 754/2008 via igualdade! Vamos repetir os exemplos anteriores usando as isclose() e allclose().
  16. 5 O programa mudou pouco: 1. Recebe uma matriz e

    um termo independente e ecoa o recebimento, 2. Calcula e mostra o determinante de e a solução do sistema linear = , 3. Calcula e mostra = , 4. Confere se, de fato, e são iguais, 5. Confere se e estão próximos, 6. Mostra o vetor proximidade, eps. 6
  17. Nos 3 exemplos a proximidade entre e é medida por

    − ≤ . Conforme o “help” de (, ) valor de é dado por = ∗ + , com = 1. − 5 e = 1. − 8, ou seja = 1. − 5 *
  18. Portanto Surfistas, Loirinhas e Cabelos de Fogo temos que pensar

    em faixas e não retas se interceptando.
  19. Para equações quadráticas, tipo 2 + + = 0, ,

    , ∈ ℝ, ≠ 0, a solução é dada pela fórmula de Bhaskara: ± = − ± 2 − 4 2 Inclusive, dependendo do valor do discriminante ∆ = 2 − 4, podemos ter duas, uma ou nenhuma solução.
  20. Meça suas palavras, Loirinha! Equações do 2º grau sempre possuirão

    duas raízes reais ou complexas. É verdade, esqueci que: • ∆ > 0 ⇒ − , + ∈ ℝ • ∆ = 0 ⇒ − = + ∈ ℝ • ∆ < 0 ⇒ − , + ∈ ℂ
  21. Resolva uma equação do 2º grau usando a NumPy, Surfista,

    no caso geral! Analise também o condicionamento da solução. Bordoni, resolver a equação do 2º grau!
  22. No século XVI matemáticos italianos como Cardano e Tartaglia e

    outros investiram muito na obtenção de fórmulas para calcular raízes de equações de grau maior que dois.
  23. Deve-se a P. Ruffini (1799) e N. H. Abel (1824),

    a prova do Teorema que hoje leva seus nomes: Para ≥ 5, não há uma fórmula geral, envolvendo os coeficientes da equação polinomial + ⋯ + 1 1 + 0 = 0 que permita calcular suas raízes, como no caso das equações de 1º, 2º, 3º e 4º graus.
  24. A resolução de sistemas de equações lineares é um problema

    inverso extremamente importante em Engenharia. Sim Galileu, e hoje para quantidades enormes de equações e incógnitas.
  25. Cramer apresentou sua fórmula para resolver sistemas lineares em 1750.

    Antes disso, Cardano, no final do século XVI, trabalhou com determinantes 2x2. Leibniz usou determinantes em 1693 para resolver sistemas lineares.
  26. Um determinante de 2ª ordem, é denotado e definido por:

    Notem que o cálculo exige 2 multiplicações e 1 subtração. = 11 12 21 22 = 11 22 − 21 12
  27. Para ≠ 0 1 = 1 12 2 22 =

    1 22 − 2 12 , 2 = 11 1 21 2 = 11 2 − 21 2 , A regra de Cramer é um método direto para resolver sistemas lineares. Para um sistema 2x2 (prove, Surfista): ቊ 11 1 + 12 2 = 1 21 1 + 22 2 = 2 = 11 11 11 11
  28. 1 = 1 12 2 22 = 1 22 −

    2 12 , 2 = 11 1 21 2 = 11 2 − 21 2 , ≠ 0 ቊ 11 1 + 12 2 = 1 21 1 + 22 2 = 2 Como são 3 determinantes teremos: • 3 × 2 multiplicações, • 3 × 1 adições • e 2 divisões.
  29. = 2 3 1 −1 2 1 1 3 =

    −5 5 = −1 = 3 1 −1 3 2 1 1 3 = 10 5 = 2 Aplicando a regra de Cramer para resolver o sistema 2x2 ቊ 2 + = 3 + 3 = −1 obtemos:
  30. = 11 12 13 21 22 23 31 32 33

    = 11 22 23 32 33 − 21 12 13 32 33 + 31 12 13 22 23 Um determinante de 3ª ordem, é o número definido por: Esse número é a soma/subtração dos produtos de 3 números por 3 determinantes 2 × 2. Portanto serão necessárias 3 × 2 multiplicações e 3+2 adições para calcular um determinante 3 × 3.
  31. 1 = 1 12 13 2 22 23 3 32

    33 , 2 = 11 1 13 21 2 23 31 3 33 , 3 = 11 12 21 22 2 31 32 3 1 = 1 , 2 = 2 , 3 = 3 , ≠ 0 ቐ 11 1 + 12 2 + 12 3 = 1 21 1 + 22 2 + 23 3 = 2 31 1 + 32 2 + 33 3 = 3 A regra de Cramer para resolver um sistema 3x3 como o acima é dada por:
  32. Como são 4 determinantes, a regra de Cramer para resolver

    um sistema 3 × 3 exige: • 4! multiplicações, • 4 × (3 + 2) adições, • e 3 divisões. Foram necessárias: • 3! multiplicações • e 3 + 2 adições/subtrações para cada determinante 3 × 3.
  33. Este é um sistema linear constituído por n equações lineares

    à n incógnitas. Sendo breve: um sistema n x n. 11 1 + 12 2 + ⋯ + 1 = 1 21 1 + 22 2 + ⋯ + 2 = 2 ⋮ 1 1 + 2 2 + ⋯ + ⋮ =
  34. Aliás, Lewis Carrol conta num livro, que a notação para

    matrizes que usamos hoje foi proposta por Leibniz. Na forma matricial esse sistema se reescreve: 11 12 ⋯ 1 21 22 ⋯ 2 ⋮ 1 2 ⋯ 1 2 ⋮ = 1 2 ⋮ =
  35. O determinante det de uma matriz A de ordem n

    é definido recursivamente, como na próxima transparência. = = 11 12 ⋯ 1 21 22 ⋯ 2 ⋮ 1 2 ⋯ 1
  36. 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 excluindo-se sua − é linha e − é coluna. Há um desenvolvimento semelhante a partir da − é coluna. Para n = 1, det A = a 11 .
  37. det(4 × 4) α det(3 × 3) β det(3 ×

    3) γ det(3 × 3) δ det(3 × 3) Τ + − Τ + − Τ + − α det(2 × 2) β det(2 × 2) γ det(2 × 2) det(3 × 3) Τ + − Τ + − α det(1 × 1) β det(1 × 1) det(2 × 2) Τ + − 2 mult. 1 adiç. 3 mult. 2 adiç. 4 mult. 3 adiç. O cálculo de um determinante de ordem 4 envolve: 4 × 3 × 2 × 1 = 4! multiplicações 3 × 2 × 1 = 3! adições/subtrações
  38. Se = det ≠ 0 a solução é dada por

    1 = 1 , 2 = 2 , ⋯ , = onde é o determinante da matriz A com a coluna k subtituída pelo termo independente b. A regra de Cramer para resolver um sistema linear n x n como este é: 11 12 ⋯ 1 21 22 ⋯ 2 ⋮ 1 2 ⋯ 1 2 ⋮ = 1 2 ⋮ =
  39. Portanto, para resolver um sistema linear × precisaremos efetuar o

    cálculo de + 1 determinantes × e divisões. Assim, o total de operações envolvidas é: • + 1 ! multiplicações • da ordem de n! adições • divisões
  40. Bobagem! Para o Titan – Cray XK7 é mole! O

    tempo gasto, por qualquer computador, para resolver sistemas 30 x 30 é inimaginável !
  41. A tabela mostra o tempo gasto pelo Cray XK7, para

    resolver um sistema n x n: n tempo 20 48.41 min. 25 7.37 séculos 30 1.076 idade univ. Surfista querido, para um sistema 30x30 ele demora um pouco mais que a idade do universo!
  42. Jamais esqueçam de contar o número de operações envolvidas num

    algoritmo! Sherlock, qual sua mensagem para Surfistas e Loirinhas?
  43. Todos esses problemas inversos citados são resolvidos diretamente, através de

    fórmulas. Isto consagra o nome: métodos diretos para resolver problemas inversos, em particular para sistemas lineares.
  44. O problema inverso mais simples é computar o oposto −

    de um número inteiro ∈ ℤ. Lembrem-se, o oposto de é o número ∈ ℤ que resolve a equação + = 0.
  45. Sim para obter o oposto basta trocar o sinal de

    z ! Mestres, trata-se de um problema trivial !
  46. A solução computacional é outra. Lembrem-se os únicos símbolos computacionais

    primários são o 0 e o 1. Todo o resto é feito com cadeias de 0’s e 1’s de tamanho pré-fixado. Como?
  47. Ainda assim é trivial Sherlock! Se o computador opera com

    cadeias de 8 bits, ele reserva 7 para a magnitude do número e o 8º bit para o sinal, pondo 0 para + e 1 para −. É isso aí Surfista! Mestres, meu colega comprovou que trata-se, realmente, de um problema trivial !
  48. Surfista, você apresentou uma solução para o problema. Como o

    Sherlock disse, a solução computacional é outra. Sim, a solução utilizada pelos cientistas de computação é de uma engenhosidade magnífica!
  49. Para facilitar o entendimento descreveremos a solução nas bases 10

    e 2. Começamos definindo o complemento à 9, 9 (), de um número decimal de um dígito. Na base 2 falamos em complemento à 1, 1 .
  50. O 9 () é o número que somado à dá

    9: + 9 = 9. Veja na tabela: 9 () 0 9 1 8 2 7 3 6 4 5 5 4 6 3 7 2 8 1 9 0 Na base 2 é mais simples ainda: 1 0 = 1 e 1 1 = 0.
  51. Por exemplo 9 (1.036) = 8.963 e 1 1.001.101 =

    0.110.010. Quando é um inteiro com vários dígitos o 9 () é obtido substituindo cada dígito de pelo seu 9 (). Na base 2 obtemos o 1 () “virando bits”: 0 → 1 e 1 → 0.
  52. O correspondente na base 2 é o complemento a 2:

    2 = 1 + 1. O complemento a 10 () de um número com vários dígitos é, simplesmente: 10 () = 9 () + 1.
  53. Fácil, fácil: 10 2.751 = 7.248 + 1. Na base

    2 é mais fácil ainda: 10 1.101.001 = 0.010.110 + 1.
  54. Fácil fazer, mas não entendo aonde vocês dois querem chegar!

    Na próxima transparência farei mágica. Vou tirar um coelho da cartola!
  55. Nossa, dá zero! O complemento a 10 de 4.532 é

    5.468. Agora some esses dois números de 4 dígitos e despreze o 5º dígito do resultado. 4.532 + 5.468 1 0.000 lixo
  56. Em outras palavras, para um número com dígitos, o complemento

    a 10 de é o “oposto” de (basta desprezar o dígito + 1 da soma). É por esse motivo que um número inteiro negativo é armazenado no computador, como 2 ().
  57. Sim, quando você digita o número − 1.001.101 no teclado,

    o computador guarda 0.110.010 + 1. Para o sistema operacional, bastam duas operações triviais: • “Virar os bits” do número dado; • E depois somar 1.
  58. É importante lembrar que, por padrão, os inteiros no computador

    já são armazenados em cadeias com 8, 16 ou 32 bits. Assim, se você digita 1 1001, o computador armazena 0001 1001 (com 8 bits). Logo −1 1001 é armazenado como 1110 0110 + 1.
  59. 0001 1001 + 1110 0111 1 0000 0000 Gostei da

    mágica: Surfista, em Matemática não há mágica. Mestres expliquem isso! lixo
  60. Loirinha, observe que o complemento a 10 de = 3.741

    é 10 () = 6.258 + 1 e portanto: 1 + 6.258 = = 1 + 9 − 3 ∙ 1.000 + 9 − 7 ∙ 100 + + 9 − 4 ∙ 10 + 9 − 1 ∙ 1 = = 1 + 9 ∙ 1000 + 9 ∙ 100 + 9 ∙ 10 + 9 ∙ 1 − − 3 ∙ 1000 + 7 ∙ 100 + 4 ∙ 10 + 1 ∙ 1 = = 1 + 9.000 + 900 + 90 + 9 −(3.000 + 700 + 40 + 1) = 1 + 9.999 − 3741 = 10.000 − 3.741
  61. Resumindo: 1 + 6.258 + 3.741 = 10.000 Ou seja,

    10 + = 10.000 e desprezando o 5º dígito: 10 + = 0.000.
  62. Resumindo tudo: O computador não faz subtrações, mas sim uma

    soma com o oposto do minuendo: Moral da estória: O problema inverso foi resolvido através de uma sequência de dois problemas diretos.