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

Estabilidade de algoritmos

Estabilidade de algoritmos

...

Paulo Bordoni

April 05, 2017
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Números NO COMPUTADOR Estabilidade DE ALGORIMOS Algoritmos e a resolução

    de problemas Números No mapa da mina, assinalei em cores o que já vimos. Em branco o que veremos agora. DIFERENCIABILI//. E CONDICIONAMENTO O mapa da mina OPERAÇÕES ELEMENTARES E CONTINUIDADE Revisão de vetores e matrizes Vetores, matrizes e a numpy
  2. Recordando: × f = () Não confundam função com uma

    expressão que permite calculá-la. Podem haver diversas. Por exemplo = ( − 1)2 e = 2 − 2 + 1.
  3. Recordando: Nada a ver, ( − 1)2 = 2 −

    2 + 1, é uma identidade! Apressadinho! Do lado esquerdo 2 operações elementares, do lado direito 4. O dobro!
  4. Recordando: Calma Surfista, você verá que a fala do Filósofo

    faz sentido. O valor = () de uma função : → pode ser calculado de diversas formas. Cada uma estabelece um algoritmo para calcular y em ∈ .
  5. Recordando: f Y f1 X fn Y1 X2 Xn Yn-1

    Qualquer função computável : → é computada através de uma sucessão finita de operações elementares. Incluindo as do IEEE 754. Diagramaticamente:
  6. Recordando: Então, Loirinha: Um algoritmo é, essencialmente, uma descrição dessa

    cadeia finita de funções elementares (incluindo aí comparações, e decisões lógicas) para computar uma outra função. Esta ideia independe do IEEE 754. Um algoritmo nada mais é que uma composição de operações elementares ∘ ⋅⋅⋅ ∘ 2 ∘ 1 = que computam uma função f associada ao problema.
  7. Pois é Surfista, você está cansado de saber que (

    − 1)3= 3 − 32 + 3 − 1. Claro, Mestre, a igualdade é pela expansão do binômio de Newton!
  8. Portanto você concorda que = ( − 1)5 e =

    5 + −54 + 103 − 102 + 5 − 1 representam funções iguais, só os algoritmos são diferentes. Claro, Mestre, pelo do binômio de Newton temos = , ∀ ∈ ℝ.
  9. Há duas lições a aprender com este exemplo, Surfista. A

    1ª delas é que algoritmos distintos para resolver o mesmo problema podem conduzir a resultados computacionais diferentes.
  10. É, o algoritmo que gera o gráfico em vermelho não

    é estável. Ele envolve muitas operações elementares e alguma delas é mau condicionada.
  11. Como 2ª lição de hoje, Surfista: Não exija além das

    possibilidades do IEEE 754. Volte lá nos dois gráfico e atente para a escala vertical do 1º e a do 2º.
  12. “Forcei a barra” com d_t = 0.001. Veja o desastre!

    Confira na próxima transparência que escala vertical está no limite da precisão double.
  13. No estudo de algoritmos no computador, o 1º aspecto a

    considerar é o número de operações elementares utilizadas pelo algoritmo. O 2º envolve a propagação de erros.
  14. Perante a matemática finita do IEEE 754 o que distingue

    dois algoritmos para resolver um problema associado a uma função f são composições diferentes: = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 e = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 Obviamente: Cada algoritmo poderá envolver uma quantidade diferente de operações elementares! 1º Cada operação elementar possui a sua sensibilidade – seu número de condicionamento! 2º
  15. O 2º aspecto só aparece porque não vale o axioma

    de existência do supremo na representação de ponto flutuante do IEEE 754. É alguns algoritmos serão estáveis. Outros não.
  16. Sim, Loirinha, como vimos no exemplo gráfico da função ↦

    ( − 1)5 , compostas = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 e = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 podem responder de forma diferente face à propagação de erros do IEEE 754. Estabilidade?!
  17. A f pode ser ser bem ou mau condicionada. Idem

    para cada uma das operações elementares e . Cada uma pode ser bem ou mau condicionada. Pois é Loirinha, lembre-se que: tanto a f como cada operação elementar e cada possui seu número de condicionamento.
  18. f Y X Y1 f1 X2 Uma situação altamente indesejável

    é a f ser bem condicionada, mas uma das operações elementares (ou ) ser mau condicionada. Então o algoritmo será instável. fn Xn Yn-1
  19. Podemos ter problemas no cálculo (algoritmo!) da hipotenusa. Algo tão

    simples como o teorema de Pitágoras. a b c = 2 + 2
  20. Como? Veja no código, no algoritmo novo: • Antes de

    elevar ao quadrado cada componente do vetor X calculei = max(). • Depois montei o vetor = /. Os elementos de Y satisfazem | | ≤ 1. Logo, elevá-los ao quadrado e somá-los não causará “overflow”.
  21. Quem quiser mais detalhes sobre este, e outros problemas, leia

    o artigo abaixo, que está no site do Mestre.
  22. Será instrutivo examinar alguns exemplos simples. De erros causados por

    assumir que algoritmos distintos, que resolvem o mesmo problema, conduzem à mesma solução computacional.
  23. Pois é Filósofo, algo simplérrimo. Mas são dois algoritmos distintos.

    A ordem das parcelas não altera a soma: + + = + ( + ).
  24. A lei do cancelamento, na adição, está escondida na sequência

    de propriedades: 1. Associatividade, 2. Definição de oposto, 3. Existência do neutro. Como diria o Sherlock: “Elementar meu caro Watson, elementar”: + − = + − = + 0 =
  25. Neste programa, eu sorteio valores para e y no intervalo

    (0, 1), testo a lei do cancelamento. No caso de falha, emito uma mensagem e mostro os resultados.
  26. Você conhece o dito popular: “De grão em grão, a

    galinha enche o papo” Veja o exemplo a seguir! Ah, Mestra! não acontece sempre. Quando aparecem são errinhos minúsculos, lá na última casa!
  27. Não é a mesma coisa, mas repeti seu programa para

    = 100 × 60 × 60 × 10 = 3.600.000
  28. A ordem dos fatores não altera o produto: ∗ ∗

    = ∗ ( ∗ ). Apesar da igualdade, como na adição, são dois algoritmos distintos, que podem conduzir a resultados diferentes!
  29. Mestra, é isso mesmo! Meu programa mostra que pode ocorrer

    erro na associatividade da multiplicação.
  30. O Sherlock está se referindo a subentendidos do tipo 235.0

    = 235 Meu caro Watson Surfista, você poderá ser gravemente punido ao fazer conversões ingênuas, do tipo ⟷
  31. Na próxima transparência, mostro um 3º exemplo de erro, que

    causou um prejuízo enorme. Apesar de que, nesse caso, o erro foi na utilização do Método dos Elementos Finitos. De qualquer forma, um erro de Cálculo Numérico.
  32. Os exemplos mostram de forma clara que alguns algoritmos podem

    produzir catástrofes. O termo matemático para descrever a situação é a estabilidade dos algoritmos. Alguns são estáveis e outros instáveis.
  33. Y X Vamos analisar um problema (direto) definido por uma

    função : → que, para um ∈ dado, associa um único = ∈ , via ↦ = ∈ . f
  34. Y X Como sempre, o cálculo de = é efetuado

    por um algoritmo. Em outras palavras, é uma composta de funções elementares: = ∘ ⋯ ∘ 1 ∘ 0 = ∘ ⋯ ∘ 1 ∘ 0
  35. É fundamental entender que usaremos um algoritmo para calcular a

    solução no computador. Por quê você grifou computador Sherlock?
  36. O grifo do Sherlock é de importância capital. No computador

    as operações elementares são ligeiramente diferentes: • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.
  37. • 0 ≅ 0 ∗; • 1 ≅ 1 ∗;

    • ... • ≅ ∗. Y X ∗ ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗ Como resultado a composta produzirá outra função ∗: ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗. Então, quase com certeza, = ≠ ∗ = ∗().
  38. Entretanto, como as operações elementares ∗ da IEEE 754/2008 satisfazem

    o Teorema Fundamental da Representação de Ponto Flutuante temos a esperança que − ∗ < , com = ∗ () sendo ∈ ℝ um número pequeno. • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.
  39. X X Usualmente a 1ª operação da composta, a 0

    ∗, é a operação de entrada de dados no computador, 0 ∗ = , isto é: ↦ ∗ = (). 0 = ∗ E, já vimos que ∗ = () com − ∗ < ().
  40. Y X f ∗ = ∘ ⋯ ∘ 1 ∗

    ∗ ∆ ∆ Assumir que ∗ é uma perturbação qualquer de com ∆ = − ∗ . Então ∗ = ∗(∗) será o valor calculado pelo algoritmo ∗ = ∘ ⋯ ∘ 1 em ∗ e queremos estimar ∆ = − ∗ . Antes de continuar, podemos pensar (como os matemáticos) num problema mais geral!
  41. Mas por que, Mestre? Por que, em muitas situações, o

    valor ∗ proveio de outros cálculos já realizados por algum outro algoritmo.
  42. ∆ ∗ ∗ = ∗() = () f Forward error

    Mas, voltando à situação inicial, o erro direto (forward error), é o erro ao calcular a solução para o dado (input) pelo algoritmo: ∆ = − ∗ = − ∗(∗) Solução do problema Solução calculada pelo algoritmo
  43. Para a aproximação ∗ = 1.41 obtida ao calcular =

    2, por um determinado algoritmo, o erro direto (forward) é |∆| = ∗ − | = |1.41 − 1.41421… ≅ 0.00421… O problema em avaliar o erro forward é que a solução exata (no caso = 2) usualmente é desconhecida.
  44. Claro Mestre! E é para isto que usamos o computador,

    onde o algoritmo foi implementado. E fornece uma aproximação com ~7 casas decimais no caso de float32. Portanto, calcular o erro forward é algo apenas teórico. Como faremos na prática?
  45. Wilkinson, no final dos anos 1950, bolou uma forma ingênua

    de contornar o problema: Descobrir qual aproximação ෤ de fornece o valor ∗ = ∗(∗) calculado pelo algoritmo e medir ∆ = − ෤ . ෤ Aproximação a descobrir f (෤ ) é a solução exata na aproximação ෤ . A solução exata do problema = () A solução calculada pelo algoritmo ∗ = ∗()
  46. 2 1.414 Como a inversa de ↦ é ↦ 2,

    calcule 1.4142 = 1.999396. Então o erro backward será ∆ = 2 − 1.999396 = 0.000604 1.999396 2 Mestre usei um algoritmo para calcular 2 e obtive 2 ≅ 1.414. Como calculo o erro backward?
  47. Sim, é o conhecimento de ෤ (solução do problema inverso)

    que permite calcular ∆ = − ෤ , o erro reverso (backward error) do algoritmo ∗ em . ∗ f A solução exata do problema ෤ Aproximação a descobrir −1 Solução exata na aproximação ෤ . A solução calculada pelo algoritmo ∆ Backward error
  48. E quando o erro reverso é pequeno, o algoritmo é

    backward estável. Quando o erro direto é pequeno, o algoritmo é forward estável.
  49. Um algoritmo ∗ para calcular a solução de um problema

    f num ponto ∈ é estável quando existe ෤ ∈ tal que os erros backward, ∆, e forward, ∆, são pequenos. ∆ f ∗ ෤ ∆ ∗() (෤ ) Backward error Forward error
  50. Em outras palavras quando, para cada ∈ a solução calculada

    com o algoritmo, ሚ (), é uma boa aproximação (∆ é pequeno) para a solução (෤ ) de um problema aproximado (∆ é pequeno). ∆ f ሚ ෤ ∆ ෤ = ሚ () = (෤ ) Solução calculada com o algoritmo Solução do problema aproximado
  51. Y X ෤ ∆x (෤ ) f Se um problema

    f é bem condicionado e um algoritmo ሚ para calcular a solução é estável poderemos garantir que a solução computada ሚ () e a solução real () estarão próximas. Algoritmo estável ሚ () Resultado confiável () f ሚ Problema bem condicionado
  52. Mestres, se entendi bem, na prática são dois passos: 1.

    Garantir que o problema é bem condicionado; 2. Usar um algoritmo estável para calcular a solução. Exatamente, Surfista. Então você terá certeza que a solução computada estará próxima da solução real. Veremos isto na prática ao longo do curso.