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

CN-Fundam. - Algoritmos e estabilidade

CN-Fundam. - Algoritmos e estabilidade

Veja a apresentação!

Paulo Bordoni

May 17, 2016
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. • O mapa da mina • Recordação rápida do que

    já vimos sobre algoritmos • O mesmo algoritmo, um deles gerando um gráfico “chocante” • Duas lições a apreender Este conjunto de transparências é dedicado . Eis um resumo do que veremos:
  3. 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.
  4. 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!
  5. 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 ∈ .
  6. 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:
  7. 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.
  8. 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!
  9. 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 = , ∀ ∈ ℝ.
  10. 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.
  11. É, o algoritmo que gera o gráfico em vermelho não

    é estável. Ele envolve muitas operações elementares e alguma delas é mau condicionada.
  12. 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º.
  13. “Forcei a barra” com d_t = 0.001. Veja o desastre!

    A escala vertical está no limite da precisão double.
  14. 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.
  15. 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º
  16. 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.
  17. 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?!
  18. 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.
  19. 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
  20. Podemos ter problemas no cálculo (algoritmo!) da hipotenusa. Algo tão

    simples como o teorema de Pitágoras. a b c = 2 + 2
  21. 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”.
  22. Quem quiser mais detalhes sobre este, e outros problemas, leia

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

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

    A ordem das parcelas não altera a soma: + + = + ( + ).
  25. 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 =
  26. 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.
  27. Você já ouviu falar que: “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!
  28. Não é a mesma coisa, mas repeti seu programa para

    = 100 × 60 × 60 × 10 = 3.600.000
  29. 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!
  30. Mestra, é isso mesmo! Meu programa mostra que pode ocorrer

    erro na associatividade da multiplicação.
  31. 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 ⟷
  32. 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.
  33. 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.
  34. Y X Vamos analisar um problema (direto) definido por uma

    função : → que, para um ∈ dado, associa um único = ∈ , via ↦ = ∈ . f
  35. 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
  36. É fundamental entender que usaremos um algoritmo para calcular a

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

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

    • ... • ≅ ∗. Y X ∗ ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗ Como resultado a composta produzirá outra função ∗: ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗. Então, quase com certeza, = ≠ ∗ = ∗().
  39. 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 ∗; • ... • ≅ ∗.
  40. 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 − ∗ < ().
  41. 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!
  42. Mas por que, Mestre? Por que, em muitas situações, o

    valor ∗ proveio de outros cálculos já realizados por algum outro algoritmo.
  43. ∆ ∗ ∗ = ∗() = () 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
  44. 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.
  45. 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?
  46. 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 ∗ = ∗()
  47. 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?
  48. 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
  49. E quando o erro reverso é pequeno, o algoritmo é

    backward estável. Quando o erro direto é pequeno, o algoritmo é forward estável.
  50. 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
  51. 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
  52. f Y X ሚ ෤ (෤ ) () f ∆x

    ሚ () 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. Problema bem condicionado Algoritmo estável
  53. 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.
  54. Como garantir a estabilidade? Não tenho a mínima ideia, Mestra!

    A 1ª parte é fácil. Achar o número de condicionamento envolve apenas uns cálculos de derivada.
  55. Como vimos, são três as possibilidades, Loirinha: • forward •

    backward • total. Mostrarei um exemplo de análise do erro forward.
  56. Considere o problema de calcular o valor de = 1

    + − 1 para próximo de 0. Vamos considerar o algoritmo natural, descrito pela composição = 3 ∘ 2 ∘ 1 na qual: • 1 = 1 + , para próximo de 0, • 2 = , para próximo de 1, • 3 = 1 − , para próximo de 1.
  57. De cara precisamos saber se o problema é bem ou

    mal condicionado em = 0. Temos = Τ 1 2 1 + de forma que: • , = 1/2 1 + , • , = Τ ( 1 + + 1) 2 1 + . Logo o problema é bem condicionado em = 0: • , 0 = 1/2, • , 0 = 1.
  58. ∆ ሚ ෤ = ሚ () = () f 0

    Forward error Solução do problema Solução calculada pelo algoritmo ሚ = 3 ∘ 2 ∘ 1 Para estimar o erro forward, precisamos saber do condicionamento relativo das 1 , 2 , 3 .
  59. E os números de condicionamento relativo são calculados a partir

    de: • 1 , = Τ (1 + ), em = 0, • 2 , = 1/2, em = 1, • 3 , = Τ (1 − ), em = 1. As derivadas são: • 1 = 1, para = 0, • 2 = 1/2 , para = 1, • 3 = −1, para = 1.
  60. A conclusão é que o algoritmo é forward instável, pois:

    • 1 é bem condicionada em = 0, • 2 é bem condicionada em = 1, • Entretanto 3 é mau condicionada em = 1 pois lim →1 3 , = +∞.
  61. Como o problema é bem condicionado existem algoritmos estáveis para

    calcular a solução. Um outro algoritmo (estável) para calcular f é obtido da identidade = 1 + − 1 = ( 1 + − 1)( 1 + + 1) 1 + + 1 = /( 1 + + 1).
  62. Lembrem-se: um algoritmo ሚ para calcular a solução de um

    problema f é “backward “ estável quando “calcula de forma exata a solução de um problema aproximado” Ah Mestre, como eu faço uma análise do erro backward?
  63. Surfista, a ideia a perseguir é: ”A solução calculada (com

    o algoritmo) é a solução exata de um problema aproximado”. A análise backward objetiva explicar o erro do algoritmo quantificando o erro nos dados.
  64. O erro backward é mais fácil de estimar que o

    erro forward. Mais adiante, no curso, veremos alguns exemplos. A solução obtida com o algoritmo é boa quando é a solução exata de um problema aproximado!